{"version":3,"sources":["../src/lib/Apis/configuration.ts","../src/lib/Apis/sharedConfig.ts","../src/lib/api-adapter/config.ts","../src/lib/utils/colors.ts","../src/providers/ThemeProvider.tsx","../src/providers/AuthProvider.tsx","../src/lib/Apis/base.ts","../src/lib/Apis/apis/users-api.ts","../src/lib/Apis/apis/products-api.ts","../src/lib/utils/deviceId.ts","../src/lib/Apis/apis/addresses-api.ts","../src/lib/Apis/apis/auth-api.ts","../src/lib/Apis/apis/cart-api.ts","../src/lib/Apis/apis/categories-api.ts","../src/lib/Apis/apis/discounts-api.ts","../src/lib/Apis/apis/notifications-api.ts","../src/lib/Apis/apis/orders-api.ts","../src/lib/Apis/apis/review-api.ts","../src/lib/Apis/apis/service-forms-api.ts","../src/lib/Apis/apis/shipping-api.ts","../src/lib/Apis/apis/stores-api.ts","../src/lib/Apis/apis/wishlist-api.ts","../src/lib/Apis/index.ts","../src/lib/Apis/models/address.ts","../src/lib/Apis/models/address-created-request.ts","../src/lib/Apis/models/bulk-channel-toggle-dto.ts","../src/lib/Apis/models/contact-us.ts","../src/lib/Apis/models/create-address-dto.ts","../src/lib/Apis/models/create-discount-dto.ts","../src/lib/Apis/models/create-message-dto.ts","../src/lib/Apis/models/create-product-bank-item-dto.ts","../src/lib/Apis/models/create-service-form-dto.ts","../src/lib/Apis/models/create-user-dto.ts","../src/lib/Apis/models/day-availability.ts","../src/lib/Apis/models/day-availability-dto.ts","../src/lib/Apis/models/discount.ts","../src/lib/Apis/models/guest-checkout-dto.ts","../src/lib/Apis/models/inventory-alert-dto.ts","../src/lib/Apis/models/manual-discount-dto.ts","../src/lib/Apis/models/manual-order-dto.ts","../src/lib/Apis/models/notification-dto.ts","../src/lib/Apis/models/order.ts","../src/lib/Apis/models/order-time-line-dto.ts","../src/lib/Apis/models/payment.ts","../src/lib/Apis/models/personalized-products-query-dto.ts","../src/lib/Apis/models/populated-discount.ts","../src/lib/Apis/models/populated-order.ts","../src/lib/Apis/models/preference-update-item.ts","../src/lib/Apis/models/product-variant.ts","../src/lib/Apis/models/product-variant-populated.ts","../src/lib/Apis/models/reorder-products-dto.ts","../src/lib/Apis/models/service-appointment.ts","../src/lib/Apis/models/service-form.ts","../src/lib/Apis/models/service-form-field.ts","../src/lib/Apis/models/service-form-field-dto.ts","../src/lib/Apis/models/service-submission.ts","../src/lib/Apis/models/shipment-details-dto.ts","../src/lib/Apis/models/shipping-info.ts","../src/lib/Apis/models/single-product-media.ts","../src/lib/Apis/models/update-address-dto.ts","../src/lib/Apis/models/update-discount-dto.ts","../src/lib/Apis/models/update-manual-shipment-status-dto.ts","../src/lib/Apis/models/update-message-dto.ts","../src/lib/Apis/models/update-product-bank-item-dto.ts","../src/lib/Apis/models/update-service-form-dto.ts","../src/lib/Apis/models/update-submission-dto.ts","../src/lib/Apis/models/update-user-dto.ts","../src/lib/Apis/models/user-entity.ts","../src/lib/Apis/models/user-with-no-id.ts","../src/lib/api-adapter/index.ts","../src/lib/Apis/wrapper.ts","../src/components/Notification.tsx","../src/providers/NotificationProvider.tsx","../src/lib/utils/guestWishlist.ts","../src/providers/WishlistProvider.tsx","../src/lib/utils/guestCart.ts","../src/providers/CartProvider.tsx","../src/providers/BasePathProvider.tsx","../src/lib/utils/discount.ts","../src/providers/DiscountProvider.tsx","../src/providers/NotificationCenterProvider.tsx","../src/providers/CategoriesProvider.tsx","../src/context/StoreContext.tsx","../src/providers/EcommerceProvider.tsx","../src/lib/constants/assets.ts","../src/components/NotifyWhenInStockButton.tsx","../src/components/QuickViewModal.tsx","../src/components/ProductCard.tsx","../src/components/ui/Skeleton.tsx","../src/components/EmptyState.tsx","../src/hooks/useProducts.ts","../src/lib/utils/format.ts","../src/lib/utils/productFilters.ts","../src/lib/utils/personalizationSession.ts","../src/hooks/usePersonalizedProducts.ts","../src/screens/ShopScreen.tsx","../src/components/ui/Button.tsx","../src/screens/ProductDetailScreen.tsx","../src/components/CartItem.tsx","../src/components/OutOfStockCartItem.tsx","../src/components/RecommendedProductsSection.tsx","../src/components/ui/Modal.tsx","../src/screens/CartScreen.tsx","../src/components/ui/Input.tsx","../src/hooks/useAddresses.ts","../src/hooks/useStoreCapabilities.ts","../src/lib/validations/address.ts","../src/lib/constants/us-states.ts","../src/components/AddressFormModal.tsx","../src/components/ui/CheckoutStepper.tsx","../src/lib/validations/discount.ts","../src/hooks/useDiscounts.ts","../src/components/CouponCodeInput.tsx","../src/components/ui/ConfirmModal.tsx","../src/screens/CheckoutScreen.tsx","../src/screens/AuthScreen.tsx","../src/screens/PrivacyScreen.tsx","../src/components/TabNavigation.tsx","../src/hooks/useOrders.ts","../src/components/ui/Badge.tsx","../src/components/AccountOverviewTab.tsx","../src/hooks/useOrderProductImages.ts","../src/components/AccountOrdersTab.tsx","../src/components/AccountAddressesTab.tsx","../src/components/AccountSettingsTab.tsx","../src/screens/ProfileScreen.tsx","../src/screens/AddressesScreen.tsx","../src/hooks/useWishlistProducts.ts","../src/screens/WishlistScreen.tsx","../src/screens/SearchResultsScreen.tsx","../src/screens/NewAddressScreen.tsx","../src/screens/EditProfileScreen.tsx","../src/screens/NotificationSettingsScreen.tsx","../src/screens/OrderDetailScreen.tsx","../src/screens/TrackOrderScreen.tsx","../src/components/NotificationCard.tsx","../src/components/NotificationModal.tsx","../src/components/NotificationBell.tsx","../src/components/ui/utils.ts","../src/components/ui/sheet.tsx","../src/components/ui/CartDrawer.tsx","../src/components/Header.tsx","../src/components/FloatingCartButton.tsx","../src/components/Footer.tsx","../src/components/OrderCard.tsx","../src/components/NotificationDrawer.tsx","../src/components/StarRating.tsx","../src/components/ReviewCard.tsx","../src/hooks/useReviews.ts","../src/components/ReviewForm.tsx","../src/components/RatingDistribution.tsx","../src/components/ReviewsList.tsx","../src/components/ProductReviewsSection.tsx","../src/components/AccountReviewsTab.tsx","../src/hooks/useVaccines.ts","../src/components/vaccine/VaccineStepper.tsx","../src/components/vaccine/SignaturePad.tsx","../src/components/vaccine/PhotoUpload.tsx","../src/components/vaccine/consentFields.tsx","../src/components/vaccine/InsuranceDisclaimer.tsx","../src/screens/BookVaccineScreen.tsx","../src/screens/BookCustomVaccineScreen.tsx","../src/components/vaccine/VaccineBanner.tsx","../src/components/vaccine/SpecialtyVaccineBanner.tsx"],"names":["React","axios","globalAxios","createContext","useContext","useEffect","jsx","AddressAddressTypeEnum","AddressCreatedRequestAddressTypeEnum","BulkChannelToggleDtoCategoryEnum","ContactUsStatusEnum","CreateAddressDtoAddressTypeEnum","CreateDiscountDtoTypeEnum","CreateDiscountDtoValueTypeEnum","CreateDiscountDtoStateEnum","CreateMessageDtoStatusEnum","CreateProductBankItemDtoDrugTypeEnum","CreateProductBankItemDtoDosageFormEnum","CreateServiceFormDtoCategoryEnum","CreateUserDtoRoleEnum","CreateUserDtoCustomerTypeEnum","DayAvailabilityDayEnum","DayAvailabilityDtoDayEnum","DiscountTypeEnum","DiscountValueTypeEnum","DiscountStateEnum","GuestCheckoutDtoPaymentMethodEnum","GuestCheckoutDtoOrderStatusEnum","GuestCheckoutDtoPaymentStatusEnum","GuestCheckoutDtoDeliveryMethodEnum","InventoryAlertDtoAlertTypeEnum","ManualDiscountDtoValueTypeEnum","ManualOrderDTOPaymentMethodEnum","ManualOrderDTOOrderStatusEnum","ManualOrderDTOPaymentStatusEnum","ManualOrderDTODeliveryMethodEnum","NotificationDtoTypeEnum","OrderOrderTypeEnum","OrderTypeEnum","OrderTimeLineDTOTypeEnum","PaymentPaymentStatusEnum","PaymentPaymentMethodEnum","PersonalizedProductsQueryDtoSortEnum","PopulatedDiscountTypeEnum","PopulatedDiscountValueTypeEnum","PopulatedDiscountStateEnum","PopulatedOrderOrderTypeEnum","PopulatedOrderTypeEnum","PreferenceUpdateItemTypeEnum","ProductVariantInventoryStatusEnum","ProductVariantPopulatedInventoryStatusEnum","ReorderProductsDtoContainerTypeEnum","ServiceAppointmentStatusEnum","ServiceFormCategoryEnum","ServiceFormFieldTypeEnum","ServiceFormFieldDtoTypeEnum","ServiceSubmissionStatusEnum","ShipmentDetailsDtoStatusEnum","ShippingInfoStatusEnum","SingleProductMediaTypeEnum","UpdateAddressDtoAddressTypeEnum","UpdateDiscountDtoTypeEnum","UpdateDiscountDtoValueTypeEnum","UpdateDiscountDtoStateEnum","UpdateManualShipmentStatusDtoStatusEnum","UpdateMessageDtoStatusEnum","UpdateProductBankItemDtoDrugTypeEnum","UpdateProductBankItemDtoDosageFormEnum","UpdateServiceFormDtoCategoryEnum","UpdateSubmissionDtoStatusEnum","UpdateUserDtoRoleEnum","UpdateUserDtoCustomerTypeEnum","UserEntityRoleEnum","UserEntityCustomerTypeEnum","UserWithNoIdRoleEnum","UserWithNoIdCustomerTypeEnum","Notification","jsxs","useState","useCallback","timer","res","api","useRef","settings","motion","CheckCircle2","X","Image","Fragment","Link","useMemo","ShoppingCart","outOfStockVariantId","Plus","useQuery","format","passes","Heart","Package","useRouter","selectedBrands","newArrivals","categories","Check","AnimatePresence","best","Sparkles","Minus","productId","AlertCircle","Trash2","ShoppingBag","ArrowRight","total","useQueryClient","Truck","z","useForm","zodResolver","Gift","Loader2","CreditCard","forwardRef","CardSection","errors","error","isCustomDelivery","isDeliveryBoolean","ClipboardCheck","next","RotateCcw","useSearchParams","tabs","useMutation","response","Mail","MapPin","Star","Edit3","MoreVertical","Phone","Bell","AlertTriangle","User","_","products","Search","Clock","ArrowLeft","Controller","status","ChevronLeft","ExternalLink","Lock","BellIcon","BellOff","ChevronRight","CartItemSkeleton","ChevronDown","createPortal","Repeat","CheckCheck","Settings","getInitials","getId","getVariantId","reviewKey","CheckCircle","Pencil","Syringe","ShieldCheck","WEEKDAY_BY_INDEX","DAYS_AHEAD","SECTION_ICON","FileText","startOfToday","addDays","getDay","Calendar","ClipboardList","PenLine","BadgeCheck"],"mappings":"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","file":"index.mjs","sourcesContent":["/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nexport interface ConfigurationParameters {\n  _id?: string;\n    apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);\n    username?: string;\n    password?: string;\n    accessToken?: string | Promise<string> | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise<string>);\n    basePath?: string;\n    baseOptions?: any;\n}\n\nexport class Configuration {\n    /**\n     * parameter for apiKey security\n     * @param name security name\n     * @memberof Configuration\n     */\n    apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);\n    /**\n     * parameter for basic security\n     *\n     * @type {string}\n     * @memberof Configuration\n     */\n    username?: string;\n    /**\n     * parameter for basic security\n     *\n     * @type {string}\n     * @memberof Configuration\n     */\n    password?: string;\n    /**\n     * parameter for oauth2 security\n     * @param name security name\n     * @param scopes oauth2 scope\n     * @memberof Configuration\n     */\n    accessToken?: string | Promise<string> | ((name?: string, scopes?: string[]) => string) | ((name?: string, scopes?: string[]) => Promise<string>);\n    /**\n     * override base path\n     *\n     * @type {string}\n     * @memberof Configuration\n     */\n    basePath?: string;\n    /**\n     * base options for axios calls\n     *\n     * @type {any}\n     * @memberof Configuration\n     */\n    baseOptions?: any;\n\n    constructor(param: ConfigurationParameters = {}) {\n        this.apiKey = param.apiKey;\n        this.username = param.username;\n        this.password = param.password;\n        this.accessToken = param.accessToken;\n        this.basePath = param.basePath;\n        this.baseOptions = param.baseOptions;\n    }\n}\n","import { Configuration } from \"./configuration\";\n\n// Initialize with defaults, will be updated by initializeApiAdapter\nexport const AXIOS_CONFIG = new Configuration({\n    basePath: \"https://api.heypharmacist.com\", // Default fallback\n    baseOptions: {\n        timeout: 60000,\n    },\n});\n","/**\n * API Adapter Configuration\n * Bridges the frontend components with the real backend APIs\n */\n\nimport { Configuration } from '../Apis/configuration';\nimport { EcommerceConfig } from '../types';\nimport { AXIOS_CONFIG } from '../Apis/sharedConfig';\n\nlet apiConfiguration: Configuration | null = null;\nlet currentConfig: EcommerceConfig | null = null;\n\n/**\n * Initialize the API configuration with store settings\n */\nexport function initializeApiAdapter(config: EcommerceConfig): Configuration {\n  currentConfig = config;\n\n  // Update the singleton AXIOS_CONFIG\n  AXIOS_CONFIG.basePath = config.apiBaseUrl;\n  AXIOS_CONFIG.apiKey = config.storeId;\n  AXIOS_CONFIG.accessToken = () => getAuthToken() || '';\n\n  apiConfiguration = AXIOS_CONFIG;\n\n  return apiConfiguration;\n}\n\n/**\n * Get the current API configuration\n */\nexport function getApiConfiguration(): Configuration {\n  if (!apiConfiguration) {\n    throw new Error('API adapter not initialized. Call initializeApiAdapter first.');\n  }\n  return apiConfiguration;\n}\n\n/**\n * Get the current ecommerce config\n */\nexport function getCurrentConfig(): EcommerceConfig {\n  if (!currentConfig) {\n    throw new Error('API adapter not initialized.');\n  }\n  return currentConfig;\n}\n\n// Token management with store-scoped keys\nfunction getTokenKey(): string {\n  const storeId = currentConfig?.storeId || 'default';\n  return `ecommerce_access_token_${storeId}`;\n}\n\nexport function setAuthToken(token: string): void {\n  if (typeof window !== 'undefined') {\n    localStorage.setItem(getTokenKey(), token);\n    // Update the configuration with new token\n    if (apiConfiguration) {\n      apiConfiguration.accessToken = () => token;\n    }\n    // Also update the singleton directly\n    AXIOS_CONFIG.accessToken = () => token;\n  }\n}\n\nexport function getAuthToken(): string | null {\n  if (typeof window !== 'undefined') {\n    return localStorage.getItem(getTokenKey());\n  }\n  return null;\n}\n\nexport function clearAuthToken(): void {\n  if (typeof window !== 'undefined') {\n    localStorage.removeItem(getTokenKey());\n    // Clear from configuration\n    if (apiConfiguration) {\n      apiConfiguration.accessToken = () => '';\n    }\n    // Also update the singleton directly\n    AXIOS_CONFIG.accessToken = () => '';\n  }\n}\n\n/**\n * Change user password\n * Custom implementation to fix the auto-generated API which incorrectly sends passwords as headers\n */\nexport async function changePassword(oldPassword: string, newPassword: string): Promise<void> {\n  if (!currentConfig) {\n    throw new Error('API adapter not initialized.');\n  }\n\n  const token = getAuthToken();\n  if (!token) {\n    throw new Error('User is not authenticated');\n  }\n\n  const url = `${currentConfig.apiBaseUrl}/auth/change-password`;\n\n  const response = await fetch(url, {\n    method: 'POST',\n    headers: {\n      'Content-Type': 'application/json',\n      'X-Store-Key': currentConfig.storeId,\n      'Authorization': `Bearer ${token}`,\n    },\n    body: JSON.stringify({\n      oldPassword,\n      newPassword,\n    }),\n  });\n\n  if (!response.ok) {\n    const errorData = await response.json().catch(() => ({}));\n    throw {\n      response: {\n        data: errorData,\n        status: response.status,\n      },\n    };\n  }\n}\n\n","/**\n * Convert hex color to RGB array\n */\nexport function hexToRgb(hex: string): [number, number, number] {\n  const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n  return result\n    ? [\n        parseInt(result[1], 16),\n        parseInt(result[2], 16),\n        parseInt(result[3], 16),\n      ]\n    : [0, 0, 0];\n}\n\n/**\n * Generate color shades from a base color\n */\nexport function generateColorShades(baseColor: string) {\n  const [r, g, b] = hexToRgb(baseColor);\n  \n  const shades = {\n    50: lighten(r, g, b, 0.95),\n    100: lighten(r, g, b, 0.9),\n    200: lighten(r, g, b, 0.75),\n    300: lighten(r, g, b, 0.6),\n    400: lighten(r, g, b, 0.3),\n    500: formatRgb(r, g, b),\n    600: darken(r, g, b, 0.1),\n    700: darken(r, g, b, 0.2),\n    800: darken(r, g, b, 0.3),\n    900: darken(r, g, b, 0.4),\n    950: darken(r, g, b, 0.5),\n  };\n  \n  return shades;\n}\n\nfunction formatRgb(r: number, g: number, b: number): string {\n  return `${r} ${g} ${b}`;\n}\n\nfunction lighten(r: number, g: number, b: number, amount: number): string {\n  const newR = Math.round(r + (255 - r) * amount);\n  const newG = Math.round(g + (255 - g) * amount);\n  const newB = Math.round(b + (255 - b) * amount);\n  return formatRgb(newR, newG, newB);\n}\n\nfunction darken(r: number, g: number, b: number, amount: number): string {\n  const newR = Math.round(r * (1 - amount));\n  const newG = Math.round(g * (1 - amount));\n  const newB = Math.round(b * (1 - amount));\n  return formatRgb(newR, newG, newB);\n}\n","'use client';\n\nimport React, { createContext, useContext, useLayoutEffect, useEffect } from 'react';\nimport { EcommerceConfig } from '@/lib/types';\nimport { generateColorShades } from '@/lib/utils/colors';\n\ninterface ThemeContextValue {\n  config: EcommerceConfig;\n}\n\nconst ThemeContext = createContext<ThemeContextValue | undefined>(undefined);\n\nexport function useTheme() {\n  const context = useContext(ThemeContext);\n  if (!context) {\n    throw new Error('useTheme must be used within ThemeProvider');\n  }\n  return context;\n}\n\ninterface ThemeProviderProps {\n  config: EcommerceConfig;\n  children: React.ReactNode;\n}\n\n// Use useLayoutEffect on client, useEffect on server (SSR safe)\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? useLayoutEffect : useEffect;\n\nexport function ThemeProvider({ config, children }: ThemeProviderProps) {\n  // Generate CSS variables string for inline style injection (namespaced with --hp-)\n  const cssVariables = React.useMemo(() => {\n    const primaryShades = generateColorShades(config.colors.primary);\n    const secondaryShades = generateColorShades(config.colors.secondary);\n    const accentShades = generateColorShades(config.colors.accent);\n\n    const vars: string[] = [];\n\n    // Base colors (namespaced)\n    vars.push(`--hp-primary: ${config.colors.primary}`);\n    vars.push(`--hp-primary-dark: ${config.colors.primaryDark}`);\n    vars.push(`--hp-secondary: ${config.colors.secondary}`);\n    vars.push(`--hp-accent: ${config.colors.accent}`);\n    vars.push(`--hp-accent-dark: ${config.colors.accentDark}`);\n    vars.push(`--hp-text-hmuted: ${config.colors.textMuted}`);\n\n    // Shaded colors (namespaced)\n    Object.entries(primaryShades).forEach(([shade, rgb]) => {\n      vars.push(`--hp-primary-${shade}: ${rgb}`);\n    });\n    Object.entries(secondaryShades).forEach(([shade, rgb]) => {\n      vars.push(`--hp-secondary-${shade}: ${rgb}`);\n    });\n    Object.entries(accentShades).forEach(([shade, rgb]) => {\n      vars.push(`--hp-accent-${shade}: ${rgb}`);\n    });\n\n    return vars.join('; ');\n  }, [config.colors]);\n\n  // Apply CSS variables to document root on client (fires before paint)\n  useIsomorphicLayoutEffect(() => {\n    const root = document.documentElement;\n    const primaryShades = generateColorShades(config.colors.primary);\n    const secondaryShades = generateColorShades(config.colors.secondary);\n    const accentShades = generateColorShades(config.colors.accent);\n\n    // Set base color variables (namespaced)\n    root.style.setProperty('--hp-primary', config.colors.primary);\n    root.style.setProperty('--hp-primary-dark', config.colors.primaryDark);\n    root.style.setProperty('--hp-secondary', config.colors.secondary);\n    root.style.setProperty('--hp-accent', config.colors.accent);\n    root.style.setProperty('--hp-accent-dark', config.colors.accentDark);\n    root.style.setProperty('--hp-text-hmuted', config.colors.textMuted);\n\n    // Set shaded color variables (namespaced)\n    Object.entries(primaryShades).forEach(([shade, rgb]) => {\n      root.style.setProperty(`--hp-primary-${shade}`, rgb);\n    });\n    Object.entries(secondaryShades).forEach(([shade, rgb]) => {\n      root.style.setProperty(`--hp-secondary-${shade}`, rgb);\n    });\n    Object.entries(accentShades).forEach(([shade, rgb]) => {\n      root.style.setProperty(`--hp-accent-${shade}`, rgb);\n    });\n  }, [config]);\n\n  return (\n    <ThemeContext.Provider value={{ config }}>\n      {/* Inject CSS variables via style tag for SSR - ensures colors are available immediately */}\n      <style dangerouslySetInnerHTML={{ __html: `:root { ${cssVariables} }` }} />\n      {children}\n    </ThemeContext.Provider>\n  );\n}\n","'use client';\n\nimport React, { createContext, useContext, useState, useEffect, useCallback } from 'react';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { getAuthToken, setAuthToken, clearAuthToken, getApiConfiguration } from '@/lib/api-adapter/config';\nimport { UpdateUserDto, UserEntity } from '@/lib/Apis/models';\nimport { UsersApi } from '@/lib/Apis/apis/users-api';\nimport { ProductsApi } from '@/lib/Apis/apis/products-api';\nimport { getDeviceId } from '@/lib/utils/deviceId';\n\ninterface AuthContextValue {\n  user: UserEntity | null;\n  isAuthenticated: boolean;\n  isLoading: boolean;\n  isAuthReady: boolean;\n  logout: () => Promise<void>;\n  updateUser: (data: UpdateUserDto) => Promise<UserEntity>;\n  refreshUser: () => Promise<void>;\n  /** Store a token (+ optional user) from OTP verify or guest checkout. Calls refreshUser if no userData provided. */\n  loginWithSession: (token: string, userData?: UserEntity) => Promise<void>;\n}\n\nconst AuthContext = createContext<AuthContextValue | undefined>(undefined);\n\nexport function useAuth() {\n  const context = useContext(AuthContext);\n  if (!context) {\n    throw new Error('useAuth must be used within AuthProvider');\n  }\n  return context;\n}\n\ninterface AuthProviderProps {\n  children: React.ReactNode;\n}\n\nexport function AuthProvider({ children }: AuthProviderProps) {\n  const queryClient = useQueryClient();\n  const [user, setUser] = useState<UserEntity | null>(null);\n  const [isLoading, setIsLoading] = useState(true);\n  const [isAuthReady, setIsAuthReady] = useState(false);\n\n  const getUserKey = () => {\n    if (typeof window === 'undefined') return 'ecommerce_user';\n    try {\n      const config = require('@/lib/api-adapter/config').getCurrentConfig();\n      return `ecommerce_user_${config?.storeId || 'default'}`;\n    } catch {\n      return 'ecommerce_user';\n    }\n  };\n\n  const refreshUser = useCallback(async () => {\n    try {\n      const token = getAuthToken();\n      if (token) {\n        const response = await new UsersApi(getApiConfiguration()).getMyProfile();\n        setUser(response.data);\n      }\n    } catch (error) {\n      console.error('Failed to refresh user:', error);\n      setUser(null);\n    } finally {\n      setIsLoading(false);\n      setIsAuthReady(true);\n    }\n  }, []);\n\n  useEffect(() => {\n    if (typeof window !== 'undefined') {\n      try {\n        const cached = localStorage.getItem(getUserKey());\n        if (cached) {\n          setUser(JSON.parse(cached));\n          setIsLoading(false);\n        }\n      } catch (_) {\n        // ignore cache parse errors\n      }\n    }\n    refreshUser();\n  }, [refreshUser]);\n\n  const loginWithSession = async (token: string, userData?: UserEntity): Promise<void> => {\n    setAuthToken(token);\n    // Order responses contain customer and payment details. Never retain them\n    // across an account transition, even though order query keys are user-scoped.\n    queryClient.removeQueries({ queryKey: ['order'] });\n    queryClient.removeQueries({ queryKey: ['orders'] });\n    queryClient.removeQueries({ queryKey: ['currentOrders'] });\n    if (userData) {\n      setUser(userData);\n      if (typeof window !== 'undefined') {\n        try {\n          const config = require('@/lib/api-adapter/config').getCurrentConfig();\n          localStorage.setItem(`ecommerce_user_${config?.storeId || 'default'}`, JSON.stringify(userData));\n        } catch {\n          localStorage.setItem('ecommerce_user', JSON.stringify(userData));\n        }\n      }\n    } else {\n      await refreshUser();\n    }\n\n    try {\n      const deviceId = getDeviceId();\n      if (deviceId) {\n        await new ProductsApi(getApiConfiguration()).mergeAnonymousInterest({ deviceId });\n      }\n    } catch (error) {\n      console.error('Failed to merge anonymous product interests:', error);\n    }\n\n    await queryClient.invalidateQueries({ queryKey: ['personalizedProducts'] });\n  };\n\n  const logout = async () => {\n    setIsLoading(true);\n    try {\n      clearAuthToken();\n      setUser(null);\n      queryClient.removeQueries({ queryKey: ['order'] });\n      queryClient.removeQueries({ queryKey: ['orders'] });\n      queryClient.removeQueries({ queryKey: ['currentOrders'] });\n      if (typeof window !== 'undefined') {\n        localStorage.removeItem(getUserKey());\n      }\n    } finally {\n      setIsLoading(false);\n    }\n  };\n\n  const updateUser = async (data: UpdateUserDto): Promise<UserEntity> => {\n    setIsLoading(true);\n    try {\n      const response = await new UsersApi(getApiConfiguration()).updateMyProfile(data);\n      setUser(response.data);\n      return response.data;\n    } catch (error) {\n      console.error('Failed to update user:', error);\n      await refreshUser();\n      throw error;\n    } finally {\n      setIsLoading(false);\n    }\n  };\n\n  const value: AuthContextValue = {\n    user,\n    isAuthenticated: !!user,\n    isLoading,\n    isAuthReady,\n    logout,\n    updateUser,\n    refreshUser,\n    loginWithSession,\n  };\n\n  return <AuthContext.Provider value={value}>{children}</AuthContext.Provider>;\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { Configuration } from \"./configuration\";\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport globalAxios, { AxiosRequestConfig, AxiosInstance } from 'axios';\n\nexport const BASE_PATH = \"/\".replace(/\\/+$/, \"\");\n\n/**\n *\n * @export\n */\nexport const COLLECTION_FORMATS = {\n    csv: \",\",\n    ssv: \" \",\n    tsv: \"\\t\",\n    pipes: \"|\",\n};\n\n/**\n *\n * @export\n * @interface RequestArgs\n */\nexport interface RequestArgs {\n  _id?: string;\n    url: string;\n    options: AxiosRequestConfig;\n}\n\n/**\n *\n * @export\n * @class BaseAPI\n */\nexport class BaseAPI {\n    protected configuration: Configuration | undefined;\n\n    constructor(configuration?: Configuration, protected basePath: string = BASE_PATH, protected axios: AxiosInstance = globalAxios) {\n        if (configuration) {\n            this.configuration = configuration;\n            this.basePath = configuration.basePath || this.basePath;\n        }\n    }\n};\n\n/**\n *\n * @export\n * @class RequiredError\n * @extends {Error}\n */\nexport class RequiredError extends Error {\n    name: \"RequiredError\" = \"RequiredError\";\n    constructor(public field: string, msg?: string) {\n        super(msg);\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\nimport { AllowUserCreditDto } from '../models';\nimport { ChangeUserEmailDto } from '../models';\nimport { CreateUserDto } from '../models';\nimport { UpdateUserDto } from '../models';\nimport { UserEntity } from '../models';\nimport { UserInsightsDto } from '../models';\nimport { UsersPaginatedResponse } from '../models';\n/**\n * UsersApi - axios parameter creator\n * @export\n */\nexport const UsersApiAxiosParamCreator = function (configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Allow user credit\n         * @param {AllowUserCreditDto} body \n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        allowUserCredit: async (body: AllowUserCreditDto, userId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling allowUserCredit.');\n            }\n            // verify required parameter 'userId' is not null or undefined\n            if (userId === null || userId === undefined) {\n                throw new RequiredError('userId','Required parameter userId was null or undefined when calling allowUserCredit.');\n            }\n            const localVarPath = `/users/allow-user-credit/{userId}`\n                .replace(`{${\"userId\"}}`, encodeURIComponent(String(userId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Change Email\n         * @param {ChangeUserEmailDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        changeUserEmail: async (body: ChangeUserEmailDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling changeUserEmail.');\n            }\n            const localVarPath = `/users/change-email`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Create a new user to be used from the dashboard\n         * @param {CreateUserDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createUser: async (body: CreateUserDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling createUser.');\n            }\n            const localVarPath = `/users`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Deletes my profile\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteMyProfile: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/users/deleteMyProfile`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Deletes a single user by ID (Admin only)\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteUser: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling deleteUser.');\n            }\n            const localVarPath = `/users/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Disable user credit\n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        disableUserCredit: async (userId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'userId' is not null or undefined\n            if (userId === null || userId === undefined) {\n                throw new RequiredError('userId','Required parameter userId was null or undefined when calling disableUserCredit.');\n            }\n            const localVarPath = `/users/disable-user-credit/{userId}`\n                .replace(`{${\"userId\"}}`, encodeURIComponent(String(userId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all users for a store\n         * @param {string} [role] \n         * @param {string} [sortingOrder] \n         * @param {string} [sortingColumn] \n         * @param {Date} [createdBefore] Filter users registered before a specific date\n         * @param {Date} [createdAfter] Filter users registered after a specific date\n         * @param {string} [search] Search by user first name, last name, email, phone number or id\n         * @param {number} [limit] \n         * @param {number} [page] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllUsers: async (role?: string, sortingOrder?: string, sortingColumn?: string, createdBefore?: Date, createdAfter?: Date, search?: string, limit?: number, page?: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/users`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (role !== undefined) {\n                localVarQueryParameter['role'] = role;\n            }\n\n            if (sortingOrder !== undefined) {\n                localVarQueryParameter['sortingOrder'] = sortingOrder;\n            }\n\n            if (sortingColumn !== undefined) {\n                localVarQueryParameter['sortingColumn'] = sortingColumn;\n            }\n\n            if (createdBefore !== undefined) {\n                localVarQueryParameter['createdBefore'] = (createdBefore as any instanceof Date) ?\n                    (createdBefore as any).toISOString() :\n                    createdBefore;\n            }\n\n            if (createdAfter !== undefined) {\n                localVarQueryParameter['createdAfter'] = (createdAfter as any instanceof Date) ?\n                    (createdAfter as any).toISOString() :\n                    createdAfter;\n            }\n\n            if (search !== undefined) {\n                localVarQueryParameter['search'] = search;\n            }\n\n            if (limit !== undefined) {\n                localVarQueryParameter['limit'] = limit;\n            }\n\n            if (page !== undefined) {\n                localVarQueryParameter['page'] = page;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get user insights\n         * @param {string} [groupId] Id of the group to get insights for, if null, get for all Users\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getInsights: async (groupId?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/users/insights`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (groupId !== undefined) {\n                localVarQueryParameter['groupId'] = groupId;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * This request uses the Token that is sent in the header to retrieve the user information ... this request is used to handle the user session in the store and the dashboard \n         * @summary Get my profile\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMyProfile: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/users/mine`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get a single user\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSingleUser: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling getSingleUser.');\n            }\n            const localVarPath = `/users/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Send OTP to user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendOTP: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/users/send-otp`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update a user\n         * @param {UpdateUserDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateMyProfile: async (body: UpdateUserDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateMyProfile.');\n            }\n            const localVarPath = `/users/updateMyProfile`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update a user\n         * @param {UpdateUserDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateUser: async (body: UpdateUserDto, id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateUser.');\n            }\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling updateUser.');\n            }\n            const localVarPath = `/users/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Verify OTP\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        verifyOTP: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/users/verify-otp`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n    }\n};\n\n/**\n * UsersApi - functional programming interface\n * @export\n */\nexport const UsersApiFp = function(configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Allow user credit\n         * @param {AllowUserCreditDto} body \n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async allowUserCredit(body: AllowUserCreditDto, userId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<UserEntity>>> {\n            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).allowUserCredit(body, userId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Change Email\n         * @param {ChangeUserEmailDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async changeUserEmail(body: ChangeUserEmailDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).changeUserEmail(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Create a new user to be used from the dashboard\n         * @param {CreateUserDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createUser(body: CreateUserDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<UserEntity>>> {\n            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).createUser(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Deletes my profile\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteMyProfile(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).deleteMyProfile(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Deletes a single user by ID (Admin only)\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteUser(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).deleteUser(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Disable user credit\n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async disableUserCredit(userId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<UserEntity>>> {\n            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).disableUserCredit(userId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all users for a store\n         * @param {string} [role] \n         * @param {string} [sortingOrder] \n         * @param {string} [sortingColumn] \n         * @param {Date} [createdBefore] Filter users registered before a specific date\n         * @param {Date} [createdAfter] Filter users registered after a specific date\n         * @param {string} [search] Search by user first name, last name, email, phone number or id\n         * @param {number} [limit] \n         * @param {number} [page] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllUsers(role?: string, sortingOrder?: string, sortingColumn?: string, createdBefore?: Date, createdAfter?: Date, search?: string, limit?: number, page?: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<UsersPaginatedResponse>>> {\n            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).getAllUsers(role, sortingOrder, sortingColumn, createdBefore, createdAfter, search, limit, page, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get user insights\n         * @param {string} [groupId] Id of the group to get insights for, if null, get for all Users\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getInsights(groupId?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<UserInsightsDto>>> {\n            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).getInsights(groupId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * This request uses the Token that is sent in the header to retrieve the user information ... this request is used to handle the user session in the store and the dashboard \n         * @summary Get my profile\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getMyProfile(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<UserEntity>>> {\n            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).getMyProfile(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get a single user\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSingleUser(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<UserEntity>>> {\n            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).getSingleUser(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Send OTP to user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendOTP(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).sendOTP(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update a user\n         * @param {UpdateUserDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateMyProfile(body: UpdateUserDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<UserEntity>>> {\n            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).updateMyProfile(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update a user\n         * @param {UpdateUserDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateUser(body: UpdateUserDto, id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<UserEntity>>> {\n            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).updateUser(body, id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Verify OTP\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async verifyOTP(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).verifyOTP(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n    }\n};\n\n/**\n * UsersApi - factory interface\n * @export\n */\nexport const UsersApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n    return {\n        /**\n         * \n         * @summary Allow user credit\n         * @param {AllowUserCreditDto} body \n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async allowUserCredit(body: AllowUserCreditDto, userId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<UserEntity>> {\n            return UsersApiFp(configuration).allowUserCredit(body, userId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Change Email\n         * @param {ChangeUserEmailDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async changeUserEmail(body: ChangeUserEmailDto, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return UsersApiFp(configuration).changeUserEmail(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Create a new user to be used from the dashboard\n         * @param {CreateUserDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createUser(body: CreateUserDto, options?: AxiosRequestConfig): Promise<AxiosResponse<UserEntity>> {\n            return UsersApiFp(configuration).createUser(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Deletes my profile\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteMyProfile(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return UsersApiFp(configuration).deleteMyProfile(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Deletes a single user by ID (Admin only)\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteUser(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return UsersApiFp(configuration).deleteUser(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Disable user credit\n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async disableUserCredit(userId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<UserEntity>> {\n            return UsersApiFp(configuration).disableUserCredit(userId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all users for a store\n         * @param {string} [role] \n         * @param {string} [sortingOrder] \n         * @param {string} [sortingColumn] \n         * @param {Date} [createdBefore] Filter users registered before a specific date\n         * @param {Date} [createdAfter] Filter users registered after a specific date\n         * @param {string} [search] Search by user first name, last name, email, phone number or id\n         * @param {number} [limit] \n         * @param {number} [page] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllUsers(role?: string, sortingOrder?: string, sortingColumn?: string, createdBefore?: Date, createdAfter?: Date, search?: string, limit?: number, page?: number, options?: AxiosRequestConfig): Promise<AxiosResponse<UsersPaginatedResponse>> {\n            return UsersApiFp(configuration).getAllUsers(role, sortingOrder, sortingColumn, createdBefore, createdAfter, search, limit, page, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get user insights\n         * @param {string} [groupId] Id of the group to get insights for, if null, get for all Users\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getInsights(groupId?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<UserInsightsDto>> {\n            return UsersApiFp(configuration).getInsights(groupId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * This request uses the Token that is sent in the header to retrieve the user information ... this request is used to handle the user session in the store and the dashboard \n         * @summary Get my profile\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getMyProfile(options?: AxiosRequestConfig): Promise<AxiosResponse<UserEntity>> {\n            return UsersApiFp(configuration).getMyProfile(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get a single user\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSingleUser(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<UserEntity>> {\n            return UsersApiFp(configuration).getSingleUser(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Send OTP to user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendOTP(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return UsersApiFp(configuration).sendOTP(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update a user\n         * @param {UpdateUserDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateMyProfile(body: UpdateUserDto, options?: AxiosRequestConfig): Promise<AxiosResponse<UserEntity>> {\n            return UsersApiFp(configuration).updateMyProfile(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update a user\n         * @param {UpdateUserDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateUser(body: UpdateUserDto, id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<UserEntity>> {\n            return UsersApiFp(configuration).updateUser(body, id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Verify OTP\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async verifyOTP(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return UsersApiFp(configuration).verifyOTP(options).then((request) => request(axios, basePath));\n        },\n    };\n};\n\n/**\n * UsersApi - object-oriented interface\n * @export\n * @class UsersApi\n * @extends {BaseAPI}\n */\nexport class UsersApi extends BaseAPI {\n    /**\n     * \n     * @summary Allow user credit\n     * @param {AllowUserCreditDto} body \n     * @param {string} userId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof UsersApi\n     */\n    public async allowUserCredit(body: AllowUserCreditDto, userId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<UserEntity>> {\n        return UsersApiFp(this.configuration).allowUserCredit(body, userId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Change Email\n     * @param {ChangeUserEmailDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof UsersApi\n     */\n    public async changeUserEmail(body: ChangeUserEmailDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return UsersApiFp(this.configuration).changeUserEmail(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Create a new user to be used from the dashboard\n     * @param {CreateUserDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof UsersApi\n     */\n    public async createUser(body: CreateUserDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<UserEntity>> {\n        return UsersApiFp(this.configuration).createUser(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Deletes my profile\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof UsersApi\n     */\n    public async deleteMyProfile(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return UsersApiFp(this.configuration).deleteMyProfile(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Deletes a single user by ID (Admin only)\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof UsersApi\n     */\n    public async deleteUser(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return UsersApiFp(this.configuration).deleteUser(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Disable user credit\n     * @param {string} userId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof UsersApi\n     */\n    public async disableUserCredit(userId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<UserEntity>> {\n        return UsersApiFp(this.configuration).disableUserCredit(userId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all users for a store\n     * @param {string} [role] \n     * @param {string} [sortingOrder] \n     * @param {string} [sortingColumn] \n     * @param {Date} [createdBefore] Filter users registered before a specific date\n     * @param {Date} [createdAfter] Filter users registered after a specific date\n     * @param {string} [search] Search by user first name, last name, email, phone number or id\n     * @param {number} [limit] \n     * @param {number} [page] \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof UsersApi\n     */\n    public async getAllUsers(role?: string, sortingOrder?: string, sortingColumn?: string, createdBefore?: Date, createdAfter?: Date, search?: string, limit?: number, page?: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<UsersPaginatedResponse>> {\n        return UsersApiFp(this.configuration).getAllUsers(role, sortingOrder, sortingColumn, createdBefore, createdAfter, search, limit, page, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get user insights\n     * @param {string} [groupId] Id of the group to get insights for, if null, get for all Users\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof UsersApi\n     */\n    public async getInsights(groupId?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<UserInsightsDto>> {\n        return UsersApiFp(this.configuration).getInsights(groupId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * This request uses the Token that is sent in the header to retrieve the user information ... this request is used to handle the user session in the store and the dashboard \n     * @summary Get my profile\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof UsersApi\n     */\n    public async getMyProfile(options?: AxiosRequestConfig) : Promise<AxiosResponse<UserEntity>> {\n        return UsersApiFp(this.configuration).getMyProfile(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get a single user\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof UsersApi\n     */\n    public async getSingleUser(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<UserEntity>> {\n        return UsersApiFp(this.configuration).getSingleUser(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Send OTP to user\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof UsersApi\n     */\n    public async sendOTP(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return UsersApiFp(this.configuration).sendOTP(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update a user\n     * @param {UpdateUserDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof UsersApi\n     */\n    public async updateMyProfile(body: UpdateUserDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<UserEntity>> {\n        return UsersApiFp(this.configuration).updateMyProfile(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update a user\n     * @param {UpdateUserDto} body \n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof UsersApi\n     */\n    public async updateUser(body: UpdateUserDto, id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<UserEntity>> {\n        return UsersApiFp(this.configuration).updateUser(body, id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Verify OTP\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof UsersApi\n     */\n    public async verifyOTP(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return UsersApiFp(this.configuration).verifyOTP(options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\nimport { CreateProductDto } from '../models';\nimport { CreateVariantDto } from '../models';\nimport { InlineResponse200 } from '../models';\nimport { InlineResponse2001 } from '../models';\nimport { MergeInterestDto } from '../models';\nimport { PaginatedProductsDto } from '../models';\nimport { PersonalizedProductsQueryDto } from '../models';\nimport { PersonalizedProductsResponseDto } from '../models';\nimport { Product } from '../models';\nimport { ProductDescriptionImproveDto } from '../models';\nimport { ProductDescriptionImproveResponseDto } from '../models';\nimport { ProductImportConfirmDto } from '../models';\nimport { ProductImportConfirmResponseDto } from '../models';\nimport { ProductImportPreviewResponseDto } from '../models';\nimport { ProductLightDto } from '../models';\nimport { ProductsAidraftBody } from '../models';\nimport { ProductsInsightsDto } from '../models';\nimport { ReorderProductsDto } from '../models';\nimport { ReorderProductsSuccessResponseDto } from '../models';\nimport { UpdateProductDto } from '../models';\nimport { UpdateVariantDto } from '../models';\nimport { VariantIdInventoryBody } from '../models';\nimport { VariantIdStockalertBody } from '../models';\nimport { VariantIdStockalertBody1 } from '../models';\n/**\n * ProductsApi - axios parameter creator\n * @export\n */\nexport const ProductsApiAxiosParamCreator = function (configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Add a new variant to a product\n         * @param {CreateVariantDto} body \n         * @param {string} productId Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        addVariant: async (body: CreateVariantDto, productId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling addVariant.');\n            }\n            // verify required parameter 'productId' is not null or undefined\n            if (productId === null || productId === undefined) {\n                throw new RequiredError('productId','Required parameter productId was null or undefined when calling addVariant.');\n            }\n            const localVarPath = `/products/{productId}/variants`\n                .replace(`{${\"productId\"}}`, encodeURIComponent(String(productId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Create products from reviewed import drafts\n         * @param {ProductImportConfirmDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        confirmProductImport: async (body: ProductImportConfirmDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling confirmProductImport.');\n            }\n            const localVarPath = `/products/import/confirm`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Create a new product with variants\n         * @param {CreateProductDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createProduct: async (body: CreateProductDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling createProduct.');\n            }\n            const localVarPath = `/products`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Delete a product and all its variants\n         * @param {string} id Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteProduct: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling deleteProduct.');\n            }\n            const localVarPath = `/products/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Delete a variant from a product\n         * @param {string} productId Product ID\n         * @param {string} variantId Variant ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteVariant: async (productId: string, variantId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'productId' is not null or undefined\n            if (productId === null || productId === undefined) {\n                throw new RequiredError('productId','Required parameter productId was null or undefined when calling deleteVariant.');\n            }\n            // verify required parameter 'variantId' is not null or undefined\n            if (variantId === null || variantId === undefined) {\n                throw new RequiredError('variantId','Required parameter variantId was null or undefined when calling deleteVariant.');\n            }\n            const localVarPath = `/products/{productId}/variants/{variantId}`\n                .replace(`{${\"productId\"}}`, encodeURIComponent(String(productId)))\n                .replace(`{${\"variantId\"}}`, encodeURIComponent(String(variantId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Generate a product draft using AI\n         * @param {ProductsAidraftBody} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        generateAiDraft: async (body: ProductsAidraftBody, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling generateAiDraft.');\n            }\n            const localVarPath = `/products/ai-draft`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all available filters (brands, price range)\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllFilters: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/products/filters`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all products with filtering and pagination\n         * @param {number} [maxPrice] \n         * @param {number} [minPrice] \n         * @param {string} [brandFilter] Comma-separated brand names\n         * @param {string} [availability] \n         * @param {string} [sort] \n         * @param {string} [subCategoryId] \n         * @param {string} [categoryId] \n         * @param {boolean} [isActive] \n         * @param {number} [limit] \n         * @param {number} [page] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllProducts: async (maxPrice?: number, minPrice?: number, brandFilter?: string, availability?: string, sort?: string, subCategoryId?: string, categoryId?: string, isActive?: boolean, limit?: number, page?: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/products/all`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (maxPrice !== undefined) {\n                localVarQueryParameter['maxPrice'] = maxPrice;\n            }\n\n            if (minPrice !== undefined) {\n                localVarQueryParameter['minPrice'] = minPrice;\n            }\n\n            if (brandFilter !== undefined) {\n                localVarQueryParameter['brandFilter'] = brandFilter;\n            }\n\n            if (availability !== undefined) {\n                localVarQueryParameter['availability'] = availability;\n            }\n\n            if (sort !== undefined) {\n                localVarQueryParameter['sort'] = sort;\n            }\n\n            if (subCategoryId !== undefined) {\n                localVarQueryParameter['subCategoryId'] = subCategoryId;\n            }\n\n            if (categoryId !== undefined) {\n                localVarQueryParameter['categoryId'] = categoryId;\n            }\n\n            if (isActive !== undefined) {\n                localVarQueryParameter['isActive'] = isActive;\n            }\n\n            if (limit !== undefined) {\n                localVarQueryParameter['limit'] = limit;\n            }\n\n            if (page !== undefined) {\n                localVarQueryParameter['page'] = page;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all products with basic info (lightweight)\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllProductsLight: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/products/light`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get the featured product for home screen\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getFeaturedProduct: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/products/featured`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get personalized products based on user interests\n         * @param {PersonalizedProductsQueryDto} body \n         * @param {string} [xDeviceId] Device ID for anonymous users\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getPersonalizedProducts: async (body: PersonalizedProductsQueryDto, xDeviceId?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling getPersonalizedProducts.');\n            }\n            const localVarPath = `/products/for-you`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (xDeviceId !== undefined && xDeviceId !== null) {\n                localVarHeaderParameter['x-device-id'] = String(xDeviceId);\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get product insights for the store\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getProductsInsights: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/products/insights`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get related products\n         * @param {string} id Product ID\n         * @param {number} [limit] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRelatedProducts: async (id: string, limit?: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling getRelatedProducts.');\n            }\n            const localVarPath = `/products/{id}/related`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (limit !== undefined) {\n                localVarQueryParameter['limit'] = limit;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get a single product with all details\n         * @param {string} id Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSingleProduct: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling getSingleProduct.');\n            }\n            const localVarPath = `/products/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get top selling products\n         * @param {number} [limit] \n         * @param {number} [page] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getTopSellingProducts: async (limit?: number, page?: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/products/top-selling`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (limit !== undefined) {\n                localVarQueryParameter['limit'] = limit;\n            }\n\n            if (page !== undefined) {\n                localVarQueryParameter['page'] = page;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Improve a product description using AI\n         * @param {ProductDescriptionImproveDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        improveProductDescription: async (body: ProductDescriptionImproveDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling improveProductDescription.');\n            }\n            const localVarPath = `/products/ai-description`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Merge anonymous interest profile to logged-in user (call on login)\n         * @param {MergeInterestDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        mergeAnonymousInterest: async (body: MergeInterestDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling mergeAnonymousInterest.');\n            }\n            const localVarPath = `/products/merge-interest`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Extracts product drafts and media candidates. Nothing is saved until /products/import/confirm is called.\n         * @summary Preview AI-assisted product import from a sheet, PDF, or image\n         * @param {Blob} file \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        previewProductImportForm: async (file: Blob, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'file' is not null or undefined\n            if (file === null || file === undefined) {\n                throw new RequiredError('file','Required parameter file was null or undefined when calling previewProductImportForm.');\n            }\n            const localVarPath = `/products/import/preview`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n            const localVarFormParams = new FormData();\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n\n            if (file !== undefined) { \n                localVarFormParams.append('file', file as any);\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'multipart/form-data';\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            localVarRequestOptions.data = localVarFormParams;\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Process image using PhotoRoom (remove background) \n         * @param {Blob} image \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        processImageForm: async (image: Blob, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'image' is not null or undefined\n            if (image === null || image === undefined) {\n                throw new RequiredError('image','Required parameter image was null or undefined when calling processImageForm.');\n            }\n            const localVarPath = `/products/process-image`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n            const localVarFormParams = new FormData();\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n\n            if (image !== undefined) { \n                localVarFormParams.append('image', image as any);\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'multipart/form-data';\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            localVarRequestOptions.data = localVarFormParams;\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Generates AI embeddings for all products. Run this once after enabling smart search, or to refresh all embeddings.\n         * @summary Reindex all product embeddings for smart search\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        reindexEmbeddings: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/products/reindex-embeddings`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Reorder products within a category or subcategory\n         * @param {ReorderProductsDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        reorderProducts: async (body: ReorderProductsDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling reorderProducts.');\n            }\n            const localVarPath = `/products/reorder`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Search products using natural language. Handles typos, synonyms, and returns related products ranked by relevance.\n         * @summary Smart search using AI-powered semantic similarity\n         * @param {string} searchTerm Search query (e.g., \\&quot;headache medicine\\&quot;, \\&quot;iphn 12\\&quot;)\n         * @param {number} [limit] Maximum results (default: 20)\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        smartSearch: async (searchTerm: string, limit?: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'searchTerm' is not null or undefined\n            if (searchTerm === null || searchTerm === undefined) {\n                throw new RequiredError('searchTerm','Required parameter searchTerm was null or undefined when calling smartSearch.');\n            }\n            const localVarPath = `/products/search`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (searchTerm !== undefined) {\n                localVarQueryParameter['searchTerm'] = searchTerm;\n            }\n\n            if (limit !== undefined) {\n                localVarQueryParameter['limit'] = limit;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Authenticated users are subscribed using their account email. Guest users must provide an email in the request body.\n         * @summary Subscribe to back-in-stock notifications for a variant\n         * @param {VariantIdStockalertBody} body \n         * @param {string} productId Product ID\n         * @param {string} variantId Variant ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        subscribeToStockAlert: async (body: VariantIdStockalertBody, productId: string, variantId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling subscribeToStockAlert.');\n            }\n            // verify required parameter 'productId' is not null or undefined\n            if (productId === null || productId === undefined) {\n                throw new RequiredError('productId','Required parameter productId was null or undefined when calling subscribeToStockAlert.');\n            }\n            // verify required parameter 'variantId' is not null or undefined\n            if (variantId === null || variantId === undefined) {\n                throw new RequiredError('variantId','Required parameter variantId was null or undefined when calling subscribeToStockAlert.');\n            }\n            const localVarPath = `/products/{productId}/variants/{variantId}/stock-alert`\n                .replace(`{${\"productId\"}}`, encodeURIComponent(String(productId)))\n                .replace(`{${\"variantId\"}}`, encodeURIComponent(String(variantId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Track a product view for personalized recommendations\n         * @param {string} id Product ID being viewed\n         * @param {string} [xDeviceId] Device ID for anonymous tracking\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        trackProductView: async (id: string, xDeviceId?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling trackProductView.');\n            }\n            const localVarPath = `/products/{id}/view`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (xDeviceId !== undefined && xDeviceId !== null) {\n                localVarHeaderParameter['x-device-id'] = String(xDeviceId);\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Unsubscribe from back-in-stock notifications for a variant\n         * @param {VariantIdStockalertBody1} body \n         * @param {string} variantId Variant ID\n         * @param {any} productId Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        unsubscribeFromStockAlert: async (body: VariantIdStockalertBody1, variantId: string, productId: any, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling unsubscribeFromStockAlert.');\n            }\n            // verify required parameter 'variantId' is not null or undefined\n            if (variantId === null || variantId === undefined) {\n                throw new RequiredError('variantId','Required parameter variantId was null or undefined when calling unsubscribeFromStockAlert.');\n            }\n            // verify required parameter 'productId' is not null or undefined\n            if (productId === null || productId === undefined) {\n                throw new RequiredError('productId','Required parameter productId was null or undefined when calling unsubscribeFromStockAlert.');\n            }\n            const localVarPath = `/products/{productId}/variants/{variantId}/stock-alert`\n                .replace(`{${\"variantId\"}}`, encodeURIComponent(String(variantId)))\n                .replace(`{${\"productId\"}}`, encodeURIComponent(String(productId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update variant inventory (add or subtract)\n         * @param {VariantIdInventoryBody} body \n         * @param {string} productId Product ID\n         * @param {string} variantId Variant ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateInventory: async (body: VariantIdInventoryBody, productId: string, variantId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateInventory.');\n            }\n            // verify required parameter 'productId' is not null or undefined\n            if (productId === null || productId === undefined) {\n                throw new RequiredError('productId','Required parameter productId was null or undefined when calling updateInventory.');\n            }\n            // verify required parameter 'variantId' is not null or undefined\n            if (variantId === null || variantId === undefined) {\n                throw new RequiredError('variantId','Required parameter variantId was null or undefined when calling updateInventory.');\n            }\n            const localVarPath = `/products/{productId}/variants/{variantId}/inventory`\n                .replace(`{${\"productId\"}}`, encodeURIComponent(String(productId)))\n                .replace(`{${\"variantId\"}}`, encodeURIComponent(String(variantId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update a product (not variants)\n         * @param {UpdateProductDto} body \n         * @param {string} id Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateProduct: async (body: UpdateProductDto, id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateProduct.');\n            }\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling updateProduct.');\n            }\n            const localVarPath = `/products/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update a variant\n         * @param {UpdateVariantDto} body \n         * @param {string} productId Product ID\n         * @param {string} variantId Variant ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateVariant: async (body: UpdateVariantDto, productId: string, variantId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateVariant.');\n            }\n            // verify required parameter 'productId' is not null or undefined\n            if (productId === null || productId === undefined) {\n                throw new RequiredError('productId','Required parameter productId was null or undefined when calling updateVariant.');\n            }\n            // verify required parameter 'variantId' is not null or undefined\n            if (variantId === null || variantId === undefined) {\n                throw new RequiredError('variantId','Required parameter variantId was null or undefined when calling updateVariant.');\n            }\n            const localVarPath = `/products/{productId}/variants/{variantId}`\n                .replace(`{${\"productId\"}}`, encodeURIComponent(String(productId)))\n                .replace(`{${\"variantId\"}}`, encodeURIComponent(String(variantId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n    }\n};\n\n/**\n * ProductsApi - functional programming interface\n * @export\n */\nexport const ProductsApiFp = function(configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Add a new variant to a product\n         * @param {CreateVariantDto} body \n         * @param {string} productId Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async addVariant(body: CreateVariantDto, productId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Product>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).addVariant(body, productId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Create products from reviewed import drafts\n         * @param {ProductImportConfirmDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async confirmProductImport(body: ProductImportConfirmDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ProductImportConfirmResponseDto>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).confirmProductImport(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Create a new product with variants\n         * @param {CreateProductDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createProduct(body: CreateProductDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Product>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).createProduct(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Delete a product and all its variants\n         * @param {string} id Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteProduct(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).deleteProduct(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Delete a variant from a product\n         * @param {string} productId Product ID\n         * @param {string} variantId Variant ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteVariant(productId: string, variantId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Product>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).deleteVariant(productId, variantId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Generate a product draft using AI\n         * @param {ProductsAidraftBody} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async generateAiDraft(body: ProductsAidraftBody, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<CreateProductDto>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).generateAiDraft(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all available filters (brands, price range)\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllFilters(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).getAllFilters(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all products with filtering and pagination\n         * @param {number} [maxPrice] \n         * @param {number} [minPrice] \n         * @param {string} [brandFilter] Comma-separated brand names\n         * @param {string} [availability] \n         * @param {string} [sort] \n         * @param {string} [subCategoryId] \n         * @param {string} [categoryId] \n         * @param {boolean} [isActive] \n         * @param {number} [limit] \n         * @param {number} [page] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllProducts(maxPrice?: number, minPrice?: number, brandFilter?: string, availability?: string, sort?: string, subCategoryId?: string, categoryId?: string, isActive?: boolean, limit?: number, page?: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<PaginatedProductsDto>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).getAllProducts(maxPrice, minPrice, brandFilter, availability, sort, subCategoryId, categoryId, isActive, limit, page, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all products with basic info (lightweight)\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllProductsLight(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<ProductLightDto>>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).getAllProductsLight(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get the featured product for home screen\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getFeaturedProduct(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Product>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).getFeaturedProduct(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get personalized products based on user interests\n         * @param {PersonalizedProductsQueryDto} body \n         * @param {string} [xDeviceId] Device ID for anonymous users\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getPersonalizedProducts(body: PersonalizedProductsQueryDto, xDeviceId?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<PersonalizedProductsResponseDto>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).getPersonalizedProducts(body, xDeviceId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get product insights for the store\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getProductsInsights(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ProductsInsightsDto>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).getProductsInsights(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get related products\n         * @param {string} id Product ID\n         * @param {number} [limit] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getRelatedProducts(id: string, limit?: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<Product>>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).getRelatedProducts(id, limit, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get a single product with all details\n         * @param {string} id Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSingleProduct(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Product>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).getSingleProduct(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get top selling products\n         * @param {number} [limit] \n         * @param {number} [page] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getTopSellingProducts(limit?: number, page?: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<PaginatedProductsDto>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).getTopSellingProducts(limit, page, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Improve a product description using AI\n         * @param {ProductDescriptionImproveDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async improveProductDescription(body: ProductDescriptionImproveDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ProductDescriptionImproveResponseDto>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).improveProductDescription(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Merge anonymous interest profile to logged-in user (call on login)\n         * @param {MergeInterestDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async mergeAnonymousInterest(body: MergeInterestDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).mergeAnonymousInterest(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * Extracts product drafts and media candidates. Nothing is saved until /products/import/confirm is called.\n         * @summary Preview AI-assisted product import from a sheet, PDF, or image\n         * @param {Blob} file \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async previewProductImportForm(file: Blob, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ProductImportPreviewResponseDto>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).previewProductImportForm(file, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Process image using PhotoRoom (remove background) \n         * @param {Blob} image \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async processImageForm(image: Blob, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<string>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).processImageForm(image, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * Generates AI embeddings for all products. Run this once after enabling smart search, or to refresh all embeddings.\n         * @summary Reindex all product embeddings for smart search\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async reindexEmbeddings(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<InlineResponse2001>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).reindexEmbeddings(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Reorder products within a category or subcategory\n         * @param {ReorderProductsDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async reorderProducts(body: ReorderProductsDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ReorderProductsSuccessResponseDto>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).reorderProducts(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * Search products using natural language. Handles typos, synonyms, and returns related products ranked by relevance.\n         * @summary Smart search using AI-powered semantic similarity\n         * @param {string} searchTerm Search query (e.g., \\&quot;headache medicine\\&quot;, \\&quot;iphn 12\\&quot;)\n         * @param {number} [limit] Maximum results (default: 20)\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async smartSearch(searchTerm: string, limit?: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<InlineResponse200>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).smartSearch(searchTerm, limit, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * Authenticated users are subscribed using their account email. Guest users must provide an email in the request body.\n         * @summary Subscribe to back-in-stock notifications for a variant\n         * @param {VariantIdStockalertBody} body \n         * @param {string} productId Product ID\n         * @param {string} variantId Variant ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async subscribeToStockAlert(body: VariantIdStockalertBody, productId: string, variantId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).subscribeToStockAlert(body, productId, variantId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Track a product view for personalized recommendations\n         * @param {string} id Product ID being viewed\n         * @param {string} [xDeviceId] Device ID for anonymous tracking\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async trackProductView(id: string, xDeviceId?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).trackProductView(id, xDeviceId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Unsubscribe from back-in-stock notifications for a variant\n         * @param {VariantIdStockalertBody1} body \n         * @param {string} variantId Variant ID\n         * @param {any} productId Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async unsubscribeFromStockAlert(body: VariantIdStockalertBody1, variantId: string, productId: any, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).unsubscribeFromStockAlert(body, variantId, productId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update variant inventory (add or subtract)\n         * @param {VariantIdInventoryBody} body \n         * @param {string} productId Product ID\n         * @param {string} variantId Variant ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateInventory(body: VariantIdInventoryBody, productId: string, variantId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).updateInventory(body, productId, variantId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update a product (not variants)\n         * @param {UpdateProductDto} body \n         * @param {string} id Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateProduct(body: UpdateProductDto, id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Product>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).updateProduct(body, id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update a variant\n         * @param {UpdateVariantDto} body \n         * @param {string} productId Product ID\n         * @param {string} variantId Variant ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateVariant(body: UpdateVariantDto, productId: string, variantId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Product>>> {\n            const localVarAxiosArgs = await ProductsApiAxiosParamCreator(configuration).updateVariant(body, productId, variantId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n    }\n};\n\n/**\n * ProductsApi - factory interface\n * @export\n */\nexport const ProductsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n    return {\n        /**\n         * \n         * @summary Add a new variant to a product\n         * @param {CreateVariantDto} body \n         * @param {string} productId Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async addVariant(body: CreateVariantDto, productId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Product>> {\n            return ProductsApiFp(configuration).addVariant(body, productId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Create products from reviewed import drafts\n         * @param {ProductImportConfirmDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async confirmProductImport(body: ProductImportConfirmDto, options?: AxiosRequestConfig): Promise<AxiosResponse<ProductImportConfirmResponseDto>> {\n            return ProductsApiFp(configuration).confirmProductImport(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Create a new product with variants\n         * @param {CreateProductDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createProduct(body: CreateProductDto, options?: AxiosRequestConfig): Promise<AxiosResponse<Product>> {\n            return ProductsApiFp(configuration).createProduct(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Delete a product and all its variants\n         * @param {string} id Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteProduct(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ProductsApiFp(configuration).deleteProduct(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Delete a variant from a product\n         * @param {string} productId Product ID\n         * @param {string} variantId Variant ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteVariant(productId: string, variantId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Product>> {\n            return ProductsApiFp(configuration).deleteVariant(productId, variantId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Generate a product draft using AI\n         * @param {ProductsAidraftBody} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async generateAiDraft(body: ProductsAidraftBody, options?: AxiosRequestConfig): Promise<AxiosResponse<CreateProductDto>> {\n            return ProductsApiFp(configuration).generateAiDraft(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all available filters (brands, price range)\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllFilters(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ProductsApiFp(configuration).getAllFilters(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all products with filtering and pagination\n         * @param {number} [maxPrice] \n         * @param {number} [minPrice] \n         * @param {string} [brandFilter] Comma-separated brand names\n         * @param {string} [availability] \n         * @param {string} [sort] \n         * @param {string} [subCategoryId] \n         * @param {string} [categoryId] \n         * @param {boolean} [isActive] \n         * @param {number} [limit] \n         * @param {number} [page] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllProducts(maxPrice?: number, minPrice?: number, brandFilter?: string, availability?: string, sort?: string, subCategoryId?: string, categoryId?: string, isActive?: boolean, limit?: number, page?: number, options?: AxiosRequestConfig): Promise<AxiosResponse<PaginatedProductsDto>> {\n            return ProductsApiFp(configuration).getAllProducts(maxPrice, minPrice, brandFilter, availability, sort, subCategoryId, categoryId, isActive, limit, page, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all products with basic info (lightweight)\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllProductsLight(options?: AxiosRequestConfig): Promise<AxiosResponse<Array<ProductLightDto>>> {\n            return ProductsApiFp(configuration).getAllProductsLight(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get the featured product for home screen\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getFeaturedProduct(options?: AxiosRequestConfig): Promise<AxiosResponse<Product>> {\n            return ProductsApiFp(configuration).getFeaturedProduct(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get personalized products based on user interests\n         * @param {PersonalizedProductsQueryDto} body \n         * @param {string} [xDeviceId] Device ID for anonymous users\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getPersonalizedProducts(body: PersonalizedProductsQueryDto, xDeviceId?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<PersonalizedProductsResponseDto>> {\n            return ProductsApiFp(configuration).getPersonalizedProducts(body, xDeviceId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get product insights for the store\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getProductsInsights(options?: AxiosRequestConfig): Promise<AxiosResponse<ProductsInsightsDto>> {\n            return ProductsApiFp(configuration).getProductsInsights(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get related products\n         * @param {string} id Product ID\n         * @param {number} [limit] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getRelatedProducts(id: string, limit?: number, options?: AxiosRequestConfig): Promise<AxiosResponse<Array<Product>>> {\n            return ProductsApiFp(configuration).getRelatedProducts(id, limit, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get a single product with all details\n         * @param {string} id Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSingleProduct(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Product>> {\n            return ProductsApiFp(configuration).getSingleProduct(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get top selling products\n         * @param {number} [limit] \n         * @param {number} [page] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getTopSellingProducts(limit?: number, page?: number, options?: AxiosRequestConfig): Promise<AxiosResponse<PaginatedProductsDto>> {\n            return ProductsApiFp(configuration).getTopSellingProducts(limit, page, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Improve a product description using AI\n         * @param {ProductDescriptionImproveDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async improveProductDescription(body: ProductDescriptionImproveDto, options?: AxiosRequestConfig): Promise<AxiosResponse<ProductDescriptionImproveResponseDto>> {\n            return ProductsApiFp(configuration).improveProductDescription(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Merge anonymous interest profile to logged-in user (call on login)\n         * @param {MergeInterestDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async mergeAnonymousInterest(body: MergeInterestDto, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ProductsApiFp(configuration).mergeAnonymousInterest(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Extracts product drafts and media candidates. Nothing is saved until /products/import/confirm is called.\n         * @summary Preview AI-assisted product import from a sheet, PDF, or image\n         * @param {Blob} file \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async previewProductImportForm(file: Blob, options?: AxiosRequestConfig): Promise<AxiosResponse<ProductImportPreviewResponseDto>> {\n            return ProductsApiFp(configuration).previewProductImportForm(file, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Process image using PhotoRoom (remove background) \n         * @param {Blob} image \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async processImageForm(image: Blob, options?: AxiosRequestConfig): Promise<AxiosResponse<string>> {\n            return ProductsApiFp(configuration).processImageForm(image, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Generates AI embeddings for all products. Run this once after enabling smart search, or to refresh all embeddings.\n         * @summary Reindex all product embeddings for smart search\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async reindexEmbeddings(options?: AxiosRequestConfig): Promise<AxiosResponse<InlineResponse2001>> {\n            return ProductsApiFp(configuration).reindexEmbeddings(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Reorder products within a category or subcategory\n         * @param {ReorderProductsDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async reorderProducts(body: ReorderProductsDto, options?: AxiosRequestConfig): Promise<AxiosResponse<ReorderProductsSuccessResponseDto>> {\n            return ProductsApiFp(configuration).reorderProducts(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Search products using natural language. Handles typos, synonyms, and returns related products ranked by relevance.\n         * @summary Smart search using AI-powered semantic similarity\n         * @param {string} searchTerm Search query (e.g., \\&quot;headache medicine\\&quot;, \\&quot;iphn 12\\&quot;)\n         * @param {number} [limit] Maximum results (default: 20)\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async smartSearch(searchTerm: string, limit?: number, options?: AxiosRequestConfig): Promise<AxiosResponse<InlineResponse200>> {\n            return ProductsApiFp(configuration).smartSearch(searchTerm, limit, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Authenticated users are subscribed using their account email. Guest users must provide an email in the request body.\n         * @summary Subscribe to back-in-stock notifications for a variant\n         * @param {VariantIdStockalertBody} body \n         * @param {string} productId Product ID\n         * @param {string} variantId Variant ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async subscribeToStockAlert(body: VariantIdStockalertBody, productId: string, variantId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ProductsApiFp(configuration).subscribeToStockAlert(body, productId, variantId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Track a product view for personalized recommendations\n         * @param {string} id Product ID being viewed\n         * @param {string} [xDeviceId] Device ID for anonymous tracking\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async trackProductView(id: string, xDeviceId?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ProductsApiFp(configuration).trackProductView(id, xDeviceId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Unsubscribe from back-in-stock notifications for a variant\n         * @param {VariantIdStockalertBody1} body \n         * @param {string} variantId Variant ID\n         * @param {any} productId Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async unsubscribeFromStockAlert(body: VariantIdStockalertBody1, variantId: string, productId: any, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ProductsApiFp(configuration).unsubscribeFromStockAlert(body, variantId, productId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update variant inventory (add or subtract)\n         * @param {VariantIdInventoryBody} body \n         * @param {string} productId Product ID\n         * @param {string} variantId Variant ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateInventory(body: VariantIdInventoryBody, productId: string, variantId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ProductsApiFp(configuration).updateInventory(body, productId, variantId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update a product (not variants)\n         * @param {UpdateProductDto} body \n         * @param {string} id Product ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateProduct(body: UpdateProductDto, id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Product>> {\n            return ProductsApiFp(configuration).updateProduct(body, id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update a variant\n         * @param {UpdateVariantDto} body \n         * @param {string} productId Product ID\n         * @param {string} variantId Variant ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateVariant(body: UpdateVariantDto, productId: string, variantId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Product>> {\n            return ProductsApiFp(configuration).updateVariant(body, productId, variantId, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n\n/**\n * ProductsApi - object-oriented interface\n * @export\n * @class ProductsApi\n * @extends {BaseAPI}\n */\nexport class ProductsApi extends BaseAPI {\n    /**\n     * \n     * @summary Add a new variant to a product\n     * @param {CreateVariantDto} body \n     * @param {string} productId Product ID\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async addVariant(body: CreateVariantDto, productId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Product>> {\n        return ProductsApiFp(this.configuration).addVariant(body, productId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Create products from reviewed import drafts\n     * @param {ProductImportConfirmDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async confirmProductImport(body: ProductImportConfirmDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<ProductImportConfirmResponseDto>> {\n        return ProductsApiFp(this.configuration).confirmProductImport(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Create a new product with variants\n     * @param {CreateProductDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async createProduct(body: CreateProductDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<Product>> {\n        return ProductsApiFp(this.configuration).createProduct(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Delete a product and all its variants\n     * @param {string} id Product ID\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async deleteProduct(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ProductsApiFp(this.configuration).deleteProduct(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Delete a variant from a product\n     * @param {string} productId Product ID\n     * @param {string} variantId Variant ID\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async deleteVariant(productId: string, variantId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Product>> {\n        return ProductsApiFp(this.configuration).deleteVariant(productId, variantId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Generate a product draft using AI\n     * @param {ProductsAidraftBody} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async generateAiDraft(body: ProductsAidraftBody, options?: AxiosRequestConfig) : Promise<AxiosResponse<CreateProductDto>> {\n        return ProductsApiFp(this.configuration).generateAiDraft(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all available filters (brands, price range)\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async getAllFilters(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ProductsApiFp(this.configuration).getAllFilters(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all products with filtering and pagination\n     * @param {number} [maxPrice] \n     * @param {number} [minPrice] \n     * @param {string} [brandFilter] Comma-separated brand names\n     * @param {string} [availability] \n     * @param {string} [sort] \n     * @param {string} [subCategoryId] \n     * @param {string} [categoryId] \n     * @param {boolean} [isActive] \n     * @param {number} [limit] \n     * @param {number} [page] \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async getAllProducts(maxPrice?: number, minPrice?: number, brandFilter?: string, availability?: string, sort?: string, subCategoryId?: string, categoryId?: string, isActive?: boolean, limit?: number, page?: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<PaginatedProductsDto>> {\n        return ProductsApiFp(this.configuration).getAllProducts(maxPrice, minPrice, brandFilter, availability, sort, subCategoryId, categoryId, isActive, limit, page, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all products with basic info (lightweight)\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async getAllProductsLight(options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<ProductLightDto>>> {\n        return ProductsApiFp(this.configuration).getAllProductsLight(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get the featured product for home screen\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async getFeaturedProduct(options?: AxiosRequestConfig) : Promise<AxiosResponse<Product>> {\n        return ProductsApiFp(this.configuration).getFeaturedProduct(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get personalized products based on user interests\n     * @param {PersonalizedProductsQueryDto} body \n     * @param {string} [xDeviceId] Device ID for anonymous users\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async getPersonalizedProducts(body: PersonalizedProductsQueryDto, xDeviceId?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<PersonalizedProductsResponseDto>> {\n        return ProductsApiFp(this.configuration).getPersonalizedProducts(body, xDeviceId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get product insights for the store\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async getProductsInsights(options?: AxiosRequestConfig) : Promise<AxiosResponse<ProductsInsightsDto>> {\n        return ProductsApiFp(this.configuration).getProductsInsights(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get related products\n     * @param {string} id Product ID\n     * @param {number} [limit] \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async getRelatedProducts(id: string, limit?: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<Product>>> {\n        return ProductsApiFp(this.configuration).getRelatedProducts(id, limit, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get a single product with all details\n     * @param {string} id Product ID\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async getSingleProduct(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Product>> {\n        return ProductsApiFp(this.configuration).getSingleProduct(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get top selling products\n     * @param {number} [limit] \n     * @param {number} [page] \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async getTopSellingProducts(limit?: number, page?: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<PaginatedProductsDto>> {\n        return ProductsApiFp(this.configuration).getTopSellingProducts(limit, page, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Improve a product description using AI\n     * @param {ProductDescriptionImproveDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async improveProductDescription(body: ProductDescriptionImproveDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<ProductDescriptionImproveResponseDto>> {\n        return ProductsApiFp(this.configuration).improveProductDescription(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Merge anonymous interest profile to logged-in user (call on login)\n     * @param {MergeInterestDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async mergeAnonymousInterest(body: MergeInterestDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ProductsApiFp(this.configuration).mergeAnonymousInterest(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Extracts product drafts and media candidates. Nothing is saved until /products/import/confirm is called.\n     * @summary Preview AI-assisted product import from a sheet, PDF, or image\n     * @param {Blob} file \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async previewProductImportForm(file: Blob, options?: AxiosRequestConfig) : Promise<AxiosResponse<ProductImportPreviewResponseDto>> {\n        return ProductsApiFp(this.configuration).previewProductImportForm(file, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Process image using PhotoRoom (remove background) \n     * @param {Blob} image \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async processImageForm(image: Blob, options?: AxiosRequestConfig) : Promise<AxiosResponse<string>> {\n        return ProductsApiFp(this.configuration).processImageForm(image, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Generates AI embeddings for all products. Run this once after enabling smart search, or to refresh all embeddings.\n     * @summary Reindex all product embeddings for smart search\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async reindexEmbeddings(options?: AxiosRequestConfig) : Promise<AxiosResponse<InlineResponse2001>> {\n        return ProductsApiFp(this.configuration).reindexEmbeddings(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Reorder products within a category or subcategory\n     * @param {ReorderProductsDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async reorderProducts(body: ReorderProductsDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<ReorderProductsSuccessResponseDto>> {\n        return ProductsApiFp(this.configuration).reorderProducts(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Search products using natural language. Handles typos, synonyms, and returns related products ranked by relevance.\n     * @summary Smart search using AI-powered semantic similarity\n     * @param {string} searchTerm Search query (e.g., \\&quot;headache medicine\\&quot;, \\&quot;iphn 12\\&quot;)\n     * @param {number} [limit] Maximum results (default: 20)\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async smartSearch(searchTerm: string, limit?: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<InlineResponse200>> {\n        return ProductsApiFp(this.configuration).smartSearch(searchTerm, limit, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Authenticated users are subscribed using their account email. Guest users must provide an email in the request body.\n     * @summary Subscribe to back-in-stock notifications for a variant\n     * @param {VariantIdStockalertBody} body \n     * @param {string} productId Product ID\n     * @param {string} variantId Variant ID\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async subscribeToStockAlert(body: VariantIdStockalertBody, productId: string, variantId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ProductsApiFp(this.configuration).subscribeToStockAlert(body, productId, variantId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Track a product view for personalized recommendations\n     * @param {string} id Product ID being viewed\n     * @param {string} [xDeviceId] Device ID for anonymous tracking\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async trackProductView(id: string, xDeviceId?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ProductsApiFp(this.configuration).trackProductView(id, xDeviceId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Unsubscribe from back-in-stock notifications for a variant\n     * @param {VariantIdStockalertBody1} body \n     * @param {string} variantId Variant ID\n     * @param {any} productId Product ID\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async unsubscribeFromStockAlert(body: VariantIdStockalertBody1, variantId: string, productId: any, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ProductsApiFp(this.configuration).unsubscribeFromStockAlert(body, variantId, productId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update variant inventory (add or subtract)\n     * @param {VariantIdInventoryBody} body \n     * @param {string} productId Product ID\n     * @param {string} variantId Variant ID\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async updateInventory(body: VariantIdInventoryBody, productId: string, variantId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ProductsApiFp(this.configuration).updateInventory(body, productId, variantId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update a product (not variants)\n     * @param {UpdateProductDto} body \n     * @param {string} id Product ID\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async updateProduct(body: UpdateProductDto, id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Product>> {\n        return ProductsApiFp(this.configuration).updateProduct(body, id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update a variant\n     * @param {UpdateVariantDto} body \n     * @param {string} productId Product ID\n     * @param {string} variantId Variant ID\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ProductsApi\n     */\n    public async updateVariant(body: UpdateVariantDto, productId: string, variantId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Product>> {\n        return ProductsApiFp(this.configuration).updateVariant(body, productId, variantId, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/**\n * Device ID utility for anonymous user tracking\n * Generates and persists a UUID for personalized recommendations\n */\n\nconst DEVICE_ID_KEY = 'x-device-id';\n\n/**\n * Get or generate a device ID for anonymous user tracking.\n * The device ID is persisted in localStorage and used to track\n * browsing history for personalized product recommendations.\n * \n * @returns The device ID string, or empty string if running on server\n */\nexport function getDeviceId(): string {\n    if (typeof window === 'undefined') {\n        return '';\n    }\n\n    let deviceId = localStorage.getItem(DEVICE_ID_KEY);\n\n    if (!deviceId) {\n        deviceId = crypto.randomUUID();\n        localStorage.setItem(DEVICE_ID_KEY, deviceId);\n    }\n\n    return deviceId;\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\nimport { Address } from '../models';\nimport { CreateAddressDto } from '../models';\nimport { UpdateAddressDto } from '../models';\n/**\n * AddressesApi - axios parameter creator\n * @export\n */\nexport const AddressesApiAxiosParamCreator = function (configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Create address for user\n         * @param {CreateAddressDto} body \n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        adminCreateAddressForUser: async (body: CreateAddressDto, userId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling adminCreateAddressForUser.');\n            }\n            // verify required parameter 'userId' is not null or undefined\n            if (userId === null || userId === undefined) {\n                throw new RequiredError('userId','Required parameter userId was null or undefined when calling adminCreateAddressForUser.');\n            }\n            const localVarPath = `/addresses/create-by-admin/{userId}`\n                .replace(`{${\"userId\"}}`, encodeURIComponent(String(userId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Delete address\n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        adminDeleteUserAddress: async (addressId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'addressId' is not null or undefined\n            if (addressId === null || addressId === undefined) {\n                throw new RequiredError('addressId','Required parameter addressId was null or undefined when calling adminDeleteUserAddress.');\n            }\n            const localVarPath = `/addresses/delete-by-admin/{addressId}`\n                .replace(`{${\"addressId\"}}`, encodeURIComponent(String(addressId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all addresses for user\n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        adminGetSingleUserAddresses: async (userId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'userId' is not null or undefined\n            if (userId === null || userId === undefined) {\n                throw new RequiredError('userId','Required parameter userId was null or undefined when calling adminGetSingleUserAddresses.');\n            }\n            const localVarPath = `/addresses/getSingleUserAddresses/{userId}`\n                .replace(`{${\"userId\"}}`, encodeURIComponent(String(userId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update address\n         * @param {UpdateAddressDto} body \n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        adminUpdateUserAddress: async (body: UpdateAddressDto, addressId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling adminUpdateUserAddress.');\n            }\n            // verify required parameter 'addressId' is not null or undefined\n            if (addressId === null || addressId === undefined) {\n                throw new RequiredError('addressId','Required parameter addressId was null or undefined when calling adminUpdateUserAddress.');\n            }\n            const localVarPath = `/addresses/update-by-admin/{addressId}`\n                .replace(`{${\"addressId\"}}`, encodeURIComponent(String(addressId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Create address for user\n         * @param {CreateAddressDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createAddressForUser: async (body: CreateAddressDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling createAddressForUser.');\n            }\n            const localVarPath = `/addresses`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Delete address\n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteUserAddress: async (addressId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'addressId' is not null or undefined\n            if (addressId === null || addressId === undefined) {\n                throw new RequiredError('addressId','Required parameter addressId was null or undefined when calling deleteUserAddress.');\n            }\n            const localVarPath = `/addresses/{addressId}`\n                .replace(`{${\"addressId\"}}`, encodeURIComponent(String(addressId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all addresses for store\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllStoreAddresses: async (storeId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'storeId' is not null or undefined\n            if (storeId === null || storeId === undefined) {\n                throw new RequiredError('storeId','Required parameter storeId was null or undefined when calling getAllStoreAddresses.');\n            }\n            const localVarPath = `/addresses/stores/{storeId}`\n                .replace(`{${\"storeId\"}}`, encodeURIComponent(String(storeId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all addresses for user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllUserAddresses: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/addresses`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all addresses for user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMyAddresses: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/addresses/mine`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get default address for user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getMyDefaultAddress: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/addresses/defaultAddress`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get single address\n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSingleAddress: async (addressId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'addressId' is not null or undefined\n            if (addressId === null || addressId === undefined) {\n                throw new RequiredError('addressId','Required parameter addressId was null or undefined when calling getSingleAddress.');\n            }\n            const localVarPath = `/addresses/single/{addressId}`\n                .replace(`{${\"addressId\"}}`, encodeURIComponent(String(addressId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Set new default shipping address\n         * @param {string} userId \n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        setDefaultShippingAddress: async (userId: string, addressId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'userId' is not null or undefined\n            if (userId === null || userId === undefined) {\n                throw new RequiredError('userId','Required parameter userId was null or undefined when calling setDefaultShippingAddress.');\n            }\n            // verify required parameter 'addressId' is not null or undefined\n            if (addressId === null || addressId === undefined) {\n                throw new RequiredError('addressId','Required parameter addressId was null or undefined when calling setDefaultShippingAddress.');\n            }\n            const localVarPath = `/addresses/user/{userId}/set-default-shipping/{addressId}`\n                .replace(`{${\"userId\"}}`, encodeURIComponent(String(userId)))\n                .replace(`{${\"addressId\"}}`, encodeURIComponent(String(addressId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update default address for user\n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateDefaultAddress: async (addressId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'addressId' is not null or undefined\n            if (addressId === null || addressId === undefined) {\n                throw new RequiredError('addressId','Required parameter addressId was null or undefined when calling updateDefaultAddress.');\n            }\n            const localVarPath = `/addresses/updateDefault/{addressId}`\n                .replace(`{${\"addressId\"}}`, encodeURIComponent(String(addressId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update address\n         * @param {UpdateAddressDto} body \n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateUserAddress: async (body: UpdateAddressDto, addressId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateUserAddress.');\n            }\n            // verify required parameter 'addressId' is not null or undefined\n            if (addressId === null || addressId === undefined) {\n                throw new RequiredError('addressId','Required parameter addressId was null or undefined when calling updateUserAddress.');\n            }\n            const localVarPath = `/addresses/{addressId}`\n                .replace(`{${\"addressId\"}}`, encodeURIComponent(String(addressId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n    }\n};\n\n/**\n * AddressesApi - functional programming interface\n * @export\n */\nexport const AddressesApiFp = function(configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Create address for user\n         * @param {CreateAddressDto} body \n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async adminCreateAddressForUser(body: CreateAddressDto, userId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Address>>> {\n            const localVarAxiosArgs = await AddressesApiAxiosParamCreator(configuration).adminCreateAddressForUser(body, userId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Delete address\n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async adminDeleteUserAddress(addressId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await AddressesApiAxiosParamCreator(configuration).adminDeleteUserAddress(addressId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all addresses for user\n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async adminGetSingleUserAddresses(userId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<Address>>>> {\n            const localVarAxiosArgs = await AddressesApiAxiosParamCreator(configuration).adminGetSingleUserAddresses(userId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update address\n         * @param {UpdateAddressDto} body \n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async adminUpdateUserAddress(body: UpdateAddressDto, addressId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Address>>> {\n            const localVarAxiosArgs = await AddressesApiAxiosParamCreator(configuration).adminUpdateUserAddress(body, addressId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Create address for user\n         * @param {CreateAddressDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createAddressForUser(body: CreateAddressDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Address>>> {\n            const localVarAxiosArgs = await AddressesApiAxiosParamCreator(configuration).createAddressForUser(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Delete address\n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteUserAddress(addressId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await AddressesApiAxiosParamCreator(configuration).deleteUserAddress(addressId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all addresses for store\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllStoreAddresses(storeId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<Address>>>> {\n            const localVarAxiosArgs = await AddressesApiAxiosParamCreator(configuration).getAllStoreAddresses(storeId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all addresses for user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllUserAddresses(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<Address>>>> {\n            const localVarAxiosArgs = await AddressesApiAxiosParamCreator(configuration).getAllUserAddresses(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all addresses for user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getMyAddresses(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<Address>>>> {\n            const localVarAxiosArgs = await AddressesApiAxiosParamCreator(configuration).getMyAddresses(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get default address for user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getMyDefaultAddress(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Address>>> {\n            const localVarAxiosArgs = await AddressesApiAxiosParamCreator(configuration).getMyDefaultAddress(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get single address\n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSingleAddress(addressId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Address>>> {\n            const localVarAxiosArgs = await AddressesApiAxiosParamCreator(configuration).getSingleAddress(addressId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Set new default shipping address\n         * @param {string} userId \n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async setDefaultShippingAddress(userId: string, addressId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await AddressesApiAxiosParamCreator(configuration).setDefaultShippingAddress(userId, addressId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update default address for user\n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateDefaultAddress(addressId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Address>>> {\n            const localVarAxiosArgs = await AddressesApiAxiosParamCreator(configuration).updateDefaultAddress(addressId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update address\n         * @param {UpdateAddressDto} body \n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateUserAddress(body: UpdateAddressDto, addressId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Address>>> {\n            const localVarAxiosArgs = await AddressesApiAxiosParamCreator(configuration).updateUserAddress(body, addressId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n    }\n};\n\n/**\n * AddressesApi - factory interface\n * @export\n */\nexport const AddressesApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n    return {\n        /**\n         * \n         * @summary Create address for user\n         * @param {CreateAddressDto} body \n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async adminCreateAddressForUser(body: CreateAddressDto, userId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Address>> {\n            return AddressesApiFp(configuration).adminCreateAddressForUser(body, userId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Delete address\n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async adminDeleteUserAddress(addressId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return AddressesApiFp(configuration).adminDeleteUserAddress(addressId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all addresses for user\n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async adminGetSingleUserAddresses(userId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Array<Address>>> {\n            return AddressesApiFp(configuration).adminGetSingleUserAddresses(userId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update address\n         * @param {UpdateAddressDto} body \n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async adminUpdateUserAddress(body: UpdateAddressDto, addressId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Address>> {\n            return AddressesApiFp(configuration).adminUpdateUserAddress(body, addressId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Create address for user\n         * @param {CreateAddressDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createAddressForUser(body: CreateAddressDto, options?: AxiosRequestConfig): Promise<AxiosResponse<Address>> {\n            return AddressesApiFp(configuration).createAddressForUser(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Delete address\n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteUserAddress(addressId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return AddressesApiFp(configuration).deleteUserAddress(addressId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all addresses for store\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllStoreAddresses(storeId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Array<Address>>> {\n            return AddressesApiFp(configuration).getAllStoreAddresses(storeId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all addresses for user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllUserAddresses(options?: AxiosRequestConfig): Promise<AxiosResponse<Array<Address>>> {\n            return AddressesApiFp(configuration).getAllUserAddresses(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all addresses for user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getMyAddresses(options?: AxiosRequestConfig): Promise<AxiosResponse<Array<Address>>> {\n            return AddressesApiFp(configuration).getMyAddresses(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get default address for user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getMyDefaultAddress(options?: AxiosRequestConfig): Promise<AxiosResponse<Address>> {\n            return AddressesApiFp(configuration).getMyDefaultAddress(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get single address\n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSingleAddress(addressId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Address>> {\n            return AddressesApiFp(configuration).getSingleAddress(addressId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Set new default shipping address\n         * @param {string} userId \n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async setDefaultShippingAddress(userId: string, addressId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return AddressesApiFp(configuration).setDefaultShippingAddress(userId, addressId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update default address for user\n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateDefaultAddress(addressId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Address>> {\n            return AddressesApiFp(configuration).updateDefaultAddress(addressId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update address\n         * @param {UpdateAddressDto} body \n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateUserAddress(body: UpdateAddressDto, addressId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Address>> {\n            return AddressesApiFp(configuration).updateUserAddress(body, addressId, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n\n/**\n * AddressesApi - object-oriented interface\n * @export\n * @class AddressesApi\n * @extends {BaseAPI}\n */\nexport class AddressesApi extends BaseAPI {\n    /**\n     * \n     * @summary Create address for user\n     * @param {CreateAddressDto} body \n     * @param {string} userId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AddressesApi\n     */\n    public async adminCreateAddressForUser(body: CreateAddressDto, userId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Address>> {\n        return AddressesApiFp(this.configuration).adminCreateAddressForUser(body, userId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Delete address\n     * @param {string} addressId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AddressesApi\n     */\n    public async adminDeleteUserAddress(addressId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return AddressesApiFp(this.configuration).adminDeleteUserAddress(addressId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all addresses for user\n     * @param {string} userId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AddressesApi\n     */\n    public async adminGetSingleUserAddresses(userId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<Address>>> {\n        return AddressesApiFp(this.configuration).adminGetSingleUserAddresses(userId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update address\n     * @param {UpdateAddressDto} body \n     * @param {string} addressId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AddressesApi\n     */\n    public async adminUpdateUserAddress(body: UpdateAddressDto, addressId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Address>> {\n        return AddressesApiFp(this.configuration).adminUpdateUserAddress(body, addressId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Create address for user\n     * @param {CreateAddressDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AddressesApi\n     */\n    public async createAddressForUser(body: CreateAddressDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<Address>> {\n        return AddressesApiFp(this.configuration).createAddressForUser(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Delete address\n     * @param {string} addressId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AddressesApi\n     */\n    public async deleteUserAddress(addressId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return AddressesApiFp(this.configuration).deleteUserAddress(addressId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all addresses for store\n     * @param {string} storeId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AddressesApi\n     */\n    public async getAllStoreAddresses(storeId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<Address>>> {\n        return AddressesApiFp(this.configuration).getAllStoreAddresses(storeId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all addresses for user\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AddressesApi\n     */\n    public async getAllUserAddresses(options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<Address>>> {\n        return AddressesApiFp(this.configuration).getAllUserAddresses(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all addresses for user\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AddressesApi\n     */\n    public async getMyAddresses(options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<Address>>> {\n        return AddressesApiFp(this.configuration).getMyAddresses(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get default address for user\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AddressesApi\n     */\n    public async getMyDefaultAddress(options?: AxiosRequestConfig) : Promise<AxiosResponse<Address>> {\n        return AddressesApiFp(this.configuration).getMyDefaultAddress(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get single address\n     * @param {string} addressId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AddressesApi\n     */\n    public async getSingleAddress(addressId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Address>> {\n        return AddressesApiFp(this.configuration).getSingleAddress(addressId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Set new default shipping address\n     * @param {string} userId \n     * @param {string} addressId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AddressesApi\n     */\n    public async setDefaultShippingAddress(userId: string, addressId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return AddressesApiFp(this.configuration).setDefaultShippingAddress(userId, addressId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update default address for user\n     * @param {string} addressId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AddressesApi\n     */\n    public async updateDefaultAddress(addressId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Address>> {\n        return AddressesApiFp(this.configuration).updateDefaultAddress(addressId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update address\n     * @param {UpdateAddressDto} body \n     * @param {string} addressId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AddressesApi\n     */\n    public async updateUserAddress(body: UpdateAddressDto, addressId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Address>> {\n        return AddressesApiFp(this.configuration).updateUserAddress(body, addressId, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\nimport { DashSendOtpDto } from '../models';\nimport { DashVerifyOtpDto } from '../models';\nimport { ForgetPassword } from '../models';\nimport { RegisterOrLoginWithGmail } from '../models';\nimport { RegisterOtpDto } from '../models';\nimport { SendOtpDto } from '../models';\nimport { TAdminSessionData } from '../models';\nimport { TUserSessionData } from '../models';\nimport { UserEntity } from '../models';\nimport { VerifyOtpDto } from '../models';\n/**\n * AuthApi - axios parameter creator\n * @export\n */\nexport const AuthApiAxiosParamCreator = function (configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Change Email for user\n         * @param {ForgetPassword} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        changeEmail: async (body: ForgetPassword, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling changeEmail.');\n            }\n            const localVarPath = `/auth/change-email`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Send OTP login code to dashboard admin email — no store key required\n         * @param {DashSendOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendDashOtp: async (body: DashSendOtpDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling sendDashOtp.');\n            }\n            const localVarPath = `/auth/dash/otp/send`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Send OTP login code — user must already have an account\n         * @param {SendOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendOtp: async (body: SendOtpDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling sendOtp.');\n            }\n            const localVarPath = `/auth/otp/send`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Register a new account and send OTP — fails if email already exists\n         * @param {RegisterOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendRegisterOtp: async (body: RegisterOtpDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling sendRegisterOtp.');\n            }\n            const localVarPath = `/auth/register/otp/send`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Signin with gmail\n         * @param {RegisterOrLoginWithGmail} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        signinWithGmail: async (body: RegisterOrLoginWithGmail, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling signinWithGmail.');\n            }\n            const localVarPath = `/auth/signin/gmail`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Register new user with gmail\n         * @param {RegisterOrLoginWithGmail} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        signupWithGmail: async (body: RegisterOrLoginWithGmail, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling signupWithGmail.');\n            }\n            const localVarPath = `/auth/signup/gmail`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Verify dashboard admin OTP and return JWT + store data\n         * @param {DashVerifyOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        verifyDashOtp: async (body: DashVerifyOtpDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling verifyDashOtp.');\n            }\n            const localVarPath = `/auth/dash/otp/verify`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Verify OTP code and return JWT\n         * @param {VerifyOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        verifyOtp: async (body: VerifyOtpDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling verifyOtp.');\n            }\n            const localVarPath = `/auth/otp/verify`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n    }\n};\n\n/**\n * AuthApi - functional programming interface\n * @export\n */\nexport const AuthApiFp = function(configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Change Email for user\n         * @param {ForgetPassword} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async changeEmail(body: ForgetPassword, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<UserEntity>>> {\n            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).changeEmail(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Send OTP login code to dashboard admin email — no store key required\n         * @param {DashSendOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendDashOtp(body: DashSendOtpDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).sendDashOtp(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Send OTP login code — user must already have an account\n         * @param {SendOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendOtp(body: SendOtpDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).sendOtp(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Register a new account and send OTP — fails if email already exists\n         * @param {RegisterOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendRegisterOtp(body: RegisterOtpDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).sendRegisterOtp(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Signin with gmail\n         * @param {RegisterOrLoginWithGmail} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async signinWithGmail(body: RegisterOrLoginWithGmail, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<TUserSessionData>>> {\n            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).signinWithGmail(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Register new user with gmail\n         * @param {RegisterOrLoginWithGmail} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async signupWithGmail(body: RegisterOrLoginWithGmail, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<TUserSessionData>>> {\n            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).signupWithGmail(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Verify dashboard admin OTP and return JWT + store data\n         * @param {DashVerifyOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async verifyDashOtp(body: DashVerifyOtpDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<TAdminSessionData>>> {\n            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).verifyDashOtp(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Verify OTP code and return JWT\n         * @param {VerifyOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async verifyOtp(body: VerifyOtpDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<TUserSessionData>>> {\n            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).verifyOtp(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n    }\n};\n\n/**\n * AuthApi - factory interface\n * @export\n */\nexport const AuthApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n    return {\n        /**\n         * \n         * @summary Change Email for user\n         * @param {ForgetPassword} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async changeEmail(body: ForgetPassword, options?: AxiosRequestConfig): Promise<AxiosResponse<UserEntity>> {\n            return AuthApiFp(configuration).changeEmail(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Send OTP login code to dashboard admin email — no store key required\n         * @param {DashSendOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendDashOtp(body: DashSendOtpDto, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return AuthApiFp(configuration).sendDashOtp(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Send OTP login code — user must already have an account\n         * @param {SendOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendOtp(body: SendOtpDto, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return AuthApiFp(configuration).sendOtp(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Register a new account and send OTP — fails if email already exists\n         * @param {RegisterOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendRegisterOtp(body: RegisterOtpDto, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return AuthApiFp(configuration).sendRegisterOtp(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Signin with gmail\n         * @param {RegisterOrLoginWithGmail} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async signinWithGmail(body: RegisterOrLoginWithGmail, options?: AxiosRequestConfig): Promise<AxiosResponse<TUserSessionData>> {\n            return AuthApiFp(configuration).signinWithGmail(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Register new user with gmail\n         * @param {RegisterOrLoginWithGmail} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async signupWithGmail(body: RegisterOrLoginWithGmail, options?: AxiosRequestConfig): Promise<AxiosResponse<TUserSessionData>> {\n            return AuthApiFp(configuration).signupWithGmail(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Verify dashboard admin OTP and return JWT + store data\n         * @param {DashVerifyOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async verifyDashOtp(body: DashVerifyOtpDto, options?: AxiosRequestConfig): Promise<AxiosResponse<TAdminSessionData>> {\n            return AuthApiFp(configuration).verifyDashOtp(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Verify OTP code and return JWT\n         * @param {VerifyOtpDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async verifyOtp(body: VerifyOtpDto, options?: AxiosRequestConfig): Promise<AxiosResponse<TUserSessionData>> {\n            return AuthApiFp(configuration).verifyOtp(body, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n\n/**\n * AuthApi - object-oriented interface\n * @export\n * @class AuthApi\n * @extends {BaseAPI}\n */\nexport class AuthApi extends BaseAPI {\n    /**\n     * \n     * @summary Change Email for user\n     * @param {ForgetPassword} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AuthApi\n     */\n    public async changeEmail(body: ForgetPassword, options?: AxiosRequestConfig) : Promise<AxiosResponse<UserEntity>> {\n        return AuthApiFp(this.configuration).changeEmail(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Send OTP login code to dashboard admin email — no store key required\n     * @param {DashSendOtpDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AuthApi\n     */\n    public async sendDashOtp(body: DashSendOtpDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return AuthApiFp(this.configuration).sendDashOtp(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Send OTP login code — user must already have an account\n     * @param {SendOtpDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AuthApi\n     */\n    public async sendOtp(body: SendOtpDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return AuthApiFp(this.configuration).sendOtp(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Register a new account and send OTP — fails if email already exists\n     * @param {RegisterOtpDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AuthApi\n     */\n    public async sendRegisterOtp(body: RegisterOtpDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return AuthApiFp(this.configuration).sendRegisterOtp(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Signin with gmail\n     * @param {RegisterOrLoginWithGmail} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AuthApi\n     */\n    public async signinWithGmail(body: RegisterOrLoginWithGmail, options?: AxiosRequestConfig) : Promise<AxiosResponse<TUserSessionData>> {\n        return AuthApiFp(this.configuration).signinWithGmail(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Register new user with gmail\n     * @param {RegisterOrLoginWithGmail} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AuthApi\n     */\n    public async signupWithGmail(body: RegisterOrLoginWithGmail, options?: AxiosRequestConfig) : Promise<AxiosResponse<TUserSessionData>> {\n        return AuthApiFp(this.configuration).signupWithGmail(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Verify dashboard admin OTP and return JWT + store data\n     * @param {DashVerifyOtpDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AuthApi\n     */\n    public async verifyDashOtp(body: DashVerifyOtpDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<TAdminSessionData>> {\n        return AuthApiFp(this.configuration).verifyDashOtp(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Verify OTP code and return JWT\n     * @param {VerifyOtpDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof AuthApi\n     */\n    public async verifyOtp(body: VerifyOtpDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<TUserSessionData>> {\n        return AuthApiFp(this.configuration).verifyOtp(body, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\nimport { CartBodyDTO } from '../models';\nimport { CartResponseDto } from '../models';\nimport { ManualOrderDTO } from '../models';\n/**\n * CartApi - axios parameter creator\n * @export\n */\nexport const CartApiAxiosParamCreator = function (configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Clears the cart\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        clearCart: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/cart/clearCart`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get the user cart\n         * @param {string} [rateId] \n         * @param {string} [deliveryMethod] \n         * @param {string} [shippingRateId] Shippo rate object ID — required when deliveryMethod is shippo\n         * @param {string} [discountId] Discount id to be applied to the cart\n         * @param {string} [userAddressId] User address ID — required when deliveryMethod is custom\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getUserCart: async (rateId?: string, deliveryMethod?: string, shippingRateId?: string, discountId?: string, userAddressId?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/cart/user/mine`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (rateId !== undefined) {\n                localVarQueryParameter['rateId'] = rateId;\n            }\n\n            if (deliveryMethod !== undefined) {\n                localVarQueryParameter['deliveryMethod'] = deliveryMethod;\n            }\n\n            if (shippingRateId !== undefined) {\n                localVarQueryParameter['shippingRateId'] = shippingRateId;\n            }\n\n            if (discountId !== undefined) {\n                localVarQueryParameter['discountId'] = discountId;\n            }\n\n            if (userAddressId !== undefined) {\n                localVarQueryParameter['userAddressId'] = userAddressId;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update the user cart\n         * @param {CartBodyDTO} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        handleUserCart: async (body: CartBodyDTO, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling handleUserCart.');\n            }\n            const localVarPath = `/cart/user/update`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * this endpoint is used to calculate the cart for a visitor or for a manual order in the dashboard, it calculates the cart prices, discounts, taxes, shipping prices, and totals.\n         * @summary to be used for visitor cart calculation and also dashboard manual order cart calculation\n         * @param {ManualOrderDTO} body \n         * @param {string} [userId] \n         * @param {string} [rateId] \n         * @param {string} [addressId] The desired address id for the store location for the pickup\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        handleVisitorCart: async (body: ManualOrderDTO, userId?: string, rateId?: string, addressId?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling handleVisitorCart.');\n            }\n            const localVarPath = `/cart/onspot/calculate`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (userId !== undefined) {\n                localVarQueryParameter['userId'] = userId;\n            }\n\n            if (rateId !== undefined) {\n                localVarQueryParameter['rateId'] = rateId;\n            }\n\n            if (addressId !== undefined) {\n                localVarQueryParameter['addressId'] = addressId;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n    }\n};\n\n/**\n * CartApi - functional programming interface\n * @export\n */\nexport const CartApiFp = function(configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Clears the cart\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async clearCart(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await CartApiAxiosParamCreator(configuration).clearCart(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get the user cart\n         * @param {string} [rateId] \n         * @param {string} [deliveryMethod] \n         * @param {string} [shippingRateId] Shippo rate object ID — required when deliveryMethod is shippo\n         * @param {string} [discountId] Discount id to be applied to the cart\n         * @param {string} [userAddressId] User address ID — required when deliveryMethod is custom\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getUserCart(rateId?: string, deliveryMethod?: string, shippingRateId?: string, discountId?: string, userAddressId?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<CartResponseDto>>> {\n            const localVarAxiosArgs = await CartApiAxiosParamCreator(configuration).getUserCart(rateId, deliveryMethod, shippingRateId, discountId, userAddressId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update the user cart\n         * @param {CartBodyDTO} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async handleUserCart(body: CartBodyDTO, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<CartResponseDto>>> {\n            const localVarAxiosArgs = await CartApiAxiosParamCreator(configuration).handleUserCart(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * this endpoint is used to calculate the cart for a visitor or for a manual order in the dashboard, it calculates the cart prices, discounts, taxes, shipping prices, and totals.\n         * @summary to be used for visitor cart calculation and also dashboard manual order cart calculation\n         * @param {ManualOrderDTO} body \n         * @param {string} [userId] \n         * @param {string} [rateId] \n         * @param {string} [addressId] The desired address id for the store location for the pickup\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async handleVisitorCart(body: ManualOrderDTO, userId?: string, rateId?: string, addressId?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<CartResponseDto>>> {\n            const localVarAxiosArgs = await CartApiAxiosParamCreator(configuration).handleVisitorCart(body, userId, rateId, addressId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n    }\n};\n\n/**\n * CartApi - factory interface\n * @export\n */\nexport const CartApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n    return {\n        /**\n         * \n         * @summary Clears the cart\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async clearCart(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return CartApiFp(configuration).clearCart(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get the user cart\n         * @param {string} [rateId] \n         * @param {string} [deliveryMethod] \n         * @param {string} [shippingRateId] Shippo rate object ID — required when deliveryMethod is shippo\n         * @param {string} [discountId] Discount id to be applied to the cart\n         * @param {string} [userAddressId] User address ID — required when deliveryMethod is custom\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getUserCart(rateId?: string, deliveryMethod?: string, shippingRateId?: string, discountId?: string, userAddressId?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<CartResponseDto>> {\n            return CartApiFp(configuration).getUserCart(rateId, deliveryMethod, shippingRateId, discountId, userAddressId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update the user cart\n         * @param {CartBodyDTO} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async handleUserCart(body: CartBodyDTO, options?: AxiosRequestConfig): Promise<AxiosResponse<CartResponseDto>> {\n            return CartApiFp(configuration).handleUserCart(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * this endpoint is used to calculate the cart for a visitor or for a manual order in the dashboard, it calculates the cart prices, discounts, taxes, shipping prices, and totals.\n         * @summary to be used for visitor cart calculation and also dashboard manual order cart calculation\n         * @param {ManualOrderDTO} body \n         * @param {string} [userId] \n         * @param {string} [rateId] \n         * @param {string} [addressId] The desired address id for the store location for the pickup\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async handleVisitorCart(body: ManualOrderDTO, userId?: string, rateId?: string, addressId?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<CartResponseDto>> {\n            return CartApiFp(configuration).handleVisitorCart(body, userId, rateId, addressId, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n\n/**\n * CartApi - object-oriented interface\n * @export\n * @class CartApi\n * @extends {BaseAPI}\n */\nexport class CartApi extends BaseAPI {\n    /**\n     * \n     * @summary Clears the cart\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CartApi\n     */\n    public async clearCart(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return CartApiFp(this.configuration).clearCart(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get the user cart\n     * @param {string} [rateId] \n     * @param {string} [deliveryMethod] \n     * @param {string} [shippingRateId] Shippo rate object ID — required when deliveryMethod is shippo\n     * @param {string} [discountId] Discount id to be applied to the cart\n     * @param {string} [userAddressId] User address ID — required when deliveryMethod is custom\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CartApi\n     */\n    public async getUserCart(rateId?: string, deliveryMethod?: string, shippingRateId?: string, discountId?: string, userAddressId?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<CartResponseDto>> {\n        return CartApiFp(this.configuration).getUserCart(rateId, deliveryMethod, shippingRateId, discountId, userAddressId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update the user cart\n     * @param {CartBodyDTO} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CartApi\n     */\n    public async handleUserCart(body: CartBodyDTO, options?: AxiosRequestConfig) : Promise<AxiosResponse<CartResponseDto>> {\n        return CartApiFp(this.configuration).handleUserCart(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * this endpoint is used to calculate the cart for a visitor or for a manual order in the dashboard, it calculates the cart prices, discounts, taxes, shipping prices, and totals.\n     * @summary to be used for visitor cart calculation and also dashboard manual order cart calculation\n     * @param {ManualOrderDTO} body \n     * @param {string} [userId] \n     * @param {string} [rateId] \n     * @param {string} [addressId] The desired address id for the store location for the pickup\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CartApi\n     */\n    public async handleVisitorCart(body: ManualOrderDTO, userId?: string, rateId?: string, addressId?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<CartResponseDto>> {\n        return CartApiFp(this.configuration).handleVisitorCart(body, userId, rateId, addressId, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\nimport { CategoriesPaginatedResponseDTO } from '../models';\nimport { Category } from '../models';\nimport { CategoryFilters } from '../models';\nimport { CategoryPopulated } from '../models';\nimport { CategorysHeadlinesResponseDTO } from '../models';\nimport { CreateCategoryDto } from '../models';\nimport { ReorderCategoriesDto } from '../models';\nimport { ReorderSuccessResponseDto } from '../models';\nimport { UpdateCategoryDto } from '../models';\n/**\n * CategoriesApi - axios parameter creator\n * @export\n */\nexport const CategoriesApiAxiosParamCreator = function (configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Create a new category\n         * @param {CreateCategoryDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createCategory: async (body: CreateCategoryDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling createCategory.');\n            }\n            const localVarPath = `/categories`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Delete category by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteCategory: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling deleteCategory.');\n            }\n            const localVarPath = `/categories/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all categories for specific store\n         * @param {string} [search] \n         * @param {number} [limit] \n         * @param {number} [page] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllCategories: async (search?: string, limit?: number, page?: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/categories`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (search !== undefined) {\n                localVarQueryParameter['search'] = search;\n            }\n\n            if (limit !== undefined) {\n                localVarQueryParameter['limit'] = limit;\n            }\n\n            if (page !== undefined) {\n                localVarQueryParameter['page'] = page;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all categories for specific store and their subcategories and their products (as headlines and numbers only) \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCategoreisAndSubCategories: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/categories/headlines`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get category filters by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCategoryFilters: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling getCategoryFilters.');\n            }\n            const localVarPath = `/categories/filters/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get single category by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSingleCategory: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling getSingleCategory.');\n            }\n            const localVarPath = `/categories/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Reorder categories\n         * @param {ReorderCategoriesDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        reorderCategories: async (body: ReorderCategoriesDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling reorderCategories.');\n            }\n            const localVarPath = `/categories/reorder`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update category by id\n         * @param {UpdateCategoryDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateCategory: async (body: UpdateCategoryDto, id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateCategory.');\n            }\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling updateCategory.');\n            }\n            const localVarPath = `/categories/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n    }\n};\n\n/**\n * CategoriesApi - functional programming interface\n * @export\n */\nexport const CategoriesApiFp = function(configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Create a new category\n         * @param {CreateCategoryDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createCategory(body: CreateCategoryDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Category>>> {\n            const localVarAxiosArgs = await CategoriesApiAxiosParamCreator(configuration).createCategory(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Delete category by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteCategory(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await CategoriesApiAxiosParamCreator(configuration).deleteCategory(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all categories for specific store\n         * @param {string} [search] \n         * @param {number} [limit] \n         * @param {number} [page] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllCategories(search?: string, limit?: number, page?: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<CategoriesPaginatedResponseDTO>>> {\n            const localVarAxiosArgs = await CategoriesApiAxiosParamCreator(configuration).getAllCategories(search, limit, page, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all categories for specific store and their subcategories and their products (as headlines and numbers only) \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getCategoreisAndSubCategories(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<CategorysHeadlinesResponseDTO>>>> {\n            const localVarAxiosArgs = await CategoriesApiAxiosParamCreator(configuration).getCategoreisAndSubCategories(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get category filters by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getCategoryFilters(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<CategoryFilters>>> {\n            const localVarAxiosArgs = await CategoriesApiAxiosParamCreator(configuration).getCategoryFilters(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get single category by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSingleCategory(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<CategoryPopulated>>> {\n            const localVarAxiosArgs = await CategoriesApiAxiosParamCreator(configuration).getSingleCategory(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Reorder categories\n         * @param {ReorderCategoriesDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async reorderCategories(body: ReorderCategoriesDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ReorderSuccessResponseDto>>> {\n            const localVarAxiosArgs = await CategoriesApiAxiosParamCreator(configuration).reorderCategories(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update category by id\n         * @param {UpdateCategoryDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateCategory(body: UpdateCategoryDto, id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Category>>> {\n            const localVarAxiosArgs = await CategoriesApiAxiosParamCreator(configuration).updateCategory(body, id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n    }\n};\n\n/**\n * CategoriesApi - factory interface\n * @export\n */\nexport const CategoriesApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n    return {\n        /**\n         * \n         * @summary Create a new category\n         * @param {CreateCategoryDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createCategory(body: CreateCategoryDto, options?: AxiosRequestConfig): Promise<AxiosResponse<Category>> {\n            return CategoriesApiFp(configuration).createCategory(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Delete category by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteCategory(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return CategoriesApiFp(configuration).deleteCategory(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all categories for specific store\n         * @param {string} [search] \n         * @param {number} [limit] \n         * @param {number} [page] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllCategories(search?: string, limit?: number, page?: number, options?: AxiosRequestConfig): Promise<AxiosResponse<CategoriesPaginatedResponseDTO>> {\n            return CategoriesApiFp(configuration).getAllCategories(search, limit, page, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all categories for specific store and their subcategories and their products (as headlines and numbers only) \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getCategoreisAndSubCategories(options?: AxiosRequestConfig): Promise<AxiosResponse<Array<CategorysHeadlinesResponseDTO>>> {\n            return CategoriesApiFp(configuration).getCategoreisAndSubCategories(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get category filters by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getCategoryFilters(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<CategoryFilters>> {\n            return CategoriesApiFp(configuration).getCategoryFilters(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get single category by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSingleCategory(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<CategoryPopulated>> {\n            return CategoriesApiFp(configuration).getSingleCategory(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Reorder categories\n         * @param {ReorderCategoriesDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async reorderCategories(body: ReorderCategoriesDto, options?: AxiosRequestConfig): Promise<AxiosResponse<ReorderSuccessResponseDto>> {\n            return CategoriesApiFp(configuration).reorderCategories(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update category by id\n         * @param {UpdateCategoryDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateCategory(body: UpdateCategoryDto, id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Category>> {\n            return CategoriesApiFp(configuration).updateCategory(body, id, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n\n/**\n * CategoriesApi - object-oriented interface\n * @export\n * @class CategoriesApi\n * @extends {BaseAPI}\n */\nexport class CategoriesApi extends BaseAPI {\n    /**\n     * \n     * @summary Create a new category\n     * @param {CreateCategoryDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CategoriesApi\n     */\n    public async createCategory(body: CreateCategoryDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<Category>> {\n        return CategoriesApiFp(this.configuration).createCategory(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Delete category by id\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CategoriesApi\n     */\n    public async deleteCategory(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return CategoriesApiFp(this.configuration).deleteCategory(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all categories for specific store\n     * @param {string} [search] \n     * @param {number} [limit] \n     * @param {number} [page] \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CategoriesApi\n     */\n    public async getAllCategories(search?: string, limit?: number, page?: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<CategoriesPaginatedResponseDTO>> {\n        return CategoriesApiFp(this.configuration).getAllCategories(search, limit, page, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all categories for specific store and their subcategories and their products (as headlines and numbers only) \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CategoriesApi\n     */\n    public async getCategoreisAndSubCategories(options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<CategorysHeadlinesResponseDTO>>> {\n        return CategoriesApiFp(this.configuration).getCategoreisAndSubCategories(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get category filters by id\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CategoriesApi\n     */\n    public async getCategoryFilters(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<CategoryFilters>> {\n        return CategoriesApiFp(this.configuration).getCategoryFilters(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get single category by id\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CategoriesApi\n     */\n    public async getSingleCategory(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<CategoryPopulated>> {\n        return CategoriesApiFp(this.configuration).getSingleCategory(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Reorder categories\n     * @param {ReorderCategoriesDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CategoriesApi\n     */\n    public async reorderCategories(body: ReorderCategoriesDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<ReorderSuccessResponseDto>> {\n        return CategoriesApiFp(this.configuration).reorderCategories(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update category by id\n     * @param {UpdateCategoryDto} body \n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof CategoriesApi\n     */\n    public async updateCategory(body: UpdateCategoryDto, id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Category>> {\n        return CategoriesApiFp(this.configuration).updateCategory(body, id, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\nimport { CreateDiscountDto } from '../models';\nimport { Discount } from '../models';\nimport { DiscountsInsightsDto } from '../models';\nimport { PopulatedDiscount } from '../models';\nimport { UpdateDiscountDto } from '../models';\n/**\n * DiscountsApi - axios parameter creator\n * @export\n */\nexport const DiscountsApiAxiosParamCreator = function (configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Create a new discount\n         * @param {CreateDiscountDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createDiscount: async (body: CreateDiscountDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling createDiscount.');\n            }\n            const localVarPath = `/discounts`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Delete a discount\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteDiscount: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling deleteDiscount.');\n            }\n            const localVarPath = `/discounts/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all discounts with filters and pagination\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllDiscounts: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/discounts`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get dashboard insights for discounts\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getDiscountsInsights: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/discounts/insights`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get a single discount by ID\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSingleDiscount: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling getSingleDiscount.');\n            }\n            const localVarPath = `/discounts/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update a discount\n         * @param {UpdateDiscountDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateDiscount: async (body: UpdateDiscountDto, id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateDiscount.');\n            }\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling updateDiscount.');\n            }\n            const localVarPath = `/discounts/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Validate a coupon code (by code or discountId)\n         * @param {string} [code] \n         * @param {string} [userId] \n         * @param {string} [discountId] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        validateCoupon: async (code?: string, userId?: string, discountId?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/discounts/validate`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (code !== undefined) {\n                localVarQueryParameter['code'] = code;\n            }\n\n            if (userId !== undefined) {\n                localVarQueryParameter['userId'] = userId;\n            }\n\n            if (discountId !== undefined) {\n                localVarQueryParameter['discountId'] = discountId;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n    }\n};\n\n/**\n * DiscountsApi - functional programming interface\n * @export\n */\nexport const DiscountsApiFp = function(configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Create a new discount\n         * @param {CreateDiscountDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createDiscount(body: CreateDiscountDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Discount>>> {\n            const localVarAxiosArgs = await DiscountsApiAxiosParamCreator(configuration).createDiscount(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Delete a discount\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteDiscount(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await DiscountsApiAxiosParamCreator(configuration).deleteDiscount(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all discounts with filters and pagination\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllDiscounts(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<PopulatedDiscount>>>> {\n            const localVarAxiosArgs = await DiscountsApiAxiosParamCreator(configuration).getAllDiscounts(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get dashboard insights for discounts\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getDiscountsInsights(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<DiscountsInsightsDto>>> {\n            const localVarAxiosArgs = await DiscountsApiAxiosParamCreator(configuration).getDiscountsInsights(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get a single discount by ID\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSingleDiscount(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<PopulatedDiscount>>> {\n            const localVarAxiosArgs = await DiscountsApiAxiosParamCreator(configuration).getSingleDiscount(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update a discount\n         * @param {UpdateDiscountDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateDiscount(body: UpdateDiscountDto, id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Discount>>> {\n            const localVarAxiosArgs = await DiscountsApiAxiosParamCreator(configuration).updateDiscount(body, id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Validate a coupon code (by code or discountId)\n         * @param {string} [code] \n         * @param {string} [userId] \n         * @param {string} [discountId] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async validateCoupon(code?: string, userId?: string, discountId?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Discount>>> {\n            const localVarAxiosArgs = await DiscountsApiAxiosParamCreator(configuration).validateCoupon(code, userId, discountId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n    }\n};\n\n/**\n * DiscountsApi - factory interface\n * @export\n */\nexport const DiscountsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n    return {\n        /**\n         * \n         * @summary Create a new discount\n         * @param {CreateDiscountDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createDiscount(body: CreateDiscountDto, options?: AxiosRequestConfig): Promise<AxiosResponse<Discount>> {\n            return DiscountsApiFp(configuration).createDiscount(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Delete a discount\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteDiscount(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return DiscountsApiFp(configuration).deleteDiscount(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all discounts with filters and pagination\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllDiscounts(options?: AxiosRequestConfig): Promise<AxiosResponse<Array<PopulatedDiscount>>> {\n            return DiscountsApiFp(configuration).getAllDiscounts(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get dashboard insights for discounts\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getDiscountsInsights(options?: AxiosRequestConfig): Promise<AxiosResponse<DiscountsInsightsDto>> {\n            return DiscountsApiFp(configuration).getDiscountsInsights(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get a single discount by ID\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSingleDiscount(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<PopulatedDiscount>> {\n            return DiscountsApiFp(configuration).getSingleDiscount(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update a discount\n         * @param {UpdateDiscountDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateDiscount(body: UpdateDiscountDto, id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Discount>> {\n            return DiscountsApiFp(configuration).updateDiscount(body, id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Validate a coupon code (by code or discountId)\n         * @param {string} [code] \n         * @param {string} [userId] \n         * @param {string} [discountId] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async validateCoupon(code?: string, userId?: string, discountId?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Discount>> {\n            return DiscountsApiFp(configuration).validateCoupon(code, userId, discountId, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n\n/**\n * DiscountsApi - object-oriented interface\n * @export\n * @class DiscountsApi\n * @extends {BaseAPI}\n */\nexport class DiscountsApi extends BaseAPI {\n    /**\n     * \n     * @summary Create a new discount\n     * @param {CreateDiscountDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof DiscountsApi\n     */\n    public async createDiscount(body: CreateDiscountDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<Discount>> {\n        return DiscountsApiFp(this.configuration).createDiscount(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Delete a discount\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof DiscountsApi\n     */\n    public async deleteDiscount(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return DiscountsApiFp(this.configuration).deleteDiscount(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all discounts with filters and pagination\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof DiscountsApi\n     */\n    public async getAllDiscounts(options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<PopulatedDiscount>>> {\n        return DiscountsApiFp(this.configuration).getAllDiscounts(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get dashboard insights for discounts\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof DiscountsApi\n     */\n    public async getDiscountsInsights(options?: AxiosRequestConfig) : Promise<AxiosResponse<DiscountsInsightsDto>> {\n        return DiscountsApiFp(this.configuration).getDiscountsInsights(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get a single discount by ID\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof DiscountsApi\n     */\n    public async getSingleDiscount(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<PopulatedDiscount>> {\n        return DiscountsApiFp(this.configuration).getSingleDiscount(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update a discount\n     * @param {UpdateDiscountDto} body \n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof DiscountsApi\n     */\n    public async updateDiscount(body: UpdateDiscountDto, id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Discount>> {\n        return DiscountsApiFp(this.configuration).updateDiscount(body, id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Validate a coupon code (by code or discountId)\n     * @param {string} [code] \n     * @param {string} [userId] \n     * @param {string} [discountId] \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof DiscountsApi\n     */\n    public async validateCoupon(code?: string, userId?: string, discountId?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Discount>> {\n        return DiscountsApiFp(this.configuration).validateCoupon(code, userId, discountId, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\nimport { BulkChannelToggleDto } from '../models';\nimport { NotificationsPaginatedResponseDto } from '../models';\nimport { UnreadCountDto } from '../models';\nimport { UpdateNotificationSettingsDto } from '../models';\n/**\n * NotificationsApi - axios parameter creator\n * @export\n */\nexport const NotificationsApiAxiosParamCreator = function (configuration?: Configuration) {\n    return {\n        /**\n         * Enable or disable a channel (email, push, inApp) for all or a category of notifications\n         * @summary Bulk toggle a notification channel\n         * @param {BulkChannelToggleDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        bulkToggleChannel: async (body: BulkChannelToggleDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling bulkToggleChannel.');\n            }\n            const localVarPath = `/notifications/settings/bulk-toggle`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PUT', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Delete a notification\n         * @param {string} id Notification ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteNotification: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling deleteNotification.');\n            }\n            const localVarPath = `/notifications/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get notification history\n         * @param {number} [page] Page number (default: 1)\n         * @param {number} [limit] Items per page (default: 20)\n         * @param {boolean} [unreadOnly] Only return unread notifications\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getNotifications: async (page?: number, limit?: number, unreadOnly?: boolean, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/notifications`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            if (page !== undefined) {\n                localVarQueryParameter['page'] = page;\n            }\n\n            if (limit !== undefined) {\n                localVarQueryParameter['limit'] = limit;\n            }\n\n            if (unreadOnly !== undefined) {\n                localVarQueryParameter['unreadOnly'] = unreadOnly;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get user notification settings\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSettings: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/notifications/settings`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get unread notification count\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getUnreadCount: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/notifications/unread-count`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Mark all notifications as read\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        markAllAsRead: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/notifications/read-all`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Mark notification as read\n         * @param {string} id Notification ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        markAsRead: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling markAsRead.');\n            }\n            const localVarPath = `/notifications/{id}/read`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * Connect with ?token=JWT to receive real-time updates. EventSource cannot send headers.\n         * @summary SSE stream for real-time notifications\n         * @param {string} token JWT auth token\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        stream: async (token: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'token' is not null or undefined\n            if (token === null || token === undefined) {\n                throw new RequiredError('token','Required parameter token was null or undefined when calling stream.');\n            }\n            const localVarPath = `/notifications/stream`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            if (token !== undefined) {\n                localVarQueryParameter['token'] = token;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update notification settings\n         * @param {UpdateNotificationSettingsDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateSettings: async (body: UpdateNotificationSettingsDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateSettings.');\n            }\n            const localVarPath = `/notifications/settings`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PUT', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n    }\n};\n\n/**\n * NotificationsApi - functional programming interface\n * @export\n */\nexport const NotificationsApiFp = function(configuration?: Configuration) {\n    return {\n        /**\n         * Enable or disable a channel (email, push, inApp) for all or a category of notifications\n         * @summary Bulk toggle a notification channel\n         * @param {BulkChannelToggleDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async bulkToggleChannel(body: BulkChannelToggleDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await NotificationsApiAxiosParamCreator(configuration).bulkToggleChannel(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Delete a notification\n         * @param {string} id Notification ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteNotification(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await NotificationsApiAxiosParamCreator(configuration).deleteNotification(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get notification history\n         * @param {number} [page] Page number (default: 1)\n         * @param {number} [limit] Items per page (default: 20)\n         * @param {boolean} [unreadOnly] Only return unread notifications\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getNotifications(page?: number, limit?: number, unreadOnly?: boolean, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<NotificationsPaginatedResponseDto>>> {\n            const localVarAxiosArgs = await NotificationsApiAxiosParamCreator(configuration).getNotifications(page, limit, unreadOnly, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get user notification settings\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSettings(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await NotificationsApiAxiosParamCreator(configuration).getSettings(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get unread notification count\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getUnreadCount(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<UnreadCountDto>>> {\n            const localVarAxiosArgs = await NotificationsApiAxiosParamCreator(configuration).getUnreadCount(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Mark all notifications as read\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async markAllAsRead(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await NotificationsApiAxiosParamCreator(configuration).markAllAsRead(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Mark notification as read\n         * @param {string} id Notification ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async markAsRead(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await NotificationsApiAxiosParamCreator(configuration).markAsRead(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * Connect with ?token=JWT to receive real-time updates. EventSource cannot send headers.\n         * @summary SSE stream for real-time notifications\n         * @param {string} token JWT auth token\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async stream(token: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await NotificationsApiAxiosParamCreator(configuration).stream(token, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update notification settings\n         * @param {UpdateNotificationSettingsDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateSettings(body: UpdateNotificationSettingsDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await NotificationsApiAxiosParamCreator(configuration).updateSettings(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n    }\n};\n\n/**\n * NotificationsApi - factory interface\n * @export\n */\nexport const NotificationsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n    return {\n        /**\n         * Enable or disable a channel (email, push, inApp) for all or a category of notifications\n         * @summary Bulk toggle a notification channel\n         * @param {BulkChannelToggleDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async bulkToggleChannel(body: BulkChannelToggleDto, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return NotificationsApiFp(configuration).bulkToggleChannel(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Delete a notification\n         * @param {string} id Notification ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteNotification(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return NotificationsApiFp(configuration).deleteNotification(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get notification history\n         * @param {number} [page] Page number (default: 1)\n         * @param {number} [limit] Items per page (default: 20)\n         * @param {boolean} [unreadOnly] Only return unread notifications\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getNotifications(page?: number, limit?: number, unreadOnly?: boolean, options?: AxiosRequestConfig): Promise<AxiosResponse<NotificationsPaginatedResponseDto>> {\n            return NotificationsApiFp(configuration).getNotifications(page, limit, unreadOnly, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get user notification settings\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSettings(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return NotificationsApiFp(configuration).getSettings(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get unread notification count\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getUnreadCount(options?: AxiosRequestConfig): Promise<AxiosResponse<UnreadCountDto>> {\n            return NotificationsApiFp(configuration).getUnreadCount(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Mark all notifications as read\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async markAllAsRead(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return NotificationsApiFp(configuration).markAllAsRead(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Mark notification as read\n         * @param {string} id Notification ID\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async markAsRead(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return NotificationsApiFp(configuration).markAsRead(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * Connect with ?token=JWT to receive real-time updates. EventSource cannot send headers.\n         * @summary SSE stream for real-time notifications\n         * @param {string} token JWT auth token\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async stream(token: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return NotificationsApiFp(configuration).stream(token, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update notification settings\n         * @param {UpdateNotificationSettingsDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateSettings(body: UpdateNotificationSettingsDto, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return NotificationsApiFp(configuration).updateSettings(body, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n\n/**\n * NotificationsApi - object-oriented interface\n * @export\n * @class NotificationsApi\n * @extends {BaseAPI}\n */\nexport class NotificationsApi extends BaseAPI {\n    /**\n     * Enable or disable a channel (email, push, inApp) for all or a category of notifications\n     * @summary Bulk toggle a notification channel\n     * @param {BulkChannelToggleDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof NotificationsApi\n     */\n    public async bulkToggleChannel(body: BulkChannelToggleDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return NotificationsApiFp(this.configuration).bulkToggleChannel(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Delete a notification\n     * @param {string} id Notification ID\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof NotificationsApi\n     */\n    public async deleteNotification(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return NotificationsApiFp(this.configuration).deleteNotification(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get notification history\n     * @param {number} [page] Page number (default: 1)\n     * @param {number} [limit] Items per page (default: 20)\n     * @param {boolean} [unreadOnly] Only return unread notifications\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof NotificationsApi\n     */\n    public async getNotifications(page?: number, limit?: number, unreadOnly?: boolean, options?: AxiosRequestConfig) : Promise<AxiosResponse<NotificationsPaginatedResponseDto>> {\n        return NotificationsApiFp(this.configuration).getNotifications(page, limit, unreadOnly, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get user notification settings\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof NotificationsApi\n     */\n    public async getSettings(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return NotificationsApiFp(this.configuration).getSettings(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get unread notification count\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof NotificationsApi\n     */\n    public async getUnreadCount(options?: AxiosRequestConfig) : Promise<AxiosResponse<UnreadCountDto>> {\n        return NotificationsApiFp(this.configuration).getUnreadCount(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Mark all notifications as read\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof NotificationsApi\n     */\n    public async markAllAsRead(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return NotificationsApiFp(this.configuration).markAllAsRead(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Mark notification as read\n     * @param {string} id Notification ID\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof NotificationsApi\n     */\n    public async markAsRead(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return NotificationsApiFp(this.configuration).markAsRead(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * Connect with ?token=JWT to receive real-time updates. EventSource cannot send headers.\n     * @summary SSE stream for real-time notifications\n     * @param {string} token JWT auth token\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof NotificationsApi\n     */\n    public async stream(token: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return NotificationsApiFp(this.configuration).stream(token, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update notification settings\n     * @param {UpdateNotificationSettingsDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof NotificationsApi\n     */\n    public async updateSettings(body: UpdateNotificationSettingsDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return NotificationsApiFp(this.configuration).updateSettings(body, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\nimport { GuestCheckoutDto } from '../models';\nimport { GuestCheckoutResponseDto } from '../models';\nimport { ManualOrderDTO } from '../models';\nimport { OrderPaginatedResponse } from '../models';\nimport { OrdersInsightsDto } from '../models';\nimport { PopulatedOrder } from '../models';\n/**\n * OrdersApi - axios parameter creator\n * @export\n */\nexport const OrdersApiAxiosParamCreator = function (configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Add payment method to Order\n         * @param {string} orderId \n         * @param {string} paymentMethod \n         * @param {string} [billingAddressId] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        assignPaymentMethod: async (orderId: string, paymentMethod: string, billingAddressId?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'orderId' is not null or undefined\n            if (orderId === null || orderId === undefined) {\n                throw new RequiredError('orderId','Required parameter orderId was null or undefined when calling assignPaymentMethod.');\n            }\n            // verify required parameter 'paymentMethod' is not null or undefined\n            if (paymentMethod === null || paymentMethod === undefined) {\n                throw new RequiredError('paymentMethod','Required parameter paymentMethod was null or undefined when calling assignPaymentMethod.');\n            }\n            const localVarPath = `/orders/assign-payment-method/{orderId}`\n                .replace(`{${\"orderId\"}}`, encodeURIComponent(String(orderId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (paymentMethod !== undefined) {\n                localVarQueryParameter['paymentMethod'] = paymentMethod;\n            }\n\n            if (billingAddressId !== undefined) {\n                localVarQueryParameter['billingAddressId'] = billingAddressId;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Cancel an order\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        cancelOrder: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling cancelOrder.');\n            }\n            const localVarPath = `/orders/cancel/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Create an Order\n         * @param {ManualOrderDTO} body \n         * @param {boolean} isDelivery \n         * @param {string} [userId] \n         * @param {string} [rateId] \n         * @param {string} [billingAddressId] The desired address id for the billing address in case of paying by card\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createCheckout: async (body: ManualOrderDTO, isDelivery: boolean, userId?: string, rateId?: string, billingAddressId?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling createCheckout.');\n            }\n            // verify required parameter 'isDelivery' is not null or undefined\n            if (isDelivery === null || isDelivery === undefined) {\n                throw new RequiredError('isDelivery','Required parameter isDelivery was null or undefined when calling createCheckout.');\n            }\n            const localVarPath = `/orders/createOrder`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (userId !== undefined) {\n                localVarQueryParameter['userId'] = userId;\n            }\n\n            if (isDelivery !== undefined) {\n                localVarQueryParameter['isDelivery'] = isDelivery;\n            }\n\n            if (rateId !== undefined) {\n                localVarQueryParameter['rateId'] = rateId;\n            }\n\n            if (billingAddressId !== undefined) {\n                localVarQueryParameter['billingAddressId'] = billingAddressId;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Delete an order\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteOrder: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling deleteOrder.');\n            }\n            const localVarPath = `/orders/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all orders\n         * @param {string} [paymentStatus] \n         * @param {string} [orderStatus] \n         * @param {number} [page] \n         * @param {number} [limit] \n         * @param {string} [search] \n         * @param {Date} [createdAfter] \n         * @param {Date} [createdBefore] \n         * @param {Date} [userId] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllOrders: async (paymentStatus?: string, orderStatus?: string, page?: number, limit?: number, search?: string, createdAfter?: Date, createdBefore?: Date, userId?: Date, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/orders`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (paymentStatus !== undefined) {\n                localVarQueryParameter['paymentStatus'] = paymentStatus;\n            }\n\n            if (orderStatus !== undefined) {\n                localVarQueryParameter['orderStatus'] = orderStatus;\n            }\n\n            if (page !== undefined) {\n                localVarQueryParameter['page'] = page;\n            }\n\n            if (limit !== undefined) {\n                localVarQueryParameter['limit'] = limit;\n            }\n\n            if (search !== undefined) {\n                localVarQueryParameter['search'] = search;\n            }\n\n            if (createdAfter !== undefined) {\n                localVarQueryParameter['createdAfter'] = (createdAfter as any instanceof Date) ?\n                    (createdAfter as any).toISOString() :\n                    createdAfter;\n            }\n\n            if (createdBefore !== undefined) {\n                localVarQueryParameter['createdBefore'] = (createdBefore as any instanceof Date) ?\n                    (createdBefore as any).toISOString() :\n                    createdBefore;\n            }\n\n            if (userId !== undefined) {\n                localVarQueryParameter['userId'] = (userId as any instanceof Date) ?\n                    (userId as any).toISOString() :\n                    userId;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get an order by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSingleOrder: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling getSingleOrder.');\n            }\n            const localVarPath = `/orders/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get the insights for each type of orders\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getStoreOrderInsights: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/orders/insights`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all orders for the current user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getUserOrders: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/orders/user`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Place an order as a guest — creates an account automatically and returns a JWT\n         * @param {GuestCheckoutDto} body \n         * @param {string} [rateId] \n         * @param {boolean} [isDelivery] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        guestCheckout: async (body: GuestCheckoutDto, rateId?: string, isDelivery?: boolean, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling guestCheckout.');\n            }\n            const localVarPath = `/orders/guest-checkout`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (rateId !== undefined) {\n                localVarQueryParameter['rateId'] = rateId;\n            }\n\n            if (isDelivery !== undefined) {\n                localVarQueryParameter['isDelivery'] = isDelivery;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Pay for an Order\n         * @param {string} orderId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        payOrder: async (orderId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'orderId' is not null or undefined\n            if (orderId === null || orderId === undefined) {\n                throw new RequiredError('orderId','Required parameter orderId was null or undefined when calling payOrder.');\n            }\n            const localVarPath = `/orders/pay/{orderId}`\n                .replace(`{${\"orderId\"}}`, encodeURIComponent(String(orderId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Track an order by ID and email — no login required\n         * @param {string} orderId \n         * @param {string} email \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        trackOrder: async (orderId: string, email: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'orderId' is not null or undefined\n            if (orderId === null || orderId === undefined) {\n                throw new RequiredError('orderId','Required parameter orderId was null or undefined when calling trackOrder.');\n            }\n            // verify required parameter 'email' is not null or undefined\n            if (email === null || email === undefined) {\n                throw new RequiredError('email','Required parameter email was null or undefined when calling trackOrder.');\n            }\n            const localVarPath = `/orders/track/{orderId}`\n                .replace(`{${\"orderId\"}}`, encodeURIComponent(String(orderId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (email !== undefined) {\n                localVarQueryParameter['email'] = email;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update an order\n         * @param {ManualOrderDTO} body \n         * @param {boolean} isDelivery \n         * @param {string} id \n         * @param {string} [paymentMethod] \n         * @param {string} [userId] \n         * @param {string} [rateId] \n         * @param {string} [addressId] The desired address id for the store location for the pickup\n         * @param {string} [billingAddressId] The desired address id for the billing address in case of paying by card\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateOrder: async (body: ManualOrderDTO, isDelivery: boolean, id: string, paymentMethod?: string, userId?: string, rateId?: string, addressId?: string, billingAddressId?: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateOrder.');\n            }\n            // verify required parameter 'isDelivery' is not null or undefined\n            if (isDelivery === null || isDelivery === undefined) {\n                throw new RequiredError('isDelivery','Required parameter isDelivery was null or undefined when calling updateOrder.');\n            }\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling updateOrder.');\n            }\n            const localVarPath = `/orders/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (paymentMethod !== undefined) {\n                localVarQueryParameter['paymentMethod'] = paymentMethod;\n            }\n\n            if (userId !== undefined) {\n                localVarQueryParameter['userId'] = userId;\n            }\n\n            if (isDelivery !== undefined) {\n                localVarQueryParameter['isDelivery'] = isDelivery;\n            }\n\n            if (rateId !== undefined) {\n                localVarQueryParameter['rateId'] = rateId;\n            }\n\n            if (addressId !== undefined) {\n                localVarQueryParameter['addressId'] = addressId;\n            }\n\n            if (billingAddressId !== undefined) {\n                localVarQueryParameter['billingAddressId'] = billingAddressId;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update an order status\n         * @param {string} id \n         * @param {string} orderStatus \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateOrderStatus: async (id: string, orderStatus: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling updateOrderStatus.');\n            }\n            // verify required parameter 'orderStatus' is not null or undefined\n            if (orderStatus === null || orderStatus === undefined) {\n                throw new RequiredError('orderStatus','Required parameter orderStatus was null or undefined when calling updateOrderStatus.');\n            }\n            const localVarPath = `/orders/{id}/status`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (orderStatus !== undefined) {\n                localVarQueryParameter['orderStatus'] = orderStatus;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n    }\n};\n\n/**\n * OrdersApi - functional programming interface\n * @export\n */\nexport const OrdersApiFp = function(configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Add payment method to Order\n         * @param {string} orderId \n         * @param {string} paymentMethod \n         * @param {string} [billingAddressId] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async assignPaymentMethod(orderId: string, paymentMethod: string, billingAddressId?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<PopulatedOrder>>> {\n            const localVarAxiosArgs = await OrdersApiAxiosParamCreator(configuration).assignPaymentMethod(orderId, paymentMethod, billingAddressId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Cancel an order\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async cancelOrder(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<PopulatedOrder>>> {\n            const localVarAxiosArgs = await OrdersApiAxiosParamCreator(configuration).cancelOrder(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Create an Order\n         * @param {ManualOrderDTO} body \n         * @param {boolean} isDelivery \n         * @param {string} [userId] \n         * @param {string} [rateId] \n         * @param {string} [billingAddressId] The desired address id for the billing address in case of paying by card\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createCheckout(body: ManualOrderDTO, isDelivery: boolean, userId?: string, rateId?: string, billingAddressId?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<PopulatedOrder>>> {\n            const localVarAxiosArgs = await OrdersApiAxiosParamCreator(configuration).createCheckout(body, isDelivery, userId, rateId, billingAddressId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Delete an order\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteOrder(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await OrdersApiAxiosParamCreator(configuration).deleteOrder(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all orders\n         * @param {string} [paymentStatus] \n         * @param {string} [orderStatus] \n         * @param {number} [page] \n         * @param {number} [limit] \n         * @param {string} [search] \n         * @param {Date} [createdAfter] \n         * @param {Date} [createdBefore] \n         * @param {Date} [userId] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllOrders(paymentStatus?: string, orderStatus?: string, page?: number, limit?: number, search?: string, createdAfter?: Date, createdBefore?: Date, userId?: Date, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<OrderPaginatedResponse>>> {\n            const localVarAxiosArgs = await OrdersApiAxiosParamCreator(configuration).getAllOrders(paymentStatus, orderStatus, page, limit, search, createdAfter, createdBefore, userId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get an order by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSingleOrder(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<PopulatedOrder>>> {\n            const localVarAxiosArgs = await OrdersApiAxiosParamCreator(configuration).getSingleOrder(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get the insights for each type of orders\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getStoreOrderInsights(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<OrdersInsightsDto>>> {\n            const localVarAxiosArgs = await OrdersApiAxiosParamCreator(configuration).getStoreOrderInsights(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all orders for the current user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getUserOrders(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<PopulatedOrder>>>> {\n            const localVarAxiosArgs = await OrdersApiAxiosParamCreator(configuration).getUserOrders(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Place an order as a guest — creates an account automatically and returns a JWT\n         * @param {GuestCheckoutDto} body \n         * @param {string} [rateId] \n         * @param {boolean} [isDelivery] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async guestCheckout(body: GuestCheckoutDto, rateId?: string, isDelivery?: boolean, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<GuestCheckoutResponseDto>>> {\n            const localVarAxiosArgs = await OrdersApiAxiosParamCreator(configuration).guestCheckout(body, rateId, isDelivery, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Pay for an Order\n         * @param {string} orderId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async payOrder(orderId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<PopulatedOrder>>> {\n            const localVarAxiosArgs = await OrdersApiAxiosParamCreator(configuration).payOrder(orderId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Track an order by ID and email — no login required\n         * @param {string} orderId \n         * @param {string} email \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async trackOrder(orderId: string, email: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<PopulatedOrder>>> {\n            const localVarAxiosArgs = await OrdersApiAxiosParamCreator(configuration).trackOrder(orderId, email, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update an order\n         * @param {ManualOrderDTO} body \n         * @param {boolean} isDelivery \n         * @param {string} id \n         * @param {string} [paymentMethod] \n         * @param {string} [userId] \n         * @param {string} [rateId] \n         * @param {string} [addressId] The desired address id for the store location for the pickup\n         * @param {string} [billingAddressId] The desired address id for the billing address in case of paying by card\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateOrder(body: ManualOrderDTO, isDelivery: boolean, id: string, paymentMethod?: string, userId?: string, rateId?: string, addressId?: string, billingAddressId?: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<PopulatedOrder>>> {\n            const localVarAxiosArgs = await OrdersApiAxiosParamCreator(configuration).updateOrder(body, isDelivery, id, paymentMethod, userId, rateId, addressId, billingAddressId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update an order status\n         * @param {string} id \n         * @param {string} orderStatus \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateOrderStatus(id: string, orderStatus: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<PopulatedOrder>>> {\n            const localVarAxiosArgs = await OrdersApiAxiosParamCreator(configuration).updateOrderStatus(id, orderStatus, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n    }\n};\n\n/**\n * OrdersApi - factory interface\n * @export\n */\nexport const OrdersApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n    return {\n        /**\n         * \n         * @summary Add payment method to Order\n         * @param {string} orderId \n         * @param {string} paymentMethod \n         * @param {string} [billingAddressId] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async assignPaymentMethod(orderId: string, paymentMethod: string, billingAddressId?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<PopulatedOrder>> {\n            return OrdersApiFp(configuration).assignPaymentMethod(orderId, paymentMethod, billingAddressId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Cancel an order\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async cancelOrder(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<PopulatedOrder>> {\n            return OrdersApiFp(configuration).cancelOrder(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Create an Order\n         * @param {ManualOrderDTO} body \n         * @param {boolean} isDelivery \n         * @param {string} [userId] \n         * @param {string} [rateId] \n         * @param {string} [billingAddressId] The desired address id for the billing address in case of paying by card\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createCheckout(body: ManualOrderDTO, isDelivery: boolean, userId?: string, rateId?: string, billingAddressId?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<PopulatedOrder>> {\n            return OrdersApiFp(configuration).createCheckout(body, isDelivery, userId, rateId, billingAddressId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Delete an order\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteOrder(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return OrdersApiFp(configuration).deleteOrder(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all orders\n         * @param {string} [paymentStatus] \n         * @param {string} [orderStatus] \n         * @param {number} [page] \n         * @param {number} [limit] \n         * @param {string} [search] \n         * @param {Date} [createdAfter] \n         * @param {Date} [createdBefore] \n         * @param {Date} [userId] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllOrders(paymentStatus?: string, orderStatus?: string, page?: number, limit?: number, search?: string, createdAfter?: Date, createdBefore?: Date, userId?: Date, options?: AxiosRequestConfig): Promise<AxiosResponse<OrderPaginatedResponse>> {\n            return OrdersApiFp(configuration).getAllOrders(paymentStatus, orderStatus, page, limit, search, createdAfter, createdBefore, userId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get an order by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSingleOrder(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<PopulatedOrder>> {\n            return OrdersApiFp(configuration).getSingleOrder(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get the insights for each type of orders\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getStoreOrderInsights(options?: AxiosRequestConfig): Promise<AxiosResponse<OrdersInsightsDto>> {\n            return OrdersApiFp(configuration).getStoreOrderInsights(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all orders for the current user\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getUserOrders(options?: AxiosRequestConfig): Promise<AxiosResponse<Array<PopulatedOrder>>> {\n            return OrdersApiFp(configuration).getUserOrders(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Place an order as a guest — creates an account automatically and returns a JWT\n         * @param {GuestCheckoutDto} body \n         * @param {string} [rateId] \n         * @param {boolean} [isDelivery] \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async guestCheckout(body: GuestCheckoutDto, rateId?: string, isDelivery?: boolean, options?: AxiosRequestConfig): Promise<AxiosResponse<GuestCheckoutResponseDto>> {\n            return OrdersApiFp(configuration).guestCheckout(body, rateId, isDelivery, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Pay for an Order\n         * @param {string} orderId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async payOrder(orderId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<PopulatedOrder>> {\n            return OrdersApiFp(configuration).payOrder(orderId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Track an order by ID and email — no login required\n         * @param {string} orderId \n         * @param {string} email \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async trackOrder(orderId: string, email: string, options?: AxiosRequestConfig): Promise<AxiosResponse<PopulatedOrder>> {\n            return OrdersApiFp(configuration).trackOrder(orderId, email, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update an order\n         * @param {ManualOrderDTO} body \n         * @param {boolean} isDelivery \n         * @param {string} id \n         * @param {string} [paymentMethod] \n         * @param {string} [userId] \n         * @param {string} [rateId] \n         * @param {string} [addressId] The desired address id for the store location for the pickup\n         * @param {string} [billingAddressId] The desired address id for the billing address in case of paying by card\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateOrder(body: ManualOrderDTO, isDelivery: boolean, id: string, paymentMethod?: string, userId?: string, rateId?: string, addressId?: string, billingAddressId?: string, options?: AxiosRequestConfig): Promise<AxiosResponse<PopulatedOrder>> {\n            return OrdersApiFp(configuration).updateOrder(body, isDelivery, id, paymentMethod, userId, rateId, addressId, billingAddressId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update an order status\n         * @param {string} id \n         * @param {string} orderStatus \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateOrderStatus(id: string, orderStatus: string, options?: AxiosRequestConfig): Promise<AxiosResponse<PopulatedOrder>> {\n            return OrdersApiFp(configuration).updateOrderStatus(id, orderStatus, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n\n/**\n * OrdersApi - object-oriented interface\n * @export\n * @class OrdersApi\n * @extends {BaseAPI}\n */\nexport class OrdersApi extends BaseAPI {\n    /**\n     * \n     * @summary Add payment method to Order\n     * @param {string} orderId \n     * @param {string} paymentMethod \n     * @param {string} [billingAddressId] \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OrdersApi\n     */\n    public async assignPaymentMethod(orderId: string, paymentMethod: string, billingAddressId?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<PopulatedOrder>> {\n        return OrdersApiFp(this.configuration).assignPaymentMethod(orderId, paymentMethod, billingAddressId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Cancel an order\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OrdersApi\n     */\n    public async cancelOrder(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<PopulatedOrder>> {\n        return OrdersApiFp(this.configuration).cancelOrder(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Create an Order\n     * @param {ManualOrderDTO} body \n     * @param {boolean} isDelivery \n     * @param {string} [userId] \n     * @param {string} [rateId] \n     * @param {string} [billingAddressId] The desired address id for the billing address in case of paying by card\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OrdersApi\n     */\n    public async createCheckout(body: ManualOrderDTO, isDelivery: boolean, userId?: string, rateId?: string, billingAddressId?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<PopulatedOrder>> {\n        return OrdersApiFp(this.configuration).createCheckout(body, isDelivery, userId, rateId, billingAddressId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Delete an order\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OrdersApi\n     */\n    public async deleteOrder(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return OrdersApiFp(this.configuration).deleteOrder(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all orders\n     * @param {string} [paymentStatus] \n     * @param {string} [orderStatus] \n     * @param {number} [page] \n     * @param {number} [limit] \n     * @param {string} [search] \n     * @param {Date} [createdAfter] \n     * @param {Date} [createdBefore] \n     * @param {Date} [userId] \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OrdersApi\n     */\n    public async getAllOrders(paymentStatus?: string, orderStatus?: string, page?: number, limit?: number, search?: string, createdAfter?: Date, createdBefore?: Date, userId?: Date, options?: AxiosRequestConfig) : Promise<AxiosResponse<OrderPaginatedResponse>> {\n        return OrdersApiFp(this.configuration).getAllOrders(paymentStatus, orderStatus, page, limit, search, createdAfter, createdBefore, userId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get an order by id\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OrdersApi\n     */\n    public async getSingleOrder(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<PopulatedOrder>> {\n        return OrdersApiFp(this.configuration).getSingleOrder(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get the insights for each type of orders\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OrdersApi\n     */\n    public async getStoreOrderInsights(options?: AxiosRequestConfig) : Promise<AxiosResponse<OrdersInsightsDto>> {\n        return OrdersApiFp(this.configuration).getStoreOrderInsights(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all orders for the current user\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OrdersApi\n     */\n    public async getUserOrders(options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<PopulatedOrder>>> {\n        return OrdersApiFp(this.configuration).getUserOrders(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Place an order as a guest — creates an account automatically and returns a JWT\n     * @param {GuestCheckoutDto} body \n     * @param {string} [rateId] \n     * @param {boolean} [isDelivery] \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OrdersApi\n     */\n    public async guestCheckout(body: GuestCheckoutDto, rateId?: string, isDelivery?: boolean, options?: AxiosRequestConfig) : Promise<AxiosResponse<GuestCheckoutResponseDto>> {\n        return OrdersApiFp(this.configuration).guestCheckout(body, rateId, isDelivery, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Pay for an Order\n     * @param {string} orderId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OrdersApi\n     */\n    public async payOrder(orderId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<PopulatedOrder>> {\n        return OrdersApiFp(this.configuration).payOrder(orderId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Track an order by ID and email — no login required\n     * @param {string} orderId \n     * @param {string} email \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OrdersApi\n     */\n    public async trackOrder(orderId: string, email: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<PopulatedOrder>> {\n        return OrdersApiFp(this.configuration).trackOrder(orderId, email, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update an order\n     * @param {ManualOrderDTO} body \n     * @param {boolean} isDelivery \n     * @param {string} id \n     * @param {string} [paymentMethod] \n     * @param {string} [userId] \n     * @param {string} [rateId] \n     * @param {string} [addressId] The desired address id for the store location for the pickup\n     * @param {string} [billingAddressId] The desired address id for the billing address in case of paying by card\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OrdersApi\n     */\n    public async updateOrder(body: ManualOrderDTO, isDelivery: boolean, id: string, paymentMethod?: string, userId?: string, rateId?: string, addressId?: string, billingAddressId?: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<PopulatedOrder>> {\n        return OrdersApiFp(this.configuration).updateOrder(body, isDelivery, id, paymentMethod, userId, rateId, addressId, billingAddressId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update an order status\n     * @param {string} id \n     * @param {string} orderStatus \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof OrdersApi\n     */\n    public async updateOrderStatus(id: string, orderStatus: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<PopulatedOrder>> {\n        return OrdersApiFp(this.configuration).updateOrderStatus(id, orderStatus, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\nimport { CompletedOrderDto } from '../models';\nimport { CreateReviewDto } from '../models';\nimport { Review } from '../models';\nimport { ReviewStatusDto } from '../models';\nimport { ReviewableOrderDto } from '../models';\nimport { UpdateReviewDto } from '../models';\n/**\n * ReviewApi - axios parameter creator\n * @export\n */\nexport const ReviewApiAxiosParamCreator = function (configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Add a reply to a review\n         * @param {UpdateReviewDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        addReplay: async (body: UpdateReviewDto, id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling addReplay.');\n            }\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling addReplay.');\n            }\n            const localVarPath = `/reviews/addReplay/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Check if a product has been reviewed in an order\n         * @param {string} orderId \n         * @param {string} productVariantId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        checkReviewStatus: async (orderId: string, productVariantId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'orderId' is not null or undefined\n            if (orderId === null || orderId === undefined) {\n                throw new RequiredError('orderId','Required parameter orderId was null or undefined when calling checkReviewStatus.');\n            }\n            // verify required parameter 'productVariantId' is not null or undefined\n            if (productVariantId === null || productVariantId === undefined) {\n                throw new RequiredError('productVariantId','Required parameter productVariantId was null or undefined when calling checkReviewStatus.');\n            }\n            const localVarPath = `/reviews/order/{orderId}/product/{productVariantId}/status`\n                .replace(`{${\"orderId\"}}`, encodeURIComponent(String(orderId)))\n                .replace(`{${\"productVariantId\"}}`, encodeURIComponent(String(productVariantId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Create a review for a product in a completed order\n         * @param {CreateReviewDto} body \n         * @param {string} orderId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createReview: async (body: CreateReviewDto, orderId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling createReview.');\n            }\n            // verify required parameter 'orderId' is not null or undefined\n            if (orderId === null || orderId === undefined) {\n                throw new RequiredError('orderId','Required parameter orderId was null or undefined when calling createReview.');\n            }\n            const localVarPath = `/reviews/createReview/{orderId}`\n                .replace(`{${\"orderId\"}}`, encodeURIComponent(String(orderId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get the total number of reviews\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getReviewCount: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/reviews/getReviewCount`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all reviewable products from a completed order\n         * @param {string} orderId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getReviewableProducts: async (orderId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'orderId' is not null or undefined\n            if (orderId === null || orderId === undefined) {\n                throw new RequiredError('orderId','Required parameter orderId was null or undefined when calling getReviewableProducts.');\n            }\n            const localVarPath = `/reviews/order/{orderId}/reviewable-products`\n                .replace(`{${\"orderId\"}}`, encodeURIComponent(String(orderId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all reviews by date\n         * @param {string} date \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getReviewsByDate: async (date: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'date' is not null or undefined\n            if (date === null || date === undefined) {\n                throw new RequiredError('date','Required parameter date was null or undefined when calling getReviewsByDate.');\n            }\n            const localVarPath = `/reviews/reviewsByDate/{date}`\n                .replace(`{${\"date\"}}`, encodeURIComponent(String(date)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all reviews by date range\n         * @param {string} from \n         * @param {string} to \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getReviewsByDateRange: async (from: string, to: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'from' is not null or undefined\n            if (from === null || from === undefined) {\n                throw new RequiredError('from','Required parameter from was null or undefined when calling getReviewsByDateRange.');\n            }\n            // verify required parameter 'to' is not null or undefined\n            if (to === null || to === undefined) {\n                throw new RequiredError('to','Required parameter to was null or undefined when calling getReviewsByDateRange.');\n            }\n            const localVarPath = `/reviews/reviewsByDateRange/{from}/{to}`\n                .replace(`{${\"from\"}}`, encodeURIComponent(String(from)))\n                .replace(`{${\"to\"}}`, encodeURIComponent(String(to)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all reviews for a product\n         * @param {string} productId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getReviewsByProduct: async (productId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'productId' is not null or undefined\n            if (productId === null || productId === undefined) {\n                throw new RequiredError('productId','Required parameter productId was null or undefined when calling getReviewsByProduct.');\n            }\n            const localVarPath = `/reviews/reviewsByProduct/{productId}`\n                .replace(`{${\"productId\"}}`, encodeURIComponent(String(productId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all reviews by rating\n         * @param {number} rating \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getReviewsByRating: async (rating: number, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'rating' is not null or undefined\n            if (rating === null || rating === undefined) {\n                throw new RequiredError('rating','Required parameter rating was null or undefined when calling getReviewsByRating.');\n            }\n            const localVarPath = `/reviews/reviewsByRating/{rating}`\n                .replace(`{${\"rating\"}}`, encodeURIComponent(String(rating)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all reviews for a store\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getReviewsByStore: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/reviews/store-reviews`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all reviews by type\n         * @param {string} type \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getReviewsByType: async (type: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'type' is not null or undefined\n            if (type === null || type === undefined) {\n                throw new RequiredError('type','Required parameter type was null or undefined when calling getReviewsByType.');\n            }\n            const localVarPath = `/reviews/reviewsByType/{type}`\n                .replace(`{${\"type\"}}`, encodeURIComponent(String(type)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all reviews by a user\n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getReviewsByUser: async (userId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'userId' is not null or undefined\n            if (userId === null || userId === undefined) {\n                throw new RequiredError('userId','Required parameter userId was null or undefined when calling getReviewsByUser.');\n            }\n            const localVarPath = `/reviews/reviewsByUser/{userId}`\n                .replace(`{${\"userId\"}}`, encodeURIComponent(String(userId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all completed orders for the current user that can be reviewed\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getUserCompletedOrders: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/reviews/my-completed-orders`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Remove a reply from a review\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        removeReplay: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling removeReplay.');\n            }\n            const localVarPath = `/reviews/removeReplay/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Remove a review\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        removeReview: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling removeReview.');\n            }\n            const localVarPath = `/reviews/remove/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update a reply to a review\n         * @param {UpdateReviewDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateReplay: async (body: UpdateReviewDto, id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateReplay.');\n            }\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling updateReplay.');\n            }\n            const localVarPath = `/reviews/updateReplay/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update a review\n         * @param {UpdateReviewDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateReview: async (body: UpdateReviewDto, id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateReview.');\n            }\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling updateReview.');\n            }\n            const localVarPath = `/reviews/update/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n    }\n};\n\n/**\n * ReviewApi - functional programming interface\n * @export\n */\nexport const ReviewApiFp = function(configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Add a reply to a review\n         * @param {UpdateReviewDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async addReplay(body: UpdateReviewDto, id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Review>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).addReplay(body, id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Check if a product has been reviewed in an order\n         * @param {string} orderId \n         * @param {string} productVariantId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async checkReviewStatus(orderId: string, productVariantId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ReviewStatusDto>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).checkReviewStatus(orderId, productVariantId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Create a review for a product in a completed order\n         * @param {CreateReviewDto} body \n         * @param {string} orderId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createReview(body: CreateReviewDto, orderId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Review>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).createReview(body, orderId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get the total number of reviews\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewCount(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<number>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).getReviewCount(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all reviewable products from a completed order\n         * @param {string} orderId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewableProducts(orderId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ReviewableOrderDto>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).getReviewableProducts(orderId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all reviews by date\n         * @param {string} date \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewsByDate(date: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<Review>>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).getReviewsByDate(date, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all reviews by date range\n         * @param {string} from \n         * @param {string} to \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewsByDateRange(from: string, to: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<Review>>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).getReviewsByDateRange(from, to, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all reviews for a product\n         * @param {string} productId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewsByProduct(productId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<Review>>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).getReviewsByProduct(productId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all reviews by rating\n         * @param {number} rating \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewsByRating(rating: number, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<Review>>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).getReviewsByRating(rating, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all reviews for a store\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewsByStore(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<Review>>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).getReviewsByStore(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all reviews by type\n         * @param {string} type \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewsByType(type: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<Review>>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).getReviewsByType(type, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all reviews by a user\n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewsByUser(userId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<Review>>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).getReviewsByUser(userId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all completed orders for the current user that can be reviewed\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getUserCompletedOrders(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<CompletedOrderDto>>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).getUserCompletedOrders(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Remove a reply from a review\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async removeReplay(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).removeReplay(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Remove a review\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async removeReview(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).removeReview(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update a reply to a review\n         * @param {UpdateReviewDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateReplay(body: UpdateReviewDto, id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Review>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).updateReplay(body, id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update a review\n         * @param {UpdateReviewDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateReview(body: UpdateReviewDto, id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Review>>> {\n            const localVarAxiosArgs = await ReviewApiAxiosParamCreator(configuration).updateReview(body, id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n    }\n};\n\n/**\n * ReviewApi - factory interface\n * @export\n */\nexport const ReviewApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n    return {\n        /**\n         * \n         * @summary Add a reply to a review\n         * @param {UpdateReviewDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async addReplay(body: UpdateReviewDto, id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Review>> {\n            return ReviewApiFp(configuration).addReplay(body, id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Check if a product has been reviewed in an order\n         * @param {string} orderId \n         * @param {string} productVariantId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async checkReviewStatus(orderId: string, productVariantId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<ReviewStatusDto>> {\n            return ReviewApiFp(configuration).checkReviewStatus(orderId, productVariantId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Create a review for a product in a completed order\n         * @param {CreateReviewDto} body \n         * @param {string} orderId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createReview(body: CreateReviewDto, orderId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Review>> {\n            return ReviewApiFp(configuration).createReview(body, orderId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get the total number of reviews\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewCount(options?: AxiosRequestConfig): Promise<AxiosResponse<number>> {\n            return ReviewApiFp(configuration).getReviewCount(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all reviewable products from a completed order\n         * @param {string} orderId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewableProducts(orderId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<ReviewableOrderDto>> {\n            return ReviewApiFp(configuration).getReviewableProducts(orderId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all reviews by date\n         * @param {string} date \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewsByDate(date: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Array<Review>>> {\n            return ReviewApiFp(configuration).getReviewsByDate(date, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all reviews by date range\n         * @param {string} from \n         * @param {string} to \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewsByDateRange(from: string, to: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Array<Review>>> {\n            return ReviewApiFp(configuration).getReviewsByDateRange(from, to, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all reviews for a product\n         * @param {string} productId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewsByProduct(productId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Array<Review>>> {\n            return ReviewApiFp(configuration).getReviewsByProduct(productId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all reviews by rating\n         * @param {number} rating \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewsByRating(rating: number, options?: AxiosRequestConfig): Promise<AxiosResponse<Array<Review>>> {\n            return ReviewApiFp(configuration).getReviewsByRating(rating, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all reviews for a store\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewsByStore(options?: AxiosRequestConfig): Promise<AxiosResponse<Array<Review>>> {\n            return ReviewApiFp(configuration).getReviewsByStore(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all reviews by type\n         * @param {string} type \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewsByType(type: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Array<Review>>> {\n            return ReviewApiFp(configuration).getReviewsByType(type, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all reviews by a user\n         * @param {string} userId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getReviewsByUser(userId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Array<Review>>> {\n            return ReviewApiFp(configuration).getReviewsByUser(userId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all completed orders for the current user that can be reviewed\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getUserCompletedOrders(options?: AxiosRequestConfig): Promise<AxiosResponse<Array<CompletedOrderDto>>> {\n            return ReviewApiFp(configuration).getUserCompletedOrders(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Remove a reply from a review\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async removeReplay(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ReviewApiFp(configuration).removeReplay(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Remove a review\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async removeReview(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ReviewApiFp(configuration).removeReview(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update a reply to a review\n         * @param {UpdateReviewDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateReplay(body: UpdateReviewDto, id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Review>> {\n            return ReviewApiFp(configuration).updateReplay(body, id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update a review\n         * @param {UpdateReviewDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateReview(body: UpdateReviewDto, id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Review>> {\n            return ReviewApiFp(configuration).updateReview(body, id, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n\n/**\n * ReviewApi - object-oriented interface\n * @export\n * @class ReviewApi\n * @extends {BaseAPI}\n */\nexport class ReviewApi extends BaseAPI {\n    /**\n     * \n     * @summary Add a reply to a review\n     * @param {UpdateReviewDto} body \n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async addReplay(body: UpdateReviewDto, id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Review>> {\n        return ReviewApiFp(this.configuration).addReplay(body, id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Check if a product has been reviewed in an order\n     * @param {string} orderId \n     * @param {string} productVariantId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async checkReviewStatus(orderId: string, productVariantId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<ReviewStatusDto>> {\n        return ReviewApiFp(this.configuration).checkReviewStatus(orderId, productVariantId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Create a review for a product in a completed order\n     * @param {CreateReviewDto} body \n     * @param {string} orderId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async createReview(body: CreateReviewDto, orderId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Review>> {\n        return ReviewApiFp(this.configuration).createReview(body, orderId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get the total number of reviews\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async getReviewCount(options?: AxiosRequestConfig) : Promise<AxiosResponse<number>> {\n        return ReviewApiFp(this.configuration).getReviewCount(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all reviewable products from a completed order\n     * @param {string} orderId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async getReviewableProducts(orderId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<ReviewableOrderDto>> {\n        return ReviewApiFp(this.configuration).getReviewableProducts(orderId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all reviews by date\n     * @param {string} date \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async getReviewsByDate(date: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<Review>>> {\n        return ReviewApiFp(this.configuration).getReviewsByDate(date, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all reviews by date range\n     * @param {string} from \n     * @param {string} to \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async getReviewsByDateRange(from: string, to: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<Review>>> {\n        return ReviewApiFp(this.configuration).getReviewsByDateRange(from, to, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all reviews for a product\n     * @param {string} productId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async getReviewsByProduct(productId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<Review>>> {\n        return ReviewApiFp(this.configuration).getReviewsByProduct(productId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all reviews by rating\n     * @param {number} rating \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async getReviewsByRating(rating: number, options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<Review>>> {\n        return ReviewApiFp(this.configuration).getReviewsByRating(rating, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all reviews for a store\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async getReviewsByStore(options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<Review>>> {\n        return ReviewApiFp(this.configuration).getReviewsByStore(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all reviews by type\n     * @param {string} type \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async getReviewsByType(type: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<Review>>> {\n        return ReviewApiFp(this.configuration).getReviewsByType(type, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all reviews by a user\n     * @param {string} userId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async getReviewsByUser(userId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<Review>>> {\n        return ReviewApiFp(this.configuration).getReviewsByUser(userId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all completed orders for the current user that can be reviewed\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async getUserCompletedOrders(options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<CompletedOrderDto>>> {\n        return ReviewApiFp(this.configuration).getUserCompletedOrders(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Remove a reply from a review\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async removeReplay(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ReviewApiFp(this.configuration).removeReplay(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Remove a review\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async removeReview(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ReviewApiFp(this.configuration).removeReview(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update a reply to a review\n     * @param {UpdateReviewDto} body \n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async updateReplay(body: UpdateReviewDto, id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Review>> {\n        return ReviewApiFp(this.configuration).updateReplay(body, id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update a review\n     * @param {UpdateReviewDto} body \n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ReviewApi\n     */\n    public async updateReview(body: UpdateReviewDto, id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Review>> {\n        return ReviewApiFp(this.configuration).updateReview(body, id, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\nimport { BookAppointmentDto } from '../models';\nimport { CreateServiceFormDto } from '../models';\nimport { CreateSubmissionDto } from '../models';\nimport { ServiceAppointment } from '../models';\nimport { ServiceConsentTemplate } from '../models';\nimport { ServiceForm } from '../models';\nimport { ServiceSubmission } from '../models';\nimport { UpdateServiceFormDto } from '../models';\nimport { UpdateSubmissionDto } from '../models';\nimport { UpsertConsentTemplateDto } from '../models';\n/**\n * ServiceFormsApi - axios parameter creator\n * @export\n */\nexport const ServiceFormsApiAxiosParamCreator = function (configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Book an appointment slot (public, used by the pharmacy website)\n         * @param {BookAppointmentDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        bookAppointment: async (body: BookAppointmentDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling bookAppointment.');\n            }\n            const localVarPath = `/service-forms/appointments`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Cancel an appointment\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        cancelAppointment: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling cancelAppointment.');\n            }\n            const localVarPath = `/service-forms/appointments/{id}/cancel`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Create a service form (custom or from a catalog template)\n         * @param {CreateServiceFormDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createForm: async (body: CreateServiceFormDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling createForm.');\n            }\n            const localVarPath = `/service-forms`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Submit a service form (public, used by the pharmacy website)\n         * @param {CreateSubmissionDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createSubmission: async (body: CreateSubmissionDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling createSubmission.');\n            }\n            const localVarPath = `/service-forms/submissions`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Delete a service form\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteForm: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling deleteForm.');\n            }\n            const localVarPath = `/service-forms/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Delete a submission\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteSubmission: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling deleteSubmission.');\n            }\n            const localVarPath = `/service-forms/submissions/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary List appointments for the store (optionally for one date)\n         * @param {string} date \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAppointments: async (date: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'date' is not null or undefined\n            if (date === null || date === undefined) {\n                throw new RequiredError('date','Required parameter date was null or undefined when calling getAppointments.');\n            }\n            const localVarPath = `/service-forms/appointments`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (date !== undefined) {\n                localVarQueryParameter['date'] = date;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get the catalog of default service form templates\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getCatalog: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/service-forms/catalog`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get the store shared vaccine consent template\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getConsentTemplate: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/service-forms/consent-template`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get a single service form\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getForm: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling getForm.');\n            }\n            const localVarPath = `/service-forms/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary List service forms for the store\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getForms: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/service-forms`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary List active service forms for the storefront (optionally by category)\n         * @param {string} category \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getPublicForms: async (category: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'category' is not null or undefined\n            if (category === null || category === undefined) {\n                throw new RequiredError('category','Required parameter category was null or undefined when calling getPublicForms.');\n            }\n            const localVarPath = `/service-forms/public`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (category !== undefined) {\n                localVarQueryParameter['category'] = category;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Available booking slots for a form on a given date\n         * @param {string} id \n         * @param {string} date \n         * @param {string} duration \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSlots: async (id: string, date: string, duration: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling getSlots.');\n            }\n            // verify required parameter 'date' is not null or undefined\n            if (date === null || date === undefined) {\n                throw new RequiredError('date','Required parameter date was null or undefined when calling getSlots.');\n            }\n            // verify required parameter 'duration' is not null or undefined\n            if (duration === null || duration === undefined) {\n                throw new RequiredError('duration','Required parameter duration was null or undefined when calling getSlots.');\n            }\n            const localVarPath = `/service-forms/{id}/slots`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (date !== undefined) {\n                localVarQueryParameter['date'] = date;\n            }\n\n            if (duration !== undefined) {\n                localVarQueryParameter['duration'] = duration;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary List service form submissions for the store\n         * @param {string} serviceForm \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getSubmissions: async (serviceForm: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'serviceForm' is not null or undefined\n            if (serviceForm === null || serviceForm === undefined) {\n                throw new RequiredError('serviceForm','Required parameter serviceForm was null or undefined when calling getSubmissions.');\n            }\n            const localVarPath = `/service-forms/submissions`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            if (serviceForm !== undefined) {\n                localVarQueryParameter['serviceForm'] = serviceForm;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update a service form\n         * @param {UpdateServiceFormDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateForm: async (body: UpdateServiceFormDto, id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateForm.');\n            }\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling updateForm.');\n            }\n            const localVarPath = `/service-forms/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update a submission status / admin notes\n         * @param {UpdateSubmissionDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateSubmission: async (body: UpdateSubmissionDto, id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateSubmission.');\n            }\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling updateSubmission.');\n            }\n            const localVarPath = `/service-forms/submissions/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Create or update the store shared vaccine consent template\n         * @param {UpsertConsentTemplateDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        upsertConsentTemplate: async (body: UpsertConsentTemplateDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling upsertConsentTemplate.');\n            }\n            const localVarPath = `/service-forms/consent-template`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PUT', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n    }\n};\n\n/**\n * ServiceFormsApi - functional programming interface\n * @export\n */\nexport const ServiceFormsApiFp = function(configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Book an appointment slot (public, used by the pharmacy website)\n         * @param {BookAppointmentDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async bookAppointment(body: BookAppointmentDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ServiceAppointment>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).bookAppointment(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Cancel an appointment\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async cancelAppointment(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ServiceAppointment>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).cancelAppointment(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Create a service form (custom or from a catalog template)\n         * @param {CreateServiceFormDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createForm(body: CreateServiceFormDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ServiceForm>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).createForm(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Submit a service form (public, used by the pharmacy website)\n         * @param {CreateSubmissionDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createSubmission(body: CreateSubmissionDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ServiceSubmission>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).createSubmission(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Delete a service form\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteForm(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).deleteForm(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Delete a submission\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteSubmission(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).deleteSubmission(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary List appointments for the store (optionally for one date)\n         * @param {string} date \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAppointments(date: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<ServiceAppointment>>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).getAppointments(date, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get the catalog of default service form templates\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getCatalog(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).getCatalog(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get the store shared vaccine consent template\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getConsentTemplate(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ServiceConsentTemplate>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).getConsentTemplate(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get a single service form\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getForm(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ServiceForm>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).getForm(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary List service forms for the store\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getForms(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<ServiceForm>>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).getForms(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary List active service forms for the storefront (optionally by category)\n         * @param {string} category \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getPublicForms(category: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<ServiceForm>>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).getPublicForms(category, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Available booking slots for a form on a given date\n         * @param {string} id \n         * @param {string} date \n         * @param {string} duration \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSlots(id: string, date: string, duration: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).getSlots(id, date, duration, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary List service form submissions for the store\n         * @param {string} serviceForm \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSubmissions(serviceForm: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<ServiceSubmission>>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).getSubmissions(serviceForm, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update a service form\n         * @param {UpdateServiceFormDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateForm(body: UpdateServiceFormDto, id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ServiceForm>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).updateForm(body, id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update a submission status / admin notes\n         * @param {UpdateSubmissionDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateSubmission(body: UpdateSubmissionDto, id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ServiceSubmission>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).updateSubmission(body, id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Create or update the store shared vaccine consent template\n         * @param {UpsertConsentTemplateDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async upsertConsentTemplate(body: UpsertConsentTemplateDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<ServiceConsentTemplate>>> {\n            const localVarAxiosArgs = await ServiceFormsApiAxiosParamCreator(configuration).upsertConsentTemplate(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n    }\n};\n\n/**\n * ServiceFormsApi - factory interface\n * @export\n */\nexport const ServiceFormsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n    return {\n        /**\n         * \n         * @summary Book an appointment slot (public, used by the pharmacy website)\n         * @param {BookAppointmentDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async bookAppointment(body: BookAppointmentDto, options?: AxiosRequestConfig): Promise<AxiosResponse<ServiceAppointment>> {\n            return ServiceFormsApiFp(configuration).bookAppointment(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Cancel an appointment\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async cancelAppointment(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<ServiceAppointment>> {\n            return ServiceFormsApiFp(configuration).cancelAppointment(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Create a service form (custom or from a catalog template)\n         * @param {CreateServiceFormDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createForm(body: CreateServiceFormDto, options?: AxiosRequestConfig): Promise<AxiosResponse<ServiceForm>> {\n            return ServiceFormsApiFp(configuration).createForm(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Submit a service form (public, used by the pharmacy website)\n         * @param {CreateSubmissionDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createSubmission(body: CreateSubmissionDto, options?: AxiosRequestConfig): Promise<AxiosResponse<ServiceSubmission>> {\n            return ServiceFormsApiFp(configuration).createSubmission(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Delete a service form\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteForm(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ServiceFormsApiFp(configuration).deleteForm(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Delete a submission\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteSubmission(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ServiceFormsApiFp(configuration).deleteSubmission(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary List appointments for the store (optionally for one date)\n         * @param {string} date \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAppointments(date: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Array<ServiceAppointment>>> {\n            return ServiceFormsApiFp(configuration).getAppointments(date, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get the catalog of default service form templates\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getCatalog(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ServiceFormsApiFp(configuration).getCatalog(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get the store shared vaccine consent template\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getConsentTemplate(options?: AxiosRequestConfig): Promise<AxiosResponse<ServiceConsentTemplate>> {\n            return ServiceFormsApiFp(configuration).getConsentTemplate(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get a single service form\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getForm(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<ServiceForm>> {\n            return ServiceFormsApiFp(configuration).getForm(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary List service forms for the store\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getForms(options?: AxiosRequestConfig): Promise<AxiosResponse<Array<ServiceForm>>> {\n            return ServiceFormsApiFp(configuration).getForms(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary List active service forms for the storefront (optionally by category)\n         * @param {string} category \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getPublicForms(category: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Array<ServiceForm>>> {\n            return ServiceFormsApiFp(configuration).getPublicForms(category, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Available booking slots for a form on a given date\n         * @param {string} id \n         * @param {string} date \n         * @param {string} duration \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSlots(id: string, date: string, duration: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ServiceFormsApiFp(configuration).getSlots(id, date, duration, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary List service form submissions for the store\n         * @param {string} serviceForm \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getSubmissions(serviceForm: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Array<ServiceSubmission>>> {\n            return ServiceFormsApiFp(configuration).getSubmissions(serviceForm, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update a service form\n         * @param {UpdateServiceFormDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateForm(body: UpdateServiceFormDto, id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<ServiceForm>> {\n            return ServiceFormsApiFp(configuration).updateForm(body, id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update a submission status / admin notes\n         * @param {UpdateSubmissionDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateSubmission(body: UpdateSubmissionDto, id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<ServiceSubmission>> {\n            return ServiceFormsApiFp(configuration).updateSubmission(body, id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Create or update the store shared vaccine consent template\n         * @param {UpsertConsentTemplateDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async upsertConsentTemplate(body: UpsertConsentTemplateDto, options?: AxiosRequestConfig): Promise<AxiosResponse<ServiceConsentTemplate>> {\n            return ServiceFormsApiFp(configuration).upsertConsentTemplate(body, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n\n/**\n * ServiceFormsApi - object-oriented interface\n * @export\n * @class ServiceFormsApi\n * @extends {BaseAPI}\n */\nexport class ServiceFormsApi extends BaseAPI {\n    /**\n     * \n     * @summary Book an appointment slot (public, used by the pharmacy website)\n     * @param {BookAppointmentDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async bookAppointment(body: BookAppointmentDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<ServiceAppointment>> {\n        return ServiceFormsApiFp(this.configuration).bookAppointment(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Cancel an appointment\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async cancelAppointment(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<ServiceAppointment>> {\n        return ServiceFormsApiFp(this.configuration).cancelAppointment(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Create a service form (custom or from a catalog template)\n     * @param {CreateServiceFormDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async createForm(body: CreateServiceFormDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<ServiceForm>> {\n        return ServiceFormsApiFp(this.configuration).createForm(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Submit a service form (public, used by the pharmacy website)\n     * @param {CreateSubmissionDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async createSubmission(body: CreateSubmissionDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<ServiceSubmission>> {\n        return ServiceFormsApiFp(this.configuration).createSubmission(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Delete a service form\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async deleteForm(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ServiceFormsApiFp(this.configuration).deleteForm(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Delete a submission\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async deleteSubmission(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ServiceFormsApiFp(this.configuration).deleteSubmission(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary List appointments for the store (optionally for one date)\n     * @param {string} date \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async getAppointments(date: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<ServiceAppointment>>> {\n        return ServiceFormsApiFp(this.configuration).getAppointments(date, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get the catalog of default service form templates\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async getCatalog(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ServiceFormsApiFp(this.configuration).getCatalog(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get the store shared vaccine consent template\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async getConsentTemplate(options?: AxiosRequestConfig) : Promise<AxiosResponse<ServiceConsentTemplate>> {\n        return ServiceFormsApiFp(this.configuration).getConsentTemplate(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get a single service form\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async getForm(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<ServiceForm>> {\n        return ServiceFormsApiFp(this.configuration).getForm(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary List service forms for the store\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async getForms(options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<ServiceForm>>> {\n        return ServiceFormsApiFp(this.configuration).getForms(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary List active service forms for the storefront (optionally by category)\n     * @param {string} category \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async getPublicForms(category: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<ServiceForm>>> {\n        return ServiceFormsApiFp(this.configuration).getPublicForms(category, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Available booking slots for a form on a given date\n     * @param {string} id \n     * @param {string} date \n     * @param {string} duration \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async getSlots(id: string, date: string, duration: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ServiceFormsApiFp(this.configuration).getSlots(id, date, duration, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary List service form submissions for the store\n     * @param {string} serviceForm \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async getSubmissions(serviceForm: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<ServiceSubmission>>> {\n        return ServiceFormsApiFp(this.configuration).getSubmissions(serviceForm, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update a service form\n     * @param {UpdateServiceFormDto} body \n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async updateForm(body: UpdateServiceFormDto, id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<ServiceForm>> {\n        return ServiceFormsApiFp(this.configuration).updateForm(body, id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update a submission status / admin notes\n     * @param {UpdateSubmissionDto} body \n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async updateSubmission(body: UpdateSubmissionDto, id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<ServiceSubmission>> {\n        return ServiceFormsApiFp(this.configuration).updateSubmission(body, id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Create or update the store shared vaccine consent template\n     * @param {UpsertConsentTemplateDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ServiceFormsApi\n     */\n    public async upsertConsentTemplate(body: UpsertConsentTemplateDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<ServiceConsentTemplate>> {\n        return ServiceFormsApiFp(this.configuration).upsertConsentTemplate(body, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\nimport { CartBodyDTO } from '../models';\nimport { GuestAddressDto } from '../models';\nimport { GuestShippingRatesDto } from '../models';\nimport { Shipment } from '../models';\nimport { ShipmentWithOrder } from '../models';\nimport { UpdateManualShipmentStatusDto } from '../models';\n/**\n * ShippingApi - axios parameter creator\n * @export\n */\nexport const ShippingApiAxiosParamCreator = function (configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Get shipping rates\n         * @param {CartBodyDTO} body \n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        fetchAvailableShippingRates: async (body: CartBodyDTO, addressId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling fetchAvailableShippingRates.');\n            }\n            // verify required parameter 'addressId' is not null or undefined\n            if (addressId === null || addressId === undefined) {\n                throw new RequiredError('addressId','Required parameter addressId was null or undefined when calling fetchAvailableShippingRates.');\n            }\n            const localVarPath = `/shipping/rates/{addressId}`\n                .replace(`{${\"addressId\"}}`, encodeURIComponent(String(addressId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get shipping rates for a guest (address inline, no auth required)\n         * @param {GuestShippingRatesDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        fetchGuestShippingRates: async (body: GuestShippingRatesDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling fetchGuestShippingRates.');\n            }\n            const localVarPath = `/shipping/rates/guest`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all shipments\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllShipments: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/shipping/shipments`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all user shipments\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllUserShipments: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/shipping/user/shipments`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get order shipment\n         * @param {string} orderId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getOrderShipment: async (orderId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'orderId' is not null or undefined\n            if (orderId === null || orderId === undefined) {\n                throw new RequiredError('orderId','Required parameter orderId was null or undefined when calling getOrderShipment.');\n            }\n            const localVarPath = `/shipping/order/shipment/{orderId}`\n                .replace(`{${\"orderId\"}}`, encodeURIComponent(String(orderId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get store address\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getStoreAddress: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/shipping/store/address`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update manual shipment status (for non-Shippo deliveries only)\n         * @param {UpdateManualShipmentStatusDto} body \n         * @param {string} shipmentId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateManualShipmentStatus: async (body: UpdateManualShipmentStatusDto, shipmentId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateManualShipmentStatus.');\n            }\n            // verify required parameter 'shipmentId' is not null or undefined\n            if (shipmentId === null || shipmentId === undefined) {\n                throw new RequiredError('shipmentId','Required parameter shipmentId was null or undefined when calling updateManualShipmentStatus.');\n            }\n            const localVarPath = `/shipping/shipments/{shipmentId}/status`\n                .replace(`{${\"shipmentId\"}}`, encodeURIComponent(String(shipmentId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Validate a delivery address for a guest (no auth required)\n         * @param {GuestAddressDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        validateGuestAddress: async (body: GuestAddressDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling validateGuestAddress.');\n            }\n            const localVarPath = `/shipping/address/validate`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n    }\n};\n\n/**\n * ShippingApi - functional programming interface\n * @export\n */\nexport const ShippingApiFp = function(configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Get shipping rates\n         * @param {CartBodyDTO} body \n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async fetchAvailableShippingRates(body: CartBodyDTO, addressId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ShippingApiAxiosParamCreator(configuration).fetchAvailableShippingRates(body, addressId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get shipping rates for a guest (address inline, no auth required)\n         * @param {GuestShippingRatesDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async fetchGuestShippingRates(body: GuestShippingRatesDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ShippingApiAxiosParamCreator(configuration).fetchGuestShippingRates(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all shipments\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllShipments(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<ShipmentWithOrder>>>> {\n            const localVarAxiosArgs = await ShippingApiAxiosParamCreator(configuration).getAllShipments(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all user shipments\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllUserShipments(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<Shipment>>>> {\n            const localVarAxiosArgs = await ShippingApiAxiosParamCreator(configuration).getAllUserShipments(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get order shipment\n         * @param {string} orderId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getOrderShipment(orderId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Shipment>>> {\n            const localVarAxiosArgs = await ShippingApiAxiosParamCreator(configuration).getOrderShipment(orderId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get store address\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getStoreAddress(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<any>>> {\n            const localVarAxiosArgs = await ShippingApiAxiosParamCreator(configuration).getStoreAddress(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update manual shipment status (for non-Shippo deliveries only)\n         * @param {UpdateManualShipmentStatusDto} body \n         * @param {string} shipmentId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateManualShipmentStatus(body: UpdateManualShipmentStatusDto, shipmentId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Shipment>>> {\n            const localVarAxiosArgs = await ShippingApiAxiosParamCreator(configuration).updateManualShipmentStatus(body, shipmentId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Validate a delivery address for a guest (no auth required)\n         * @param {GuestAddressDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async validateGuestAddress(body: GuestAddressDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await ShippingApiAxiosParamCreator(configuration).validateGuestAddress(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n    }\n};\n\n/**\n * ShippingApi - factory interface\n * @export\n */\nexport const ShippingApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n    return {\n        /**\n         * \n         * @summary Get shipping rates\n         * @param {CartBodyDTO} body \n         * @param {string} addressId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async fetchAvailableShippingRates(body: CartBodyDTO, addressId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ShippingApiFp(configuration).fetchAvailableShippingRates(body, addressId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get shipping rates for a guest (address inline, no auth required)\n         * @param {GuestShippingRatesDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async fetchGuestShippingRates(body: GuestShippingRatesDto, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ShippingApiFp(configuration).fetchGuestShippingRates(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all shipments\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllShipments(options?: AxiosRequestConfig): Promise<AxiosResponse<Array<ShipmentWithOrder>>> {\n            return ShippingApiFp(configuration).getAllShipments(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all user shipments\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllUserShipments(options?: AxiosRequestConfig): Promise<AxiosResponse<Array<Shipment>>> {\n            return ShippingApiFp(configuration).getAllUserShipments(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get order shipment\n         * @param {string} orderId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getOrderShipment(orderId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Shipment>> {\n            return ShippingApiFp(configuration).getOrderShipment(orderId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get store address\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getStoreAddress(options?: AxiosRequestConfig): Promise<AxiosResponse<any>> {\n            return ShippingApiFp(configuration).getStoreAddress(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update manual shipment status (for non-Shippo deliveries only)\n         * @param {UpdateManualShipmentStatusDto} body \n         * @param {string} shipmentId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateManualShipmentStatus(body: UpdateManualShipmentStatusDto, shipmentId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Shipment>> {\n            return ShippingApiFp(configuration).updateManualShipmentStatus(body, shipmentId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Validate a delivery address for a guest (no auth required)\n         * @param {GuestAddressDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async validateGuestAddress(body: GuestAddressDto, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return ShippingApiFp(configuration).validateGuestAddress(body, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n\n/**\n * ShippingApi - object-oriented interface\n * @export\n * @class ShippingApi\n * @extends {BaseAPI}\n */\nexport class ShippingApi extends BaseAPI {\n    /**\n     * \n     * @summary Get shipping rates\n     * @param {CartBodyDTO} body \n     * @param {string} addressId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ShippingApi\n     */\n    public async fetchAvailableShippingRates(body: CartBodyDTO, addressId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ShippingApiFp(this.configuration).fetchAvailableShippingRates(body, addressId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get shipping rates for a guest (address inline, no auth required)\n     * @param {GuestShippingRatesDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ShippingApi\n     */\n    public async fetchGuestShippingRates(body: GuestShippingRatesDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ShippingApiFp(this.configuration).fetchGuestShippingRates(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all shipments\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ShippingApi\n     */\n    public async getAllShipments(options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<ShipmentWithOrder>>> {\n        return ShippingApiFp(this.configuration).getAllShipments(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all user shipments\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ShippingApi\n     */\n    public async getAllUserShipments(options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<Shipment>>> {\n        return ShippingApiFp(this.configuration).getAllUserShipments(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get order shipment\n     * @param {string} orderId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ShippingApi\n     */\n    public async getOrderShipment(orderId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Shipment>> {\n        return ShippingApiFp(this.configuration).getOrderShipment(orderId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get store address\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ShippingApi\n     */\n    public async getStoreAddress(options?: AxiosRequestConfig) : Promise<AxiosResponse<any>> {\n        return ShippingApiFp(this.configuration).getStoreAddress(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update manual shipment status (for non-Shippo deliveries only)\n     * @param {UpdateManualShipmentStatusDto} body \n     * @param {string} shipmentId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ShippingApi\n     */\n    public async updateManualShipmentStatus(body: UpdateManualShipmentStatusDto, shipmentId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Shipment>> {\n        return ShippingApiFp(this.configuration).updateManualShipmentStatus(body, shipmentId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Validate a delivery address for a guest (no auth required)\n     * @param {GuestAddressDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof ShippingApi\n     */\n    public async validateGuestAddress(body: GuestAddressDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return ShippingApiFp(this.configuration).validateGuestAddress(body, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\nimport { CreateMessageDto } from '../models';\nimport { CreateStoreDto } from '../models';\nimport { NewClientEmailDto } from '../models';\nimport { RefillRequest } from '../models';\nimport { RefillRequestDto } from '../models';\nimport { ScheduleTourEmailDto } from '../models';\nimport { StoreCapabilitiesDto } from '../models';\nimport { StoreEntity } from '../models';\nimport { StoreFinanceOverviewDto } from '../models';\nimport { TransferePatientRequest } from '../models';\nimport { TransferePatientsRequestDto } from '../models';\nimport { UpdateRefillRequestDto } from '../models';\nimport { UpdateStoreDto } from '../models';\nimport { UpdateTransferePatientsRequestDto } from '../models';\n/**\n * StoresApi - axios parameter creator\n * @export\n */\nexport const StoresApiAxiosParamCreator = function (configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Create a new store\n         * @param {CreateStoreDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        createStore: async (body: CreateStoreDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling createStore.');\n            }\n            const localVarPath = `/stores`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Delete refill request by id\n         * @param {string} requestId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteRefillRequest: async (requestId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'requestId' is not null or undefined\n            if (requestId === null || requestId === undefined) {\n                throw new RequiredError('requestId','Required parameter requestId was null or undefined when calling deleteRefillRequest.');\n            }\n            const localVarPath = `/stores/{id}/refill-requests/{requestId}`\n                .replace(`{${\"requestId\"}}`, encodeURIComponent(String(requestId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Delete store by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteStore: async (id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling deleteStore.');\n            }\n            const localVarPath = `/stores/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Delete transfere patients request by id\n         * @param {string} requestId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        deleteTransferePatientsRequest: async (requestId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'requestId' is not null or undefined\n            if (requestId === null || requestId === undefined) {\n                throw new RequiredError('requestId','Required parameter requestId was null or undefined when calling deleteTransferePatientsRequest.');\n            }\n            const localVarPath = `/stores/{id}/transfere-patients-requests/{requestId}`\n                .replace(`{${\"requestId\"}}`, encodeURIComponent(String(requestId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get all stores\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getAllStores: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/stores`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get store finance overview\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getFinanceOverview: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/stores/finance/overview`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get refill requests by store id\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getRefillRequests: async (storeId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'storeId' is not null or undefined\n            if (storeId === null || storeId === undefined) {\n                throw new RequiredError('storeId','Required parameter storeId was null or undefined when calling getRefillRequests.');\n            }\n            const localVarPath = `/stores/{storeId}/refill-requests`\n                .replace(`{${\"storeId\"}}`, encodeURIComponent(String(storeId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get store by id\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getStoreById: async (storeId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'storeId' is not null or undefined\n            if (storeId === null || storeId === undefined) {\n                throw new RequiredError('storeId','Required parameter storeId was null or undefined when calling getStoreById.');\n            }\n            const localVarPath = `/stores/{storeId}`\n                .replace(`{${\"storeId\"}}`, encodeURIComponent(String(storeId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get store capabilities (payment/delivery options available)\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getStoreCapabilities: async (storeId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'storeId' is not null or undefined\n            if (storeId === null || storeId === undefined) {\n                throw new RequiredError('storeId','Required parameter storeId was null or undefined when calling getStoreCapabilities.');\n            }\n            const localVarPath = `/stores/{storeId}/capabilities`\n                .replace(`{${\"storeId\"}}`, encodeURIComponent(String(storeId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get transfere patients requests by store id\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getTransferePatientsRequests: async (storeId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'storeId' is not null or undefined\n            if (storeId === null || storeId === undefined) {\n                throw new RequiredError('storeId','Required parameter storeId was null or undefined when calling getTransferePatientsRequests.');\n            }\n            const localVarPath = `/stores/{storeId}/transfere-patients-requests`\n                .replace(`{${\"storeId\"}}`, encodeURIComponent(String(storeId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Send contact us email and save the message\n         * @param {CreateMessageDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendContactUsEmail: async (body: CreateMessageDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling sendContactUsEmail.');\n            }\n            const localVarPath = `/stores/send-contact-us-email`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendContactUsEmailEzrirx: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/stores/send-contact-us-email-ezrirx`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendGMBookDemoEmail: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/stores/g-m-send-book-demo-email`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendGMContactUsEmail: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/stores/g-m-send-contact-us-email`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendGMJoinUsEmail: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/stores/sendGMJoinUsEmail`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendHolyFamilyEmail: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/stores/send-holy-family-email`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendMghBookingForm: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/stores/send-mgh-booking-form`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Send NJOE course application email\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendNJOECourseApplicationEmail: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/stores/send-njoe-course-application`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Send new client email\n         * @param {NewClientEmailDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendNewClientEmail: async (body: NewClientEmailDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling sendNewClientEmail.');\n            }\n            const localVarPath = `/stores/send-new-client-email`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @param {TransferePatientsRequestDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendNewPatientEmail: async (body: TransferePatientsRequestDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling sendNewPatientEmail.');\n            }\n            const localVarPath = `/stores/send-new-patient-email`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @param {RefillRequestDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendRefillEmail: async (body: RefillRequestDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling sendRefillEmail.');\n            }\n            const localVarPath = `/stores/send-refill-email`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Send schedule tour email\n         * @param {ScheduleTourEmailDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        sendScheduleTourEmail: async (body: ScheduleTourEmailDto, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling sendScheduleTourEmail.');\n            }\n            const localVarPath = `/stores/send-schedule-tour-email`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Generate Stripe Onboarding Link\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        startOnboarding: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/stores/onboarding`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update refill request by id\n         * @param {UpdateRefillRequestDto} body \n         * @param {string} requestId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateRefillRequest: async (body: UpdateRefillRequestDto, requestId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateRefillRequest.');\n            }\n            // verify required parameter 'requestId' is not null or undefined\n            if (requestId === null || requestId === undefined) {\n                throw new RequiredError('requestId','Required parameter requestId was null or undefined when calling updateRefillRequest.');\n            }\n            const localVarPath = `/stores/{id}/refill-requests/{requestId}`\n                .replace(`{${\"requestId\"}}`, encodeURIComponent(String(requestId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get store by id\n         * @param {UpdateStoreDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateStore: async (body: UpdateStoreDto, id: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateStore.');\n            }\n            // verify required parameter 'id' is not null or undefined\n            if (id === null || id === undefined) {\n                throw new RequiredError('id','Required parameter id was null or undefined when calling updateStore.');\n            }\n            const localVarPath = `/stores/{id}`\n                .replace(`{${\"id\"}}`, encodeURIComponent(String(id)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Update transfere patients request by id\n         * @param {UpdateTransferePatientsRequestDto} body \n         * @param {string} requestId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        updateTransferePatientsRequest: async (body: UpdateTransferePatientsRequestDto, requestId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'body' is not null or undefined\n            if (body === null || body === undefined) {\n                throw new RequiredError('body','Required parameter body was null or undefined when calling updateTransferePatientsRequest.');\n            }\n            // verify required parameter 'requestId' is not null or undefined\n            if (requestId === null || requestId === undefined) {\n                throw new RequiredError('requestId','Required parameter requestId was null or undefined when calling updateTransferePatientsRequest.');\n            }\n            const localVarPath = `/stores/{id}/transfere-patients-requests/{requestId}`\n                .replace(`{${\"requestId\"}}`, encodeURIComponent(String(requestId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'PATCH', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            localVarHeaderParameter['Content-Type'] = 'application/json';\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n            const needsSerialization = (typeof body !== \"string\") || (localVarRequestOptions.headers ||= {})['Content-Type'] === 'application/json';\n            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(body !== undefined ? body : {}) : (body || \"\");\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n    }\n};\n\n/**\n * StoresApi - functional programming interface\n * @export\n */\nexport const StoresApiFp = function(configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Create a new store\n         * @param {CreateStoreDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createStore(body: CreateStoreDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<StoreEntity>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).createStore(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Delete refill request by id\n         * @param {string} requestId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteRefillRequest(requestId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<RefillRequest>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).deleteRefillRequest(requestId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Delete store by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteStore(id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<StoreEntity>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).deleteStore(id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Delete transfere patients request by id\n         * @param {string} requestId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteTransferePatientsRequest(requestId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<TransferePatientRequest>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).deleteTransferePatientsRequest(requestId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get all stores\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllStores(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<StoreEntity>>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).getAllStores(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get store finance overview\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getFinanceOverview(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<StoreFinanceOverviewDto>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).getFinanceOverview(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get refill requests by store id\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getRefillRequests(storeId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<RefillRequest>>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).getRefillRequests(storeId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get store by id\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getStoreById(storeId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<StoreEntity>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).getStoreById(storeId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get store capabilities (payment/delivery options available)\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getStoreCapabilities(storeId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<StoreCapabilitiesDto>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).getStoreCapabilities(storeId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get transfere patients requests by store id\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getTransferePatientsRequests(storeId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Array<TransferePatientRequest>>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).getTransferePatientsRequests(storeId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Send contact us email and save the message\n         * @param {CreateMessageDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendContactUsEmail(body: CreateMessageDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).sendContactUsEmail(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendContactUsEmailEzrirx(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).sendContactUsEmailEzrirx(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendGMBookDemoEmail(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).sendGMBookDemoEmail(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendGMContactUsEmail(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).sendGMContactUsEmail(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendGMJoinUsEmail(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).sendGMJoinUsEmail(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendHolyFamilyEmail(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).sendHolyFamilyEmail(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendMghBookingForm(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).sendMghBookingForm(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Send NJOE course application email\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendNJOECourseApplicationEmail(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).sendNJOECourseApplicationEmail(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Send new client email\n         * @param {NewClientEmailDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendNewClientEmail(body: NewClientEmailDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).sendNewClientEmail(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @param {TransferePatientsRequestDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendNewPatientEmail(body: TransferePatientsRequestDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).sendNewPatientEmail(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @param {RefillRequestDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendRefillEmail(body: RefillRequestDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).sendRefillEmail(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Send schedule tour email\n         * @param {ScheduleTourEmailDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendScheduleTourEmail(body: ScheduleTourEmailDto, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<void>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).sendScheduleTourEmail(body, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Generate Stripe Onboarding Link\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async startOnboarding(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<any>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).startOnboarding(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update refill request by id\n         * @param {UpdateRefillRequestDto} body \n         * @param {string} requestId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateRefillRequest(body: UpdateRefillRequestDto, requestId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<RefillRequest>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).updateRefillRequest(body, requestId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get store by id\n         * @param {UpdateStoreDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateStore(body: UpdateStoreDto, id: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<StoreEntity>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).updateStore(body, id, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Update transfere patients request by id\n         * @param {UpdateTransferePatientsRequestDto} body \n         * @param {string} requestId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateTransferePatientsRequest(body: UpdateTransferePatientsRequestDto, requestId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<TransferePatientRequest>>> {\n            const localVarAxiosArgs = await StoresApiAxiosParamCreator(configuration).updateTransferePatientsRequest(body, requestId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n    }\n};\n\n/**\n * StoresApi - factory interface\n * @export\n */\nexport const StoresApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n    return {\n        /**\n         * \n         * @summary Create a new store\n         * @param {CreateStoreDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async createStore(body: CreateStoreDto, options?: AxiosRequestConfig): Promise<AxiosResponse<StoreEntity>> {\n            return StoresApiFp(configuration).createStore(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Delete refill request by id\n         * @param {string} requestId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteRefillRequest(requestId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<RefillRequest>> {\n            return StoresApiFp(configuration).deleteRefillRequest(requestId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Delete store by id\n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteStore(id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<StoreEntity>> {\n            return StoresApiFp(configuration).deleteStore(id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Delete transfere patients request by id\n         * @param {string} requestId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async deleteTransferePatientsRequest(requestId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<TransferePatientRequest>> {\n            return StoresApiFp(configuration).deleteTransferePatientsRequest(requestId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get all stores\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getAllStores(options?: AxiosRequestConfig): Promise<AxiosResponse<Array<StoreEntity>>> {\n            return StoresApiFp(configuration).getAllStores(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get store finance overview\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getFinanceOverview(options?: AxiosRequestConfig): Promise<AxiosResponse<StoreFinanceOverviewDto>> {\n            return StoresApiFp(configuration).getFinanceOverview(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get refill requests by store id\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getRefillRequests(storeId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Array<RefillRequest>>> {\n            return StoresApiFp(configuration).getRefillRequests(storeId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get store by id\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getStoreById(storeId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<StoreEntity>> {\n            return StoresApiFp(configuration).getStoreById(storeId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get store capabilities (payment/delivery options available)\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getStoreCapabilities(storeId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<StoreCapabilitiesDto>> {\n            return StoresApiFp(configuration).getStoreCapabilities(storeId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get transfere patients requests by store id\n         * @param {string} storeId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getTransferePatientsRequests(storeId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Array<TransferePatientRequest>>> {\n            return StoresApiFp(configuration).getTransferePatientsRequests(storeId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Send contact us email and save the message\n         * @param {CreateMessageDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendContactUsEmail(body: CreateMessageDto, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return StoresApiFp(configuration).sendContactUsEmail(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendContactUsEmailEzrirx(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return StoresApiFp(configuration).sendContactUsEmailEzrirx(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendGMBookDemoEmail(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return StoresApiFp(configuration).sendGMBookDemoEmail(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendGMContactUsEmail(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return StoresApiFp(configuration).sendGMContactUsEmail(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendGMJoinUsEmail(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return StoresApiFp(configuration).sendGMJoinUsEmail(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendHolyFamilyEmail(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return StoresApiFp(configuration).sendHolyFamilyEmail(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendMghBookingForm(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return StoresApiFp(configuration).sendMghBookingForm(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Send NJOE course application email\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendNJOECourseApplicationEmail(options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return StoresApiFp(configuration).sendNJOECourseApplicationEmail(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Send new client email\n         * @param {NewClientEmailDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendNewClientEmail(body: NewClientEmailDto, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return StoresApiFp(configuration).sendNewClientEmail(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @param {TransferePatientsRequestDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendNewPatientEmail(body: TransferePatientsRequestDto, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return StoresApiFp(configuration).sendNewPatientEmail(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @param {RefillRequestDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendRefillEmail(body: RefillRequestDto, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return StoresApiFp(configuration).sendRefillEmail(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Send schedule tour email\n         * @param {ScheduleTourEmailDto} body \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async sendScheduleTourEmail(body: ScheduleTourEmailDto, options?: AxiosRequestConfig): Promise<AxiosResponse<void>> {\n            return StoresApiFp(configuration).sendScheduleTourEmail(body, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Generate Stripe Onboarding Link\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async startOnboarding(options?: AxiosRequestConfig): Promise<AxiosResponse<any>> {\n            return StoresApiFp(configuration).startOnboarding(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update refill request by id\n         * @param {UpdateRefillRequestDto} body \n         * @param {string} requestId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateRefillRequest(body: UpdateRefillRequestDto, requestId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<RefillRequest>> {\n            return StoresApiFp(configuration).updateRefillRequest(body, requestId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get store by id\n         * @param {UpdateStoreDto} body \n         * @param {string} id \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateStore(body: UpdateStoreDto, id: string, options?: AxiosRequestConfig): Promise<AxiosResponse<StoreEntity>> {\n            return StoresApiFp(configuration).updateStore(body, id, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Update transfere patients request by id\n         * @param {UpdateTransferePatientsRequestDto} body \n         * @param {string} requestId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async updateTransferePatientsRequest(body: UpdateTransferePatientsRequestDto, requestId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<TransferePatientRequest>> {\n            return StoresApiFp(configuration).updateTransferePatientsRequest(body, requestId, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n\n/**\n * StoresApi - object-oriented interface\n * @export\n * @class StoresApi\n * @extends {BaseAPI}\n */\nexport class StoresApi extends BaseAPI {\n    /**\n     * \n     * @summary Create a new store\n     * @param {CreateStoreDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async createStore(body: CreateStoreDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<StoreEntity>> {\n        return StoresApiFp(this.configuration).createStore(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Delete refill request by id\n     * @param {string} requestId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async deleteRefillRequest(requestId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<RefillRequest>> {\n        return StoresApiFp(this.configuration).deleteRefillRequest(requestId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Delete store by id\n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async deleteStore(id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<StoreEntity>> {\n        return StoresApiFp(this.configuration).deleteStore(id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Delete transfere patients request by id\n     * @param {string} requestId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async deleteTransferePatientsRequest(requestId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<TransferePatientRequest>> {\n        return StoresApiFp(this.configuration).deleteTransferePatientsRequest(requestId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get all stores\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async getAllStores(options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<StoreEntity>>> {\n        return StoresApiFp(this.configuration).getAllStores(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get store finance overview\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async getFinanceOverview(options?: AxiosRequestConfig) : Promise<AxiosResponse<StoreFinanceOverviewDto>> {\n        return StoresApiFp(this.configuration).getFinanceOverview(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get refill requests by store id\n     * @param {string} storeId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async getRefillRequests(storeId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<RefillRequest>>> {\n        return StoresApiFp(this.configuration).getRefillRequests(storeId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get store by id\n     * @param {string} storeId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async getStoreById(storeId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<StoreEntity>> {\n        return StoresApiFp(this.configuration).getStoreById(storeId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get store capabilities (payment/delivery options available)\n     * @param {string} storeId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async getStoreCapabilities(storeId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<StoreCapabilitiesDto>> {\n        return StoresApiFp(this.configuration).getStoreCapabilities(storeId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get transfere patients requests by store id\n     * @param {string} storeId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async getTransferePatientsRequests(storeId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Array<TransferePatientRequest>>> {\n        return StoresApiFp(this.configuration).getTransferePatientsRequests(storeId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Send contact us email and save the message\n     * @param {CreateMessageDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async sendContactUsEmail(body: CreateMessageDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return StoresApiFp(this.configuration).sendContactUsEmail(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async sendContactUsEmailEzrirx(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return StoresApiFp(this.configuration).sendContactUsEmailEzrirx(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async sendGMBookDemoEmail(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return StoresApiFp(this.configuration).sendGMBookDemoEmail(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async sendGMContactUsEmail(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return StoresApiFp(this.configuration).sendGMContactUsEmail(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async sendGMJoinUsEmail(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return StoresApiFp(this.configuration).sendGMJoinUsEmail(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async sendHolyFamilyEmail(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return StoresApiFp(this.configuration).sendHolyFamilyEmail(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async sendMghBookingForm(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return StoresApiFp(this.configuration).sendMghBookingForm(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Send NJOE course application email\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async sendNJOECourseApplicationEmail(options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return StoresApiFp(this.configuration).sendNJOECourseApplicationEmail(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Send new client email\n     * @param {NewClientEmailDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async sendNewClientEmail(body: NewClientEmailDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return StoresApiFp(this.configuration).sendNewClientEmail(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @param {TransferePatientsRequestDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async sendNewPatientEmail(body: TransferePatientsRequestDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return StoresApiFp(this.configuration).sendNewPatientEmail(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @param {RefillRequestDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async sendRefillEmail(body: RefillRequestDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return StoresApiFp(this.configuration).sendRefillEmail(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Send schedule tour email\n     * @param {ScheduleTourEmailDto} body \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async sendScheduleTourEmail(body: ScheduleTourEmailDto, options?: AxiosRequestConfig) : Promise<AxiosResponse<void>> {\n        return StoresApiFp(this.configuration).sendScheduleTourEmail(body, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Generate Stripe Onboarding Link\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async startOnboarding(options?: AxiosRequestConfig) : Promise<AxiosResponse<any>> {\n        return StoresApiFp(this.configuration).startOnboarding(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update refill request by id\n     * @param {UpdateRefillRequestDto} body \n     * @param {string} requestId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async updateRefillRequest(body: UpdateRefillRequestDto, requestId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<RefillRequest>> {\n        return StoresApiFp(this.configuration).updateRefillRequest(body, requestId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get store by id\n     * @param {UpdateStoreDto} body \n     * @param {string} id \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async updateStore(body: UpdateStoreDto, id: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<StoreEntity>> {\n        return StoresApiFp(this.configuration).updateStore(body, id, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Update transfere patients request by id\n     * @param {UpdateTransferePatientsRequestDto} body \n     * @param {string} requestId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof StoresApi\n     */\n    public async updateTransferePatientsRequest(body: UpdateTransferePatientsRequestDto, requestId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<TransferePatientRequest>> {\n        return StoresApiFp(this.configuration).updateTransferePatientsRequest(body, requestId, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport globalAxios, { AxiosResponse, AxiosInstance, AxiosRequestConfig } from 'axios';\nimport { Configuration } from '../configuration';\n// Some imports not used depending on template conditions\n// @ts-ignore\nimport { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';\nimport { Wishlist } from '../models';\n/**\n * WishlistApi - axios parameter creator\n * @export\n */\nexport const WishlistApiAxiosParamCreator = function (configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Add product to wishlist\n         * @param {string} productId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        addToWishlist: async (productId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'productId' is not null or undefined\n            if (productId === null || productId === undefined) {\n                throw new RequiredError('productId','Required parameter productId was null or undefined when calling addToWishlist.');\n            }\n            const localVarPath = `/wishlist/add/{productId}`\n                .replace(`{${\"productId\"}}`, encodeURIComponent(String(productId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'POST', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Clear wishlist\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        clearWishlist: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/wishlist/clear`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get user wishlist\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getWishlist: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/wishlist`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Get wishlist item count\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        getWishlistItemCount: async (options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            const localVarPath = `/wishlist/count`;\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'GET', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n        /**\n         * \n         * @summary Remove product from wishlist\n         * @param {string} productId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        removeFromWishlist: async (productId: string, options: AxiosRequestConfig = {}): Promise<RequestArgs> => {\n            // verify required parameter 'productId' is not null or undefined\n            if (productId === null || productId === undefined) {\n                throw new RequiredError('productId','Required parameter productId was null or undefined when calling removeFromWishlist.');\n            }\n            const localVarPath = `/wishlist/remove/{productId}`\n                .replace(`{${\"productId\"}}`, encodeURIComponent(String(productId)));\n            // use dummy base URL string because the URL constructor only accepts absolute URLs.\n            const localVarUrlObj = new URL(localVarPath, 'https://example.com');\n            let baseOptions;\n            if (configuration) {\n                baseOptions = configuration.baseOptions;\n            }\n            const localVarRequestOptions :AxiosRequestConfig = { method: 'DELETE', ...baseOptions, ...options};\n            const localVarHeaderParameter = {} as any;\n            const localVarQueryParameter = {} as any;\n\n            // authentication bearer required\n            // http bearer authentication required\n            if (configuration && configuration.accessToken) {\n                const accessToken = typeof configuration.accessToken === 'function'\n                    ? await configuration.accessToken()\n                    : await configuration.accessToken;\n                localVarHeaderParameter[\"Authorization\"] = \"Bearer \" + accessToken;\n            }\n\n            // authentication x-store-key required\n            if (configuration && configuration.apiKey) {\n                const localVarApiKeyValue = typeof configuration.apiKey === 'function'\n                    ? await configuration.apiKey(\"x-store-key\")\n                    : await configuration.apiKey;\n                localVarHeaderParameter[\"x-store-key\"] = localVarApiKeyValue;\n            }\n\n            const query = new URLSearchParams(localVarUrlObj.search);\n            for (const key in localVarQueryParameter) {\n                query.set(key, localVarQueryParameter[key]);\n            }\n            for (const key in options.params) {\n                query.set(key, options.params[key]);\n            }\n            localVarUrlObj.search = (new URLSearchParams(query)).toString();\n            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};\n            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};\n\n            return {\n                url: localVarUrlObj.pathname + localVarUrlObj.search + localVarUrlObj.hash,\n                options: localVarRequestOptions,\n            };\n        },\n    }\n};\n\n/**\n * WishlistApi - functional programming interface\n * @export\n */\nexport const WishlistApiFp = function(configuration?: Configuration) {\n    return {\n        /**\n         * \n         * @summary Add product to wishlist\n         * @param {string} productId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async addToWishlist(productId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Wishlist>>> {\n            const localVarAxiosArgs = await WishlistApiAxiosParamCreator(configuration).addToWishlist(productId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Clear wishlist\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async clearWishlist(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Wishlist>>> {\n            const localVarAxiosArgs = await WishlistApiAxiosParamCreator(configuration).clearWishlist(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get user wishlist\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getWishlist(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Wishlist>>> {\n            const localVarAxiosArgs = await WishlistApiAxiosParamCreator(configuration).getWishlist(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Get wishlist item count\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getWishlistItemCount(options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<number>>> {\n            const localVarAxiosArgs = await WishlistApiAxiosParamCreator(configuration).getWishlistItemCount(options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n        /**\n         * \n         * @summary Remove product from wishlist\n         * @param {string} productId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async removeFromWishlist(productId: string, options?: AxiosRequestConfig): Promise<(axios?: AxiosInstance, basePath?: string) => Promise<AxiosResponse<Wishlist>>> {\n            const localVarAxiosArgs = await WishlistApiAxiosParamCreator(configuration).removeFromWishlist(productId, options);\n            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {\n                const axiosRequestArgs :AxiosRequestConfig = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};\n                return axios.request(axiosRequestArgs);\n            };\n        },\n    }\n};\n\n/**\n * WishlistApi - factory interface\n * @export\n */\nexport const WishlistApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {\n    return {\n        /**\n         * \n         * @summary Add product to wishlist\n         * @param {string} productId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async addToWishlist(productId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Wishlist>> {\n            return WishlistApiFp(configuration).addToWishlist(productId, options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Clear wishlist\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async clearWishlist(options?: AxiosRequestConfig): Promise<AxiosResponse<Wishlist>> {\n            return WishlistApiFp(configuration).clearWishlist(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get user wishlist\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getWishlist(options?: AxiosRequestConfig): Promise<AxiosResponse<Wishlist>> {\n            return WishlistApiFp(configuration).getWishlist(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Get wishlist item count\n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async getWishlistItemCount(options?: AxiosRequestConfig): Promise<AxiosResponse<number>> {\n            return WishlistApiFp(configuration).getWishlistItemCount(options).then((request) => request(axios, basePath));\n        },\n        /**\n         * \n         * @summary Remove product from wishlist\n         * @param {string} productId \n         * @param {*} [options] Override http request option.\n         * @throws {RequiredError}\n         */\n        async removeFromWishlist(productId: string, options?: AxiosRequestConfig): Promise<AxiosResponse<Wishlist>> {\n            return WishlistApiFp(configuration).removeFromWishlist(productId, options).then((request) => request(axios, basePath));\n        },\n    };\n};\n\n/**\n * WishlistApi - object-oriented interface\n * @export\n * @class WishlistApi\n * @extends {BaseAPI}\n */\nexport class WishlistApi extends BaseAPI {\n    /**\n     * \n     * @summary Add product to wishlist\n     * @param {string} productId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof WishlistApi\n     */\n    public async addToWishlist(productId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Wishlist>> {\n        return WishlistApiFp(this.configuration).addToWishlist(productId, options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Clear wishlist\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof WishlistApi\n     */\n    public async clearWishlist(options?: AxiosRequestConfig) : Promise<AxiosResponse<Wishlist>> {\n        return WishlistApiFp(this.configuration).clearWishlist(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get user wishlist\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof WishlistApi\n     */\n    public async getWishlist(options?: AxiosRequestConfig) : Promise<AxiosResponse<Wishlist>> {\n        return WishlistApiFp(this.configuration).getWishlist(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Get wishlist item count\n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof WishlistApi\n     */\n    public async getWishlistItemCount(options?: AxiosRequestConfig) : Promise<AxiosResponse<number>> {\n        return WishlistApiFp(this.configuration).getWishlistItemCount(options).then((request) => request(this.axios, this.basePath));\n    }\n    /**\n     * \n     * @summary Remove product from wishlist\n     * @param {string} productId \n     * @param {*} [options] Override http request option.\n     * @throws {RequiredError}\n     * @memberof WishlistApi\n     */\n    public async removeFromWishlist(productId: string, options?: AxiosRequestConfig) : Promise<AxiosResponse<Wishlist>> {\n        return WishlistApiFp(this.configuration).removeFromWishlist(productId, options).then((request) => request(this.axios, this.basePath));\n    }\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nexport * from \"./api\";\nexport * from \"./configuration\";\nexport * from \"./models\";\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface Address\n */\nexport interface Address {\n  _id?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof Address\n     */\n    createdAt: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof Address\n     */\n    updatedAt: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    id: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    user: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    store: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    name: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    phone: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    email: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    street1: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    street2: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    street3: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    streetNo: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    city: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    state: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    zip: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    country: string;\n    /**\n     * \n     * @type {boolean}\n     * @memberof Address\n     */\n    isDefault: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof Address\n     */\n    isResidential: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof Address\n     */\n    addressType: AddressAddressTypeEnum;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum AddressAddressTypeEnum {\n    Billing = 'Billing',\n    Shipping = 'Shipping',\n    Both = 'Both'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface AddressCreatedRequest\n */\nexport interface AddressCreatedRequest {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof AddressCreatedRequest\n     */\n    name?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof AddressCreatedRequest\n     */\n    phone?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof AddressCreatedRequest\n     */\n    email?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof AddressCreatedRequest\n     */\n    street1?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof AddressCreatedRequest\n     */\n    street2?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof AddressCreatedRequest\n     */\n    street3?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof AddressCreatedRequest\n     */\n    streetNo?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof AddressCreatedRequest\n     */\n    city?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof AddressCreatedRequest\n     */\n    state?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof AddressCreatedRequest\n     */\n    zip?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof AddressCreatedRequest\n     */\n    country?: string;\n    /**\n     * \n     * @type {boolean}\n     * @memberof AddressCreatedRequest\n     */\n    isDefault?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof AddressCreatedRequest\n     */\n    isResidential?: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof AddressCreatedRequest\n     */\n    addressType?: AddressCreatedRequestAddressTypeEnum;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum AddressCreatedRequestAddressTypeEnum {\n    Billing = 'Billing',\n    Shipping = 'Shipping',\n    Both = 'Both'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface BulkChannelToggleDto\n */\nexport interface BulkChannelToggleDto {\n  _id?: string;\n    /**\n     * Channel to toggle: email, push, or inApp\n     * @type {string}\n     * @memberof BulkChannelToggleDto\n     */\n    channel: string;\n    /**\n     * Enable or disable this channel for all notification types\n     * @type {boolean}\n     * @memberof BulkChannelToggleDto\n     */\n    enabled: boolean;\n    /**\n     * Optional category filter to only toggle specific notification categories\n     * @type {string}\n     * @memberof BulkChannelToggleDto\n     */\n    category?: BulkChannelToggleDtoCategoryEnum;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum BulkChannelToggleDtoCategoryEnum {\n    Transactional = 'transactional',\n    Marketing = 'marketing',\n    Security = 'security',\n    Operational = 'operational',\n    Financial = 'financial'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface ContactUs\n */\nexport interface ContactUs {\n  _id?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof ContactUs\n     */\n    createdAt: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof ContactUs\n     */\n    updatedAt: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof ContactUs\n     */\n    id: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ContactUs\n     */\n    name: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ContactUs\n     */\n    email: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ContactUs\n     */\n    subject: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ContactUs\n     */\n    message: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ContactUs\n     */\n    storeId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ContactUs\n     */\n    phoneNumber: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ContactUs\n     */\n    adminNotes: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ContactUs\n     */\n    status: ContactUsStatusEnum;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ContactUsStatusEnum {\n    Pending = 'Pending',\n    Read = 'Read',\n    Resolved = 'Resolved',\n    Archived = 'Archived'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface CreateAddressDto\n */\nexport interface CreateAddressDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateAddressDto\n     */\n    name?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateAddressDto\n     */\n    phone?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateAddressDto\n     */\n    email?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateAddressDto\n     */\n    street1?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateAddressDto\n     */\n    street2?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateAddressDto\n     */\n    street3?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateAddressDto\n     */\n    streetNo?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateAddressDto\n     */\n    city?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateAddressDto\n     */\n    state?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateAddressDto\n     */\n    zip?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateAddressDto\n     */\n    country?: string;\n    /**\n     * \n     * @type {boolean}\n     * @memberof CreateAddressDto\n     */\n    isDefault?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof CreateAddressDto\n     */\n    isResidential?: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateAddressDto\n     */\n    addressType?: CreateAddressDtoAddressTypeEnum;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum CreateAddressDtoAddressTypeEnum {\n    Billing = 'Billing',\n    Shipping = 'Shipping',\n    Both = 'Both'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface CreateDiscountDto\n */\nexport interface CreateDiscountDto {\n  _id?: string;\n    /**\n     * Display name for the discount\n     * @type {string}\n     * @memberof CreateDiscountDto\n     */\n    name?: string;\n    /**\n     * Optional description for internal use\n     * @type {string}\n     * @memberof CreateDiscountDto\n     */\n    description?: string;\n    /**\n     * ITEM_DISCOUNT: Shows on products automatically. COUPON_CODE: Requires code at checkout\n     * @type {string}\n     * @memberof CreateDiscountDto\n     */\n    type?: CreateDiscountDtoTypeEnum;\n    /**\n     * PERCENTAGE or FIXED_AMOUNT\n     * @type {string}\n     * @memberof CreateDiscountDto\n     */\n    valueType?: CreateDiscountDtoValueTypeEnum;\n    /**\n     * The discount value (percentage 1-100 or fixed dollar amount)\n     * @type {number}\n     * @memberof CreateDiscountDto\n     */\n    value?: number;\n    /**\n     * Maximum discount amount for percentage discounts (optional, mainly for COUPON_CODE)\n     * @type {number}\n     * @memberof CreateDiscountDto\n     */\n    cappedAt?: number;\n    /**\n     * Coupon code (required for COUPON_CODE type)\n     * @type {string}\n     * @memberof CreateDiscountDto\n     */\n    code?: string;\n    /**\n     * When the discount becomes active\n     * @type {Date}\n     * @memberof CreateDiscountDto\n     */\n    startsAt?: Date;\n    /**\n     * When the discount expires\n     * @type {Date}\n     * @memberof CreateDiscountDto\n     */\n    expiresAt?: Date;\n    /**\n     * Current lifecycle state\n     * @type {string}\n     * @memberof CreateDiscountDto\n     */\n    state?: CreateDiscountDtoStateEnum;\n    /**\n     * Quick toggle to enable/disable the discount\n     * @type {boolean}\n     * @memberof CreateDiscountDto\n     */\n    isActive?: boolean;\n    /**\n     * Products to apply discount to (all their variants will be discounted)\n     * @type {Array<string>}\n     * @memberof CreateDiscountDto\n     */\n    productsEligible?: Array<string>;\n    /**\n     * Specific variants to apply discount to\n     * @type {Array<string>}\n     * @memberof CreateDiscountDto\n     */\n    variantsEligible?: Array<string>;\n    /**\n     * Maximum total times this discount can be used (optional)\n     * @type {number}\n     * @memberof CreateDiscountDto\n     */\n    maxUses?: number;\n    /**\n     * Maximum times a single user can use this discount (optional)\n     * @type {number}\n     * @memberof CreateDiscountDto\n     */\n    maxUsesPerUser?: number;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum CreateDiscountDtoTypeEnum {\n    ITEMDISCOUNT = 'ITEM_DISCOUNT',\n    COUPONCODE = 'COUPON_CODE'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum CreateDiscountDtoValueTypeEnum {\n    PERCENTAGE = 'PERCENTAGE',\n    FIXEDAMOUNT = 'FIXED_AMOUNT'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum CreateDiscountDtoStateEnum {\n    ACTIVE = 'ACTIVE',\n    INACTIVE = 'INACTIVE',\n    EXPIRED = 'EXPIRED',\n    SCHEDULED = 'SCHEDULED'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface CreateMessageDto\n */\nexport interface CreateMessageDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateMessageDto\n     */\n    name: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateMessageDto\n     */\n    email: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateMessageDto\n     */\n    subject?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateMessageDto\n     */\n    message: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateMessageDto\n     */\n    phoneNumber?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateMessageDto\n     */\n    adminNotes?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateMessageDto\n     */\n    status?: CreateMessageDtoStatusEnum;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum CreateMessageDtoStatusEnum {\n    Pending = 'Pending',\n    Read = 'Read',\n    Resolved = 'Resolved',\n    Archived = 'Archived'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface CreateProductBankItemDto\n */\nexport interface CreateProductBankItemDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateProductBankItemDto\n     */\n    name: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateProductBankItemDto\n     */\n    brand?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateProductBankItemDto\n     */\n    manufacturer?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateProductBankItemDto\n     */\n    description?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateProductBankItemDto\n     */\n    upc?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateProductBankItemDto\n     */\n    ndc?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateProductBankItemDto\n     */\n    drugType: CreateProductBankItemDtoDrugTypeEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateProductBankItemDto\n     */\n    dosageForm?: CreateProductBankItemDtoDosageFormEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateProductBankItemDto\n     */\n    strength?: string;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof CreateProductBankItemDto\n     */\n    activeIngredients?: Array<string>;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateProductBankItemDto\n     */\n    category?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateProductBankItemDto\n     */\n    subCategory?: string;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof CreateProductBankItemDto\n     */\n    tags?: Array<string>;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof CreateProductBankItemDto\n     */\n    images?: Array<string>;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum CreateProductBankItemDtoDrugTypeEnum {\n    OTC = 'OTC',\n    RX = 'RX',\n    SUPPLEMENT = 'SUPPLEMENT',\n    GENERAL = 'GENERAL'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum CreateProductBankItemDtoDosageFormEnum {\n    TABLET = 'TABLET',\n    CAPSULE = 'CAPSULE',\n    LIQUID = 'LIQUID',\n    CREAM = 'CREAM',\n    GEL = 'GEL',\n    SPRAY = 'SPRAY',\n    PATCH = 'PATCH',\n    DROPS = 'DROPS',\n    POWDER = 'POWDER',\n    CHEWABLE = 'CHEWABLE',\n    OTHER = 'OTHER'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { AppointmentSettingsDto } from './appointment-settings-dto';\nimport { ServiceFormFieldDto } from './service-form-field-dto';\n/**\n * \n * @export\n * @interface CreateServiceFormDto\n */\nexport interface CreateServiceFormDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateServiceFormDto\n     */\n    name: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateServiceFormDto\n     */\n    description?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateServiceFormDto\n     */\n    category: CreateServiceFormDtoCategoryEnum;\n    /**\n     * \n     * @type {number}\n     * @memberof CreateServiceFormDto\n     */\n    price?: number;\n    /**\n     * \n     * @type {number}\n     * @memberof CreateServiceFormDto\n     */\n    duration?: number;\n    /**\n     * \n     * @type {Array<ServiceFormFieldDto>}\n     * @memberof CreateServiceFormDto\n     */\n    fields?: Array<ServiceFormFieldDto>;\n    /**\n     * \n     * @type {AppointmentSettingsDto}\n     * @memberof CreateServiceFormDto\n     */\n    appointment?: AppointmentSettingsDto;\n    /**\n     * \n     * @type {boolean}\n     * @memberof CreateServiceFormDto\n     */\n    isActive?: boolean;\n    /**\n     * When true, the questionnaire comes from the store shared consent template (vaccines). Set false for a custom form with its own fields.\n     * @type {boolean}\n     * @memberof CreateServiceFormDto\n     */\n    usesSharedForm?: boolean;\n    /**\n     * Create from a catalog template; missing name/fields are copied from it\n     * @type {string}\n     * @memberof CreateServiceFormDto\n     */\n    catalogKey?: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum CreateServiceFormDtoCategoryEnum {\n    Vaccine = 'vaccine',\n    Test = 'test',\n    Consultation = 'consultation',\n    Treatment = 'treatment',\n    Other = 'other'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { CreateAddressDto } from './create-address-dto';\n/**\n * \n * @export\n * @interface CreateUserDto\n */\nexport interface CreateUserDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateUserDto\n     */\n    firstname?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateUserDto\n     */\n    lastname?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateUserDto\n     */\n    email?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateUserDto\n     */\n    role?: CreateUserDtoRoleEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateUserDto\n     */\n    phoneNumber?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof CreateUserDto\n     */\n    dateOfBirth?: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof CreateUserDto\n     */\n    customerType?: CreateUserDtoCustomerTypeEnum;\n    /**\n     * \n     * @type {Array<CreateAddressDto>}\n     * @memberof CreateUserDto\n     */\n    addresses: Array<CreateAddressDto>;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum CreateUserDtoRoleEnum {\n    SuperAdmin = 'SuperAdmin',\n    Admin = 'Admin',\n    User = 'User'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum CreateUserDtoCustomerTypeEnum {\n    B2B = 'B2B',\n    Regular = 'Regular'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface DayAvailability\n */\nexport interface DayAvailability {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof DayAvailability\n     */\n    day: DayAvailabilityDayEnum;\n    /**\n     * \n     * @type {boolean}\n     * @memberof DayAvailability\n     */\n    enabled: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof DayAvailability\n     */\n    start: string;\n    /**\n     * \n     * @type {string}\n     * @memberof DayAvailability\n     */\n    end: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum DayAvailabilityDayEnum {\n    Monday = 'monday',\n    Tuesday = 'tuesday',\n    Wednesday = 'wednesday',\n    Thursday = 'thursday',\n    Friday = 'friday',\n    Saturday = 'saturday',\n    Sunday = 'sunday'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface DayAvailabilityDto\n */\nexport interface DayAvailabilityDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof DayAvailabilityDto\n     */\n    day: DayAvailabilityDtoDayEnum;\n    /**\n     * \n     * @type {boolean}\n     * @memberof DayAvailabilityDto\n     */\n    enabled: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof DayAvailabilityDto\n     */\n    start: string;\n    /**\n     * \n     * @type {string}\n     * @memberof DayAvailabilityDto\n     */\n    end: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum DayAvailabilityDtoDayEnum {\n    Monday = 'monday',\n    Tuesday = 'tuesday',\n    Wednesday = 'wednesday',\n    Thursday = 'thursday',\n    Friday = 'friday',\n    Saturday = 'saturday',\n    Sunday = 'sunday'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { UsedBy } from './used-by';\n/**\n * \n * @export\n * @interface Discount\n */\nexport interface Discount {\n  _id?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof Discount\n     */\n    createdAt: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof Discount\n     */\n    updatedAt: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof Discount\n     */\n    id: string;\n    /**\n     * Display name for the discount\n     * @type {string}\n     * @memberof Discount\n     */\n    name: string;\n    /**\n     * Optional description for internal use\n     * @type {string}\n     * @memberof Discount\n     */\n    description: string;\n    /**\n     * ITEM_DISCOUNT: Shows on products automatically. COUPON_CODE: Requires code at checkout\n     * @type {string}\n     * @memberof Discount\n     */\n    type: DiscountTypeEnum;\n    /**\n     * PERCENTAGE or FIXED_AMOUNT\n     * @type {string}\n     * @memberof Discount\n     */\n    valueType: DiscountValueTypeEnum;\n    /**\n     * The discount value (percentage 1-100 or fixed dollar amount)\n     * @type {number}\n     * @memberof Discount\n     */\n    value: number;\n    /**\n     * Maximum discount amount for percentage discounts (optional, mainly for COUPON_CODE)\n     * @type {number}\n     * @memberof Discount\n     */\n    cappedAt: number;\n    /**\n     * Coupon code (required for COUPON_CODE type)\n     * @type {string}\n     * @memberof Discount\n     */\n    code: string;\n    /**\n     * When the discount becomes active\n     * @type {Date}\n     * @memberof Discount\n     */\n    startsAt: Date;\n    /**\n     * When the discount expires\n     * @type {Date}\n     * @memberof Discount\n     */\n    expiresAt: Date;\n    /**\n     * Current lifecycle state\n     * @type {string}\n     * @memberof Discount\n     */\n    state: DiscountStateEnum;\n    /**\n     * Quick toggle to enable/disable the discount\n     * @type {boolean}\n     * @memberof Discount\n     */\n    isActive: boolean;\n    /**\n     * Products to apply discount to (all their variants will be discounted)\n     * @type {Array<string>}\n     * @memberof Discount\n     */\n    productsEligible: Array<string>;\n    /**\n     * Specific variants to apply discount to\n     * @type {Array<string>}\n     * @memberof Discount\n     */\n    variantsEligible: Array<string>;\n    /**\n     * Maximum total times this discount can be used (optional)\n     * @type {number}\n     * @memberof Discount\n     */\n    maxUses: number;\n    /**\n     * Maximum times a single user can use this discount (optional)\n     * @type {number}\n     * @memberof Discount\n     */\n    maxUsesPerUser: number;\n    /**\n     * Current total usage count\n     * @type {number}\n     * @memberof Discount\n     */\n    numberOfUses: number;\n    /**\n     * Usage history\n     * @type {Array<UsedBy>}\n     * @memberof Discount\n     */\n    usedBy: Array<UsedBy>;\n    /**\n     * \n     * @type {string}\n     * @memberof Discount\n     */\n    storeId: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum DiscountTypeEnum {\n    ITEMDISCOUNT = 'ITEM_DISCOUNT',\n    COUPONCODE = 'COUPON_CODE'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum DiscountValueTypeEnum {\n    PERCENTAGE = 'PERCENTAGE',\n    FIXEDAMOUNT = 'FIXED_AMOUNT'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum DiscountStateEnum {\n    ACTIVE = 'ACTIVE',\n    INACTIVE = 'INACTIVE',\n    EXPIRED = 'EXPIRED',\n    SCHEDULED = 'SCHEDULED'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { CartItem } from './cart-item';\nimport { CustomProductDto } from './custom-product-dto';\nimport { ManualDiscountDto } from './manual-discount-dto';\nimport { ManualShippingDto } from './manual-shipping-dto';\n/**\n * \n * @export\n * @interface GuestCheckoutDto\n */\nexport interface GuestCheckoutDto {\n  _id?: string;\n    /**\n     * \n     * @type {Array<CartItem>}\n     * @memberof GuestCheckoutDto\n     */\n    items?: Array<CartItem>;\n    /**\n     * \n     * @type {string}\n     * @memberof GuestCheckoutDto\n     */\n    notes?: string;\n    /**\n     * \n     * @type {ManualDiscountDto}\n     * @memberof GuestCheckoutDto\n     */\n    manualDiscount: ManualDiscountDto;\n    /**\n     * \n     * @type {string}\n     * @memberof GuestCheckoutDto\n     */\n    discountId: string;\n    /**\n     * \n     * @type {ManualShippingDto}\n     * @memberof GuestCheckoutDto\n     */\n    manualShipping: ManualShippingDto;\n    /**\n     * \n     * @type {Date}\n     * @memberof GuestCheckoutDto\n     */\n    paymentDueDate: Date;\n    /**\n     * \n     * @type {boolean}\n     * @memberof GuestCheckoutDto\n     */\n    chargeTax: boolean;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof GuestCheckoutDto\n     */\n    orderRemindingDates: Array<string>;\n    /**\n     * \n     * @type {Array<CustomProductDto>}\n     * @memberof GuestCheckoutDto\n     */\n    customProducts?: Array<CustomProductDto>;\n    /**\n     * \n     * @type {string}\n     * @memberof GuestCheckoutDto\n     */\n    paymentMethod: GuestCheckoutDtoPaymentMethodEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof GuestCheckoutDto\n     */\n    orderStatus: GuestCheckoutDtoOrderStatusEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof GuestCheckoutDto\n     */\n    paymentStatus?: GuestCheckoutDtoPaymentStatusEnum;\n    /**\n     * If true, skips email verification (admin creating order on behalf of user)\n     * @type {boolean}\n     * @memberof GuestCheckoutDto\n     */\n    isManualOrder?: boolean;\n    /**\n     * Stripe PaymentMethod ID collected from the storefront card step. When provided, the order is charged immediately instead of sending an invoice.\n     * @type {string}\n     * @memberof GuestCheckoutDto\n     */\n    paymentMethodId?: string;\n    /**\n     * Send order confirmation email to the customer. Defaults to true.\n     * @type {boolean}\n     * @memberof GuestCheckoutDto\n     */\n    sendConfirmationEmail?: boolean;\n    /**\n     * Send invoice email to the customer when a Stripe invoice is created. Defaults to true.\n     * @type {boolean}\n     * @memberof GuestCheckoutDto\n     */\n    sendInvoiceEmail?: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof GuestCheckoutDto\n     */\n    deliveryMethod?: GuestCheckoutDtoDeliveryMethodEnum;\n    /**\n     * User address ID for custom delivery orders\n     * @type {string}\n     * @memberof GuestCheckoutDto\n     */\n    userAddressId?: string;\n    /**\n     * Inline delivery address for custom delivery — used when the user has no saved address yet (e.g. guest checkout price preview)\n     * @type {any}\n     * @memberof GuestCheckoutDto\n     */\n    deliveryAddress?: any;\n    /**\n     * \n     * @type {string}\n     * @memberof GuestCheckoutDto\n     */\n    firstname: string;\n    /**\n     * \n     * @type {string}\n     * @memberof GuestCheckoutDto\n     */\n    lastname: string;\n    /**\n     * \n     * @type {string}\n     * @memberof GuestCheckoutDto\n     */\n    email: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum GuestCheckoutDtoPaymentMethodEnum {\n    Cash = 'Cash',\n    Credit = 'Credit',\n    Card = 'Card'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum GuestCheckoutDtoOrderStatusEnum {\n    Pending = 'Pending',\n    PickingPacking = 'Picking & Packing',\n    ReadyForPickup = 'Ready for Pickup',\n    PickedUp = 'Picked Up',\n    OutForDelivery = 'Out for Delivery',\n    Delivered = 'Delivered',\n    OnHold = 'On Hold',\n    Cancelled = 'Cancelled'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum GuestCheckoutDtoPaymentStatusEnum {\n    Paid = 'Paid',\n    Unpaid = 'Unpaid'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum GuestCheckoutDtoDeliveryMethodEnum {\n    Shippo = 'shippo',\n    Custom = 'custom',\n    Pickup = 'pickup'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface InventoryAlertDto\n */\nexport interface InventoryAlertDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof InventoryAlertDto\n     */\n    productId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof InventoryAlertDto\n     */\n    variantId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof InventoryAlertDto\n     */\n    productName: string;\n    /**\n     * \n     * @type {string}\n     * @memberof InventoryAlertDto\n     */\n    variantName: string;\n    /**\n     * \n     * @type {number}\n     * @memberof InventoryAlertDto\n     */\n    currentStock: number;\n    /**\n     * \n     * @type {string}\n     * @memberof InventoryAlertDto\n     */\n    alertType: InventoryAlertDtoAlertTypeEnum;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum InventoryAlertDtoAlertTypeEnum {\n    LOWSTOCK = 'LOW_STOCK',\n    OUTOFSTOCK = 'OUT_OF_STOCK'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface ManualDiscountDto\n */\nexport interface ManualDiscountDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ManualDiscountDto\n     */\n    valueType: ManualDiscountDtoValueTypeEnum;\n    /**\n     * \n     * @type {number}\n     * @memberof ManualDiscountDto\n     */\n    value: number;\n    /**\n     * \n     * @type {string}\n     * @memberof ManualDiscountDto\n     */\n    reason?: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ManualDiscountDtoValueTypeEnum {\n    PERCENTAGE = 'PERCENTAGE',\n    FIXEDAMOUNT = 'FIXED_AMOUNT'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { CartItem } from './cart-item';\nimport { CustomProductDto } from './custom-product-dto';\nimport { ManualDiscountDto } from './manual-discount-dto';\nimport { ManualShippingDto } from './manual-shipping-dto';\n/**\n * \n * @export\n * @interface ManualOrderDTO\n */\nexport interface ManualOrderDTO {\n  _id?: string;\n    /**\n     * \n     * @type {Array<CartItem>}\n     * @memberof ManualOrderDTO\n     */\n    items?: Array<CartItem>;\n    /**\n     * \n     * @type {string}\n     * @memberof ManualOrderDTO\n     */\n    notes?: string;\n    /**\n     * \n     * @type {ManualDiscountDto}\n     * @memberof ManualOrderDTO\n     */\n    manualDiscount: ManualDiscountDto;\n    /**\n     * \n     * @type {string}\n     * @memberof ManualOrderDTO\n     */\n    discountId: string;\n    /**\n     * \n     * @type {ManualShippingDto}\n     * @memberof ManualOrderDTO\n     */\n    manualShipping: ManualShippingDto;\n    /**\n     * \n     * @type {Date}\n     * @memberof ManualOrderDTO\n     */\n    paymentDueDate: Date;\n    /**\n     * \n     * @type {boolean}\n     * @memberof ManualOrderDTO\n     */\n    chargeTax: boolean;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof ManualOrderDTO\n     */\n    orderRemindingDates: Array<string>;\n    /**\n     * \n     * @type {Array<CustomProductDto>}\n     * @memberof ManualOrderDTO\n     */\n    customProducts?: Array<CustomProductDto>;\n    /**\n     * \n     * @type {string}\n     * @memberof ManualOrderDTO\n     */\n    paymentMethod: ManualOrderDTOPaymentMethodEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof ManualOrderDTO\n     */\n    orderStatus: ManualOrderDTOOrderStatusEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof ManualOrderDTO\n     */\n    paymentStatus?: ManualOrderDTOPaymentStatusEnum;\n    /**\n     * If true, skips email verification (admin creating order on behalf of user)\n     * @type {boolean}\n     * @memberof ManualOrderDTO\n     */\n    isManualOrder?: boolean;\n    /**\n     * Stripe PaymentMethod ID collected from the storefront card step. When provided, the order is charged immediately instead of sending an invoice.\n     * @type {string}\n     * @memberof ManualOrderDTO\n     */\n    paymentMethodId?: string;\n    /**\n     * Send order confirmation email to the customer. Defaults to true.\n     * @type {boolean}\n     * @memberof ManualOrderDTO\n     */\n    sendConfirmationEmail?: boolean;\n    /**\n     * Send invoice email to the customer when a Stripe invoice is created. Defaults to true.\n     * @type {boolean}\n     * @memberof ManualOrderDTO\n     */\n    sendInvoiceEmail?: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof ManualOrderDTO\n     */\n    deliveryMethod?: ManualOrderDTODeliveryMethodEnum;\n    /**\n     * User address ID for custom delivery orders\n     * @type {string}\n     * @memberof ManualOrderDTO\n     */\n    userAddressId?: string;\n    /**\n     * Inline delivery address for custom delivery — used when the user has no saved address yet (e.g. guest checkout price preview)\n     * @type {any}\n     * @memberof ManualOrderDTO\n     */\n    deliveryAddress?: any;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ManualOrderDTOPaymentMethodEnum {\n    Cash = 'Cash',\n    Credit = 'Credit',\n    Card = 'Card'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ManualOrderDTOOrderStatusEnum {\n    Pending = 'Pending',\n    PickingPacking = 'Picking & Packing',\n    ReadyForPickup = 'Ready for Pickup',\n    PickedUp = 'Picked Up',\n    OutForDelivery = 'Out for Delivery',\n    Delivered = 'Delivered',\n    OnHold = 'On Hold',\n    Cancelled = 'Cancelled'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ManualOrderDTOPaymentStatusEnum {\n    Paid = 'Paid',\n    Unpaid = 'Unpaid'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ManualOrderDTODeliveryMethodEnum {\n    Shippo = 'shippo',\n    Custom = 'custom',\n    Pickup = 'pickup'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface NotificationDto\n */\nexport interface NotificationDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof NotificationDto\n     */\n    id: string;\n    /**\n     * \n     * @type {string}\n     * @memberof NotificationDto\n     */\n    userId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof NotificationDto\n     */\n    storeId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof NotificationDto\n     */\n    type: NotificationDtoTypeEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof NotificationDto\n     */\n    title: string;\n    /**\n     * \n     * @type {string}\n     * @memberof NotificationDto\n     */\n    body: string;\n    /**\n     * \n     * @type {any}\n     * @memberof NotificationDto\n     */\n    data: any;\n    /**\n     * \n     * @type {boolean}\n     * @memberof NotificationDto\n     */\n    isRead: boolean;\n    /**\n     * \n     * @type {Date}\n     * @memberof NotificationDto\n     */\n    createdAt: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof NotificationDto\n     */\n    updatedAt: Date;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum NotificationDtoTypeEnum {\n    ORDERCONFIRMATION = 'ORDER_CONFIRMATION',\n    PAYMENTFAILED = 'PAYMENT_FAILED',\n    ORDERSHIPPED = 'ORDER_SHIPPED',\n    ORDERDELIVERED = 'ORDER_DELIVERED',\n    REFUNDPROCESSED = 'REFUND_PROCESSED',\n    REVIEWREPLY = 'REVIEW_REPLY',\n    ABANDONEDCARTREMINDER = 'ABANDONED_CART_REMINDER',\n    PRICEDROPALERT = 'PRICE_DROP_ALERT',\n    BACKINSTOCK = 'BACK_IN_STOCK',\n    PASSWORDRESET = 'PASSWORD_RESET',\n    NEWDEVICELOGIN = 'NEW_DEVICE_LOGIN',\n    TWOFACODE = 'TWO_FA_CODE',\n    NEWORDER = 'NEW_ORDER',\n    LOWSTOCKWARNING = 'LOW_STOCK_WARNING',\n    NEWRETURNREQUEST = 'NEW_RETURN_REQUEST',\n    NEWUSERREGISTERED = 'NEW_USER_REGISTERED',\n    HIGHVALUEORDERALERT = 'HIGH_VALUE_ORDER_ALERT',\n    PAYOUTFAILED = 'PAYOUT_FAILED',\n    ORDERSTATUSUPDATED = 'ORDER_STATUS_UPDATED',\n    INVOICEPAYMENTREQUIRED = 'INVOICE_PAYMENT_REQUIRED'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { Address } from './address';\nimport { CartItem } from './cart-item';\nimport { Discount } from './discount';\nimport { ObjectId } from './object-id';\nimport { OrderTimeLineDTO } from './order-time-line-dto';\nimport { PreferedPickOrDeliveryTimeDto } from './prefered-pick-or-delivery-time-dto';\nimport { ShippingInfo } from './shipping-info';\nimport { UserWithNoId } from './user-with-no-id';\n/**\n * \n * @export\n * @interface Order\n */\nexport interface Order {\n  _id?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof Order\n     */\n    createdAt: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof Order\n     */\n    updatedAt: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof Order\n     */\n    id: string;\n    /**\n     * \n     * @type {ObjectId}\n     * @memberof Order\n     */\n    userId: ObjectId;\n    /**\n     * \n     * @type {ObjectId}\n     * @memberof Order\n     */\n    payment: ObjectId;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof Order\n     */\n    refunds: Array<string>;\n    /**\n     * \n     * @type {string}\n     * @memberof Order\n     */\n    shipmentId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Order\n     */\n    orderType: OrderOrderTypeEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof Order\n     */\n    orderStatus: string;\n    /**\n     * \n     * @type {Array<CartItem>}\n     * @memberof Order\n     */\n    items: Array<CartItem>;\n    /**\n     * \n     * @type {number}\n     * @memberof Order\n     */\n    subTotal: number;\n    /**\n     * \n     * @type {number}\n     * @memberof Order\n     */\n    tax: number;\n    /**\n     * \n     * @type {number}\n     * @memberof Order\n     */\n    shippingCost: number;\n    /**\n     * \n     * @type {number}\n     * @memberof Order\n     */\n    grandTotal: number;\n    /**\n     * \n     * @type {number}\n     * @memberof Order\n     */\n    discountedAmount: number;\n    /**\n     * \n     * @type {ShippingInfo}\n     * @memberof Order\n     */\n    shippingInfo: ShippingInfo;\n    /**\n     * \n     * @type {string}\n     * @memberof Order\n     */\n    notes: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Order\n     */\n    storeId: string;\n    /**\n     * \n     * @type {Array<OrderTimeLineDTO>}\n     * @memberof Order\n     */\n    orderTimeLine: Array<OrderTimeLineDTO>;\n    /**\n     * \n     * @type {UserWithNoId}\n     * @memberof Order\n     */\n    userData: UserWithNoId;\n    /**\n     * \n     * @type {Discount}\n     * @memberof Order\n     */\n    discountsApplied: Discount;\n    /**\n     * \n     * @type {Address}\n     * @memberof Order\n     */\n    pickUpAddress: Address;\n    /**\n     * \n     * @type {PreferedPickOrDeliveryTimeDto}\n     * @memberof Order\n     */\n    preferedPickOrDeliveryTime: PreferedPickOrDeliveryTimeDto;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof Order\n     */\n    orderRemindingDates: Array<string>;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof Order\n     */\n    customProducts: Array<string>;\n    /**\n     * \n     * @type {string}\n     * @memberof Order\n     */\n    type: OrderTypeEnum;\n    /**\n     * Shippo rate ID stored for deferred label purchase on Card payments\n     * @type {string}\n     * @memberof Order\n     */\n    shippoRateId: string;\n    /**\n     * Whether to send an order confirmation email to the customer. Persisted so the invoice.paid webhook can respect it.\n     * @type {boolean}\n     * @memberof Order\n     */\n    sendConfirmationEmail: boolean;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum OrderOrderTypeEnum {\n    Pickup = 'Pickup',\n    Delivery = 'Delivery'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum OrderTypeEnum {\n    Quotation = 'Quotation',\n    Order = 'Order'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface OrderTimeLineDTO\n */\nexport interface OrderTimeLineDTO {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof OrderTimeLineDTO\n     */\n    title: string;\n    /**\n     * \n     * @type {string}\n     * @memberof OrderTimeLineDTO\n     */\n    description?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof OrderTimeLineDTO\n     */\n    date: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof OrderTimeLineDTO\n     */\n    type: OrderTimeLineDTOTypeEnum;\n    /**\n     * \n     * @type {any}\n     * @memberof OrderTimeLineDTO\n     */\n    metadata?: any;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum OrderTimeLineDTOTypeEnum {\n    OrderStatus = 'orderStatus',\n    Reminder = 'reminder',\n    Payment = 'payment',\n    Shipping = 'shipping',\n    Refund = 'refund',\n    System = 'system'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { UserWithNoId } from './user-with-no-id';\n/**\n * \n * @export\n * @interface Payment\n */\nexport interface Payment {\n  _id?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof Payment\n     */\n    createdAt: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof Payment\n     */\n    updatedAt: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof Payment\n     */\n    id: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Payment\n     */\n    userId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Payment\n     */\n    storeId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Payment\n     */\n    billingAddress: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Payment\n     */\n    orderId: string;\n    /**\n     * \n     * @type {UserWithNoId}\n     * @memberof Payment\n     */\n    userData: UserWithNoId;\n    /**\n     * \n     * @type {string}\n     * @memberof Payment\n     */\n    paymentStatus: PaymentPaymentStatusEnum;\n    /**\n     * \n     * @type {any}\n     * @memberof Payment\n     */\n    paymentIntent: any;\n    /**\n     * \n     * @type {number}\n     * @memberof Payment\n     */\n    total: number;\n    /**\n     * \n     * @type {string}\n     * @memberof Payment\n     */\n    transactionId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Payment\n     */\n    hostedInvoiceUrl: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof Payment\n     */\n    invoiceDueDate: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof Payment\n     */\n    refundReason: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Payment\n     */\n    invoicePdf: string;\n    /**\n     * \n     * @type {number}\n     * @memberof Payment\n     */\n    refundAmount: number;\n    /**\n     * \n     * @type {string}\n     * @memberof Payment\n     */\n    paymentIntentId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Payment\n     */\n    chargeId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Payment\n     */\n    paymentType: string;\n    /**\n     * \n     * @type {string}\n     * @memberof Payment\n     */\n    paymentMethod: PaymentPaymentMethodEnum;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum PaymentPaymentStatusEnum {\n    Paid = 'Paid',\n    Unpaid = 'Unpaid',\n    Processing = 'Processing',\n    PaymentFailed = 'Payment Failed',\n    Cancelled = 'Cancelled',\n    Refunded = 'Refunded',\n    PartiallyRefunded = 'Partially Refunded',\n    Disputed = 'Disputed',\n    LostDispute = 'Lost Dispute'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum PaymentPaymentMethodEnum {\n    Cash = 'Cash',\n    Credit = 'Credit',\n    Card = 'Card'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { ProductFiltersDto } from './product-filters-dto';\n/**\n * \n * @export\n * @interface PersonalizedProductsQueryDto\n */\nexport interface PersonalizedProductsQueryDto {\n  _id?: string;\n    /**\n     * Page number\n     * @type {number}\n     * @memberof PersonalizedProductsQueryDto\n     */\n    page?: number;\n    /**\n     * Number of items per page\n     * @type {number}\n     * @memberof PersonalizedProductsQueryDto\n     */\n    limit?: number;\n    /**\n     * Percentage of personalized products (0-100)\n     * @type {number}\n     * @memberof PersonalizedProductsQueryDto\n     */\n    personalizedRatio?: number;\n    /**\n     * Place admin-selected featured products before personalized and regular products\n     * @type {boolean}\n     * @memberof PersonalizedProductsQueryDto\n     */\n    featuredFirst?: boolean;\n    /**\n     * Start of the current browsing session. Views after this timestamp are learned for the next session.\n     * @type {string}\n     * @memberof PersonalizedProductsQueryDto\n     */\n    personalizationSessionStartedAt?: string;\n    /**\n     * Sort order\n     * @type {string}\n     * @memberof PersonalizedProductsQueryDto\n     */\n    sort?: PersonalizedProductsQueryDtoSortEnum;\n    /**\n     * Comma-separated brand names\n     * @type {string}\n     * @memberof PersonalizedProductsQueryDto\n     */\n    brandFilter?: string;\n    /**\n     * Product filters\n     * @type {ProductFiltersDto}\n     * @memberof PersonalizedProductsQueryDto\n     */\n    filters?: ProductFiltersDto;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum PersonalizedProductsQueryDtoSortEnum {\n    Latest = 'latest',\n    PriceAsc = 'price_asc',\n    PriceDesc = 'price_desc',\n    Rating = 'rating',\n    Popularity = 'popularity'\n}\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { Product } from './product';\nimport { ProductVariant } from './product-variant';\nimport { UsedBy } from './used-by';\n/**\n * \n * @export\n * @interface PopulatedDiscount\n */\nexport interface PopulatedDiscount {\n  _id?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof PopulatedDiscount\n     */\n    createdAt?: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof PopulatedDiscount\n     */\n    updatedAt?: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof PopulatedDiscount\n     */\n    id?: string;\n    /**\n     * Display name for the discount\n     * @type {string}\n     * @memberof PopulatedDiscount\n     */\n    name?: string;\n    /**\n     * Optional description for internal use\n     * @type {string}\n     * @memberof PopulatedDiscount\n     */\n    description?: string;\n    /**\n     * ITEM_DISCOUNT: Shows on products automatically. COUPON_CODE: Requires code at checkout\n     * @type {string}\n     * @memberof PopulatedDiscount\n     */\n    type?: PopulatedDiscountTypeEnum;\n    /**\n     * PERCENTAGE or FIXED_AMOUNT\n     * @type {string}\n     * @memberof PopulatedDiscount\n     */\n    valueType?: PopulatedDiscountValueTypeEnum;\n    /**\n     * The discount value (percentage 1-100 or fixed dollar amount)\n     * @type {number}\n     * @memberof PopulatedDiscount\n     */\n    value?: number;\n    /**\n     * Maximum discount amount for percentage discounts (optional, mainly for COUPON_CODE)\n     * @type {number}\n     * @memberof PopulatedDiscount\n     */\n    cappedAt?: number;\n    /**\n     * Coupon code (required for COUPON_CODE type)\n     * @type {string}\n     * @memberof PopulatedDiscount\n     */\n    code?: string;\n    /**\n     * When the discount becomes active\n     * @type {Date}\n     * @memberof PopulatedDiscount\n     */\n    startsAt?: Date;\n    /**\n     * When the discount expires\n     * @type {Date}\n     * @memberof PopulatedDiscount\n     */\n    expiresAt?: Date;\n    /**\n     * Current lifecycle state\n     * @type {string}\n     * @memberof PopulatedDiscount\n     */\n    state?: PopulatedDiscountStateEnum;\n    /**\n     * Quick toggle to enable/disable the discount\n     * @type {boolean}\n     * @memberof PopulatedDiscount\n     */\n    isActive?: boolean;\n    /**\n     * Maximum total times this discount can be used (optional)\n     * @type {number}\n     * @memberof PopulatedDiscount\n     */\n    maxUses?: number;\n    /**\n     * Maximum times a single user can use this discount (optional)\n     * @type {number}\n     * @memberof PopulatedDiscount\n     */\n    maxUsesPerUser?: number;\n    /**\n     * Current total usage count\n     * @type {number}\n     * @memberof PopulatedDiscount\n     */\n    numberOfUses?: number;\n    /**\n     * Usage history\n     * @type {Array<UsedBy>}\n     * @memberof PopulatedDiscount\n     */\n    usedBy?: Array<UsedBy>;\n    /**\n     * \n     * @type {string}\n     * @memberof PopulatedDiscount\n     */\n    storeId?: string;\n    /**\n     * \n     * @type {Array<Product>}\n     * @memberof PopulatedDiscount\n     */\n    productsEligible: Array<Product>;\n    /**\n     * \n     * @type {Array<ProductVariant>}\n     * @memberof PopulatedDiscount\n     */\n    variantsEligible: Array<ProductVariant>;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum PopulatedDiscountTypeEnum {\n    ITEMDISCOUNT = 'ITEM_DISCOUNT',\n    COUPONCODE = 'COUPON_CODE'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum PopulatedDiscountValueTypeEnum {\n    PERCENTAGE = 'PERCENTAGE',\n    FIXEDAMOUNT = 'FIXED_AMOUNT'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum PopulatedDiscountStateEnum {\n    ACTIVE = 'ACTIVE',\n    INACTIVE = 'INACTIVE',\n    EXPIRED = 'EXPIRED',\n    SCHEDULED = 'SCHEDULED'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { Address } from './address';\nimport { CartItemPopulated } from './cart-item-populated';\nimport { Discount } from './discount';\nimport { ObjectId } from './object-id';\nimport { OrderTimeLineDTO } from './order-time-line-dto';\nimport { Payment } from './payment';\nimport { PreferedPickOrDeliveryTimeDto } from './prefered-pick-or-delivery-time-dto';\nimport { Shipment } from './shipment';\nimport { ShippingInfo } from './shipping-info';\nimport { UserWithNoId } from './user-with-no-id';\n/**\n * \n * @export\n * @interface PopulatedOrder\n */\nexport interface PopulatedOrder {\n  _id?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof PopulatedOrder\n     */\n    createdAt?: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof PopulatedOrder\n     */\n    updatedAt?: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof PopulatedOrder\n     */\n    id?: string;\n    /**\n     * \n     * @type {ObjectId}\n     * @memberof PopulatedOrder\n     */\n    userId?: ObjectId;\n    /**\n     * \n     * @type {string}\n     * @memberof PopulatedOrder\n     */\n    shipmentId?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof PopulatedOrder\n     */\n    orderType?: PopulatedOrderOrderTypeEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof PopulatedOrder\n     */\n    orderStatus?: string;\n    /**\n     * Each item includes productVariantData.productName and productVariantData.productId for display\n     * @type {Array<CartItemPopulated>}\n     * @memberof PopulatedOrder\n     */\n    items?: Array<CartItemPopulated>;\n    /**\n     * \n     * @type {number}\n     * @memberof PopulatedOrder\n     */\n    subTotal?: number;\n    /**\n     * \n     * @type {number}\n     * @memberof PopulatedOrder\n     */\n    tax?: number;\n    /**\n     * \n     * @type {number}\n     * @memberof PopulatedOrder\n     */\n    shippingCost?: number;\n    /**\n     * \n     * @type {number}\n     * @memberof PopulatedOrder\n     */\n    grandTotal?: number;\n    /**\n     * \n     * @type {number}\n     * @memberof PopulatedOrder\n     */\n    discountedAmount?: number;\n    /**\n     * \n     * @type {ShippingInfo}\n     * @memberof PopulatedOrder\n     */\n    shippingInfo?: ShippingInfo;\n    /**\n     * \n     * @type {string}\n     * @memberof PopulatedOrder\n     */\n    notes?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof PopulatedOrder\n     */\n    storeId?: string;\n    /**\n     * \n     * @type {Array<OrderTimeLineDTO>}\n     * @memberof PopulatedOrder\n     */\n    orderTimeLine?: Array<OrderTimeLineDTO>;\n    /**\n     * \n     * @type {UserWithNoId}\n     * @memberof PopulatedOrder\n     */\n    userData?: UserWithNoId;\n    /**\n     * \n     * @type {Discount}\n     * @memberof PopulatedOrder\n     */\n    discountsApplied?: Discount;\n    /**\n     * \n     * @type {Address}\n     * @memberof PopulatedOrder\n     */\n    pickUpAddress?: Address;\n    /**\n     * \n     * @type {PreferedPickOrDeliveryTimeDto}\n     * @memberof PopulatedOrder\n     */\n    preferedPickOrDeliveryTime?: PreferedPickOrDeliveryTimeDto;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof PopulatedOrder\n     */\n    orderRemindingDates?: Array<string>;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof PopulatedOrder\n     */\n    customProducts?: Array<string>;\n    /**\n     * \n     * @type {string}\n     * @memberof PopulatedOrder\n     */\n    type?: PopulatedOrderTypeEnum;\n    /**\n     * Shippo rate ID stored for deferred label purchase on Card payments\n     * @type {string}\n     * @memberof PopulatedOrder\n     */\n    shippoRateId?: string;\n    /**\n     * Whether to send an order confirmation email to the customer. Persisted so the invoice.paid webhook can respect it.\n     * @type {boolean}\n     * @memberof PopulatedOrder\n     */\n    sendConfirmationEmail?: boolean;\n    /**\n     * \n     * @type {Payment}\n     * @memberof PopulatedOrder\n     */\n    payment: Payment;\n    /**\n     * \n     * @type {Shipment}\n     * @memberof PopulatedOrder\n     */\n    shipment?: Shipment;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum PopulatedOrderOrderTypeEnum {\n    Pickup = 'Pickup',\n    Delivery = 'Delivery'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum PopulatedOrderTypeEnum {\n    Quotation = 'Quotation',\n    Order = 'Order'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { ChannelSettingsDto } from './channel-settings-dto';\n/**\n * \n * @export\n * @interface PreferenceUpdateItem\n */\nexport interface PreferenceUpdateItem {\n  _id?: string;\n    /**\n     * The notification type to configure\n     * @type {string}\n     * @memberof PreferenceUpdateItem\n     */\n    type: PreferenceUpdateItemTypeEnum;\n    /**\n     * Channel settings for this type\n     * @type {ChannelSettingsDto}\n     * @memberof PreferenceUpdateItem\n     */\n    settings: ChannelSettingsDto;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum PreferenceUpdateItemTypeEnum {\n    ORDERCONFIRMATION = 'ORDER_CONFIRMATION',\n    PAYMENTFAILED = 'PAYMENT_FAILED',\n    ORDERSHIPPED = 'ORDER_SHIPPED',\n    ORDERDELIVERED = 'ORDER_DELIVERED',\n    REFUNDPROCESSED = 'REFUND_PROCESSED',\n    REVIEWREPLY = 'REVIEW_REPLY',\n    ABANDONEDCARTREMINDER = 'ABANDONED_CART_REMINDER',\n    PRICEDROPALERT = 'PRICE_DROP_ALERT',\n    BACKINSTOCK = 'BACK_IN_STOCK',\n    PASSWORDRESET = 'PASSWORD_RESET',\n    NEWDEVICELOGIN = 'NEW_DEVICE_LOGIN',\n    TWOFACODE = 'TWO_FA_CODE',\n    NEWORDER = 'NEW_ORDER',\n    LOWSTOCKWARNING = 'LOW_STOCK_WARNING',\n    NEWRETURNREQUEST = 'NEW_RETURN_REQUEST',\n    NEWUSERREGISTERED = 'NEW_USER_REGISTERED',\n    HIGHVALUEORDERALERT = 'HIGH_VALUE_ORDER_ALERT',\n    PAYOUTFAILED = 'PAYOUT_FAILED',\n    ORDERSTATUSUPDATED = 'ORDER_STATUS_UPDATED',\n    INVOICEPAYMENTREQUIRED = 'INVOICE_PAYMENT_REQUIRED'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { SingleProductMedia } from './single-product-media';\n/**\n * \n * @export\n * @interface ProductVariant\n */\nexport interface ProductVariant {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ProductVariant\n     */\n    id: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ProductVariant\n     */\n    name: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ProductVariant\n     */\n    description: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ProductVariant\n     */\n    sku: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ProductVariant\n     */\n    upc: string;\n    /**\n     * \n     * @type {Array<SingleProductMedia>}\n     * @memberof ProductVariant\n     */\n    media: Array<SingleProductMedia>;\n    /**\n     * \n     * @type {number}\n     * @memberof ProductVariant\n     */\n    retailPrice: number;\n    /**\n     * \n     * @type {number}\n     * @memberof ProductVariant\n     */\n    finalPrice: number;\n    /**\n     * \n     * @type {boolean}\n     * @memberof ProductVariant\n     */\n    isDiscounted: boolean;\n    /**\n     * \n     * @type {number}\n     * @memberof ProductVariant\n     */\n    discountAmount: number;\n    /**\n     * \n     * @type {number}\n     * @memberof ProductVariant\n     */\n    inventoryCount: number;\n    /**\n     * \n     * @type {string}\n     * @memberof ProductVariant\n     */\n    inventoryStatus: ProductVariantInventoryStatusEnum;\n    /**\n     * \n     * @type {number}\n     * @memberof ProductVariant\n     */\n    totalSold: number;\n    /**\n     * Width in inches\n     * @type {number}\n     * @memberof ProductVariant\n     */\n    width: number;\n    /**\n     * Height in inches\n     * @type {number}\n     * @memberof ProductVariant\n     */\n    height: number;\n    /**\n     * Length in inches\n     * @type {number}\n     * @memberof ProductVariant\n     */\n    length: number;\n    /**\n     * Weight in oz\n     * @type {number}\n     * @memberof ProductVariant\n     */\n    weight: number;\n    /**\n     * \n     * @type {boolean}\n     * @memberof ProductVariant\n     */\n    isActive: boolean;\n    /**\n     * \n     * @type {Date}\n     * @memberof ProductVariant\n     */\n    inventoryLastUpdated: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof ProductVariant\n     */\n    discount: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ProductVariantInventoryStatusEnum {\n    INSTOCK = 'IN_STOCK',\n    OUTOFSTOCK = 'OUT_OF_STOCK',\n    LOWSTOCK = 'LOW_STOCK'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { SingleProductMedia } from './single-product-media';\n/**\n * \n * @export\n * @interface ProductVariantPopulated\n */\nexport interface ProductVariantPopulated {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ProductVariantPopulated\n     */\n    id: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ProductVariantPopulated\n     */\n    name: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ProductVariantPopulated\n     */\n    description: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ProductVariantPopulated\n     */\n    sku: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ProductVariantPopulated\n     */\n    upc: string;\n    /**\n     * \n     * @type {Array<SingleProductMedia>}\n     * @memberof ProductVariantPopulated\n     */\n    media: Array<SingleProductMedia>;\n    /**\n     * \n     * @type {number}\n     * @memberof ProductVariantPopulated\n     */\n    retailPrice: number;\n    /**\n     * \n     * @type {number}\n     * @memberof ProductVariantPopulated\n     */\n    finalPrice: number;\n    /**\n     * \n     * @type {boolean}\n     * @memberof ProductVariantPopulated\n     */\n    isDiscounted: boolean;\n    /**\n     * \n     * @type {number}\n     * @memberof ProductVariantPopulated\n     */\n    discountAmount: number;\n    /**\n     * \n     * @type {number}\n     * @memberof ProductVariantPopulated\n     */\n    inventoryCount: number;\n    /**\n     * \n     * @type {string}\n     * @memberof ProductVariantPopulated\n     */\n    inventoryStatus: ProductVariantPopulatedInventoryStatusEnum;\n    /**\n     * \n     * @type {number}\n     * @memberof ProductVariantPopulated\n     */\n    totalSold: number;\n    /**\n     * Width in inches\n     * @type {number}\n     * @memberof ProductVariantPopulated\n     */\n    width: number;\n    /**\n     * Height in inches\n     * @type {number}\n     * @memberof ProductVariantPopulated\n     */\n    height: number;\n    /**\n     * Length in inches\n     * @type {number}\n     * @memberof ProductVariantPopulated\n     */\n    length: number;\n    /**\n     * Weight in oz\n     * @type {number}\n     * @memberof ProductVariantPopulated\n     */\n    weight: number;\n    /**\n     * \n     * @type {boolean}\n     * @memberof ProductVariantPopulated\n     */\n    isActive: boolean;\n    /**\n     * \n     * @type {Date}\n     * @memberof ProductVariantPopulated\n     */\n    inventoryLastUpdated: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof ProductVariantPopulated\n     */\n    discount: string;\n    /**\n     * Parent product name (e.g. \\\"Advil\\\")\n     * @type {string}\n     * @memberof ProductVariantPopulated\n     */\n    productName: string;\n    /**\n     * Parent product ID\n     * @type {string}\n     * @memberof ProductVariantPopulated\n     */\n    productId: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ProductVariantPopulatedInventoryStatusEnum {\n    INSTOCK = 'IN_STOCK',\n    OUTOFSTOCK = 'OUT_OF_STOCK',\n    LOWSTOCK = 'LOW_STOCK'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface ReorderProductsDto\n */\nexport interface ReorderProductsDto {\n  _id?: string;\n    /**\n     * The container (category or subcategory) ID\n     * @type {string}\n     * @memberof ReorderProductsDto\n     */\n    containerId: string;\n    /**\n     * The type of container\n     * @type {string}\n     * @memberof ReorderProductsDto\n     */\n    containerType: ReorderProductsDtoContainerTypeEnum;\n    /**\n     * Array of product IDs in the desired order\n     * @type {Array<string>}\n     * @memberof ReorderProductsDto\n     */\n    orderedProductIds: Array<string>;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ReorderProductsDtoContainerTypeEnum {\n    Category = 'category',\n    Subcategory = 'subcategory'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface ServiceAppointment\n */\nexport interface ServiceAppointment {\n  _id?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof ServiceAppointment\n     */\n    createdAt: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof ServiceAppointment\n     */\n    updatedAt: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceAppointment\n     */\n    id: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceAppointment\n     */\n    storeId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceAppointment\n     */\n    serviceForm: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceAppointment\n     */\n    submission?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceAppointment\n     */\n    userId?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceAppointment\n     */\n    patientName: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceAppointment\n     */\n    patientEmail?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceAppointment\n     */\n    patientPhone?: string;\n    /**\n     * Appointment day (YYYY-MM-DD)\n     * @type {Date}\n     * @memberof ServiceAppointment\n     */\n    date: Date;\n    /**\n     * Slot start time HH:MM\n     * @type {string}\n     * @memberof ServiceAppointment\n     */\n    timeSlot: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceAppointment\n     */\n    status: ServiceAppointmentStatusEnum;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ServiceAppointmentStatusEnum {\n    Booked = 'Booked',\n    Cancelled = 'Cancelled',\n    Completed = 'Completed'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { AppointmentSettings } from './appointment-settings';\nimport { ServiceFormField } from './service-form-field';\n/**\n * \n * @export\n * @interface ServiceForm\n */\nexport interface ServiceForm {\n  _id?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof ServiceForm\n     */\n    createdAt: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof ServiceForm\n     */\n    updatedAt: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceForm\n     */\n    id: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceForm\n     */\n    storeId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceForm\n     */\n    name: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceForm\n     */\n    description?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceForm\n     */\n    category: ServiceFormCategoryEnum;\n    /**\n     * \n     * @type {number}\n     * @memberof ServiceForm\n     */\n    price: number;\n    /**\n     * Default service duration in minutes\n     * @type {number}\n     * @memberof ServiceForm\n     */\n    duration: number;\n    /**\n     * \n     * @type {Array<ServiceFormField>}\n     * @memberof ServiceForm\n     */\n    fields: Array<ServiceFormField>;\n    /**\n     * \n     * @type {AppointmentSettings}\n     * @memberof ServiceForm\n     */\n    appointment: AppointmentSettings;\n    /**\n     * \n     * @type {boolean}\n     * @memberof ServiceForm\n     */\n    isActive: boolean;\n    /**\n     * When true (vaccines), the questionnaire is resolved from the store shared consent template and `fields` is ignored. Set false to give this form its own custom fields.\n     * @type {boolean}\n     * @memberof ServiceForm\n     */\n    usesSharedForm: boolean;\n    /**\n     * Key of the catalog template this form was created from\n     * @type {string}\n     * @memberof ServiceForm\n     */\n    catalogKey?: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ServiceFormCategoryEnum {\n    Vaccine = 'vaccine',\n    Test = 'test',\n    Consultation = 'consultation',\n    Treatment = 'treatment',\n    Other = 'other'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { FieldValidation } from './field-validation';\n/**\n * \n * @export\n * @interface ServiceFormField\n */\nexport interface ServiceFormField {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceFormField\n     */\n    key: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceFormField\n     */\n    type: ServiceFormFieldTypeEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceFormField\n     */\n    label: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceFormField\n     */\n    placeholder?: string;\n    /**\n     * \n     * @type {boolean}\n     * @memberof ServiceFormField\n     */\n    required: boolean;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof ServiceFormField\n     */\n    options?: Array<string>;\n    /**\n     * \n     * @type {FieldValidation}\n     * @memberof ServiceFormField\n     */\n    validation?: FieldValidation;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ServiceFormFieldTypeEnum {\n    Text = 'text',\n    Email = 'email',\n    Phone = 'phone',\n    Select = 'select',\n    Radio = 'radio',\n    Checkbox = 'checkbox',\n    Textarea = 'textarea',\n    Date = 'date',\n    Time = 'time'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { FieldValidationDto } from './field-validation-dto';\n/**\n * \n * @export\n * @interface ServiceFormFieldDto\n */\nexport interface ServiceFormFieldDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceFormFieldDto\n     */\n    key: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceFormFieldDto\n     */\n    type: ServiceFormFieldDtoTypeEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceFormFieldDto\n     */\n    label: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceFormFieldDto\n     */\n    placeholder?: string;\n    /**\n     * \n     * @type {boolean}\n     * @memberof ServiceFormFieldDto\n     */\n    required: boolean;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof ServiceFormFieldDto\n     */\n    options?: Array<string>;\n    /**\n     * \n     * @type {FieldValidationDto}\n     * @memberof ServiceFormFieldDto\n     */\n    validation?: FieldValidationDto;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ServiceFormFieldDtoTypeEnum {\n    Text = 'text',\n    Email = 'email',\n    Phone = 'phone',\n    Select = 'select',\n    Radio = 'radio',\n    Checkbox = 'checkbox',\n    Textarea = 'textarea',\n    Date = 'date',\n    Time = 'time'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface ServiceSubmission\n */\nexport interface ServiceSubmission {\n  _id?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof ServiceSubmission\n     */\n    createdAt: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof ServiceSubmission\n     */\n    updatedAt: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceSubmission\n     */\n    id: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceSubmission\n     */\n    storeId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceSubmission\n     */\n    serviceForm: string;\n    /**\n     * All vaccine form ids covered by this single-visit submission\n     * @type {Array<string>}\n     * @memberof ServiceSubmission\n     */\n    vaccineIds?: Array<string>;\n    /**\n     * Snapshot of the vaccine names covered by this submission\n     * @type {Array<string>}\n     * @memberof ServiceSubmission\n     */\n    vaccineNames?: Array<string>;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceSubmission\n     */\n    formName: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceSubmission\n     */\n    formCategory: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceSubmission\n     */\n    patientName: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceSubmission\n     */\n    patientEmail?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceSubmission\n     */\n    patientPhone?: string;\n    /**\n     * Submitted answers keyed by field key\n     * @type {any}\n     * @memberof ServiceSubmission\n     */\n    formData: any;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceSubmission\n     */\n    status: ServiceSubmissionStatusEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceSubmission\n     */\n    adminNotes?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ServiceSubmission\n     */\n    appointment?: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ServiceSubmissionStatusEnum {\n    Pending = 'Pending',\n    Confirmed = 'Confirmed',\n    Completed = 'Completed',\n    Cancelled = 'Cancelled'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { AddressCreatedRequest } from './address-created-request';\n/**\n * \n * @export\n * @interface ShipmentDetailsDto\n */\nexport interface ShipmentDetailsDto {\n  _id?: string;\n    /**\n     * \n     * @type {AddressCreatedRequest}\n     * @memberof ShipmentDetailsDto\n     */\n    addressFrom: AddressCreatedRequest;\n    /**\n     * \n     * @type {AddressCreatedRequest}\n     * @memberof ShipmentDetailsDto\n     */\n    addressTo: AddressCreatedRequest;\n    /**\n     * \n     * @type {Date}\n     * @memberof ShipmentDetailsDto\n     */\n    objectCreated: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof ShipmentDetailsDto\n     */\n    objectId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ShipmentDetailsDto\n     */\n    objectOwner: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof ShipmentDetailsDto\n     */\n    objectUpdated: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof ShipmentDetailsDto\n     */\n    status: ShipmentDetailsDtoStatusEnum;\n    /**\n     * \n     * @type {boolean}\n     * @memberof ShipmentDetailsDto\n     */\n    test: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof ShipmentDetailsDto\n     */\n    metadata: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ShipmentDetailsDtoStatusEnum {\n    ERROR = 'ERROR',\n    QUEUED = 'QUEUED',\n    SUCCESS = 'SUCCESS',\n    WAITING = 'WAITING'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { AddressCreatedRequest } from './address-created-request';\n/**\n * \n * @export\n * @interface ShippingInfo\n */\nexport interface ShippingInfo {\n  _id?: string;\n    /**\n     * \n     * @type {AddressCreatedRequest}\n     * @memberof ShippingInfo\n     */\n    addressFrom: AddressCreatedRequest;\n    /**\n     * \n     * @type {AddressCreatedRequest}\n     * @memberof ShippingInfo\n     */\n    addressTo: AddressCreatedRequest;\n    /**\n     * \n     * @type {Date}\n     * @memberof ShippingInfo\n     */\n    objectCreated: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof ShippingInfo\n     */\n    objectId: string;\n    /**\n     * \n     * @type {string}\n     * @memberof ShippingInfo\n     */\n    objectOwner: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof ShippingInfo\n     */\n    objectUpdated: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof ShippingInfo\n     */\n    status: ShippingInfoStatusEnum;\n    /**\n     * \n     * @type {boolean}\n     * @memberof ShippingInfo\n     */\n    test: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof ShippingInfo\n     */\n    metadata: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum ShippingInfoStatusEnum {\n    ERROR = 'ERROR',\n    QUEUED = 'QUEUED',\n    SUCCESS = 'SUCCESS',\n    WAITING = 'WAITING'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface SingleProductMedia\n */\nexport interface SingleProductMedia {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof SingleProductMedia\n     */\n    id: string;\n    /**\n     * \n     * @type {string}\n     * @memberof SingleProductMedia\n     */\n    file: string;\n    /**\n     * \n     * @type {string}\n     * @memberof SingleProductMedia\n     */\n    type: SingleProductMediaTypeEnum;\n    /**\n     * \n     * @type {boolean}\n     * @memberof SingleProductMedia\n     */\n    isActive: boolean;\n    /**\n     * \n     * @type {number}\n     * @memberof SingleProductMedia\n     */\n    order: number;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum SingleProductMediaTypeEnum {\n    Image = 'image',\n    Video = 'video',\n    Audio = 'audio'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface UpdateAddressDto\n */\nexport interface UpdateAddressDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateAddressDto\n     */\n    name?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateAddressDto\n     */\n    phone?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateAddressDto\n     */\n    email?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateAddressDto\n     */\n    street1?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateAddressDto\n     */\n    street2?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateAddressDto\n     */\n    street3?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateAddressDto\n     */\n    streetNo?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateAddressDto\n     */\n    city?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateAddressDto\n     */\n    state?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateAddressDto\n     */\n    zip?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateAddressDto\n     */\n    country?: string;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateAddressDto\n     */\n    isDefault?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateAddressDto\n     */\n    isResidential?: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateAddressDto\n     */\n    addressType?: UpdateAddressDtoAddressTypeEnum;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UpdateAddressDtoAddressTypeEnum {\n    Billing = 'Billing',\n    Shipping = 'Shipping',\n    Both = 'Both'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface UpdateDiscountDto\n */\nexport interface UpdateDiscountDto {\n  _id?: string;\n    /**\n     * Display name for the discount\n     * @type {string}\n     * @memberof UpdateDiscountDto\n     */\n    name?: string;\n    /**\n     * Optional description for internal use\n     * @type {string}\n     * @memberof UpdateDiscountDto\n     */\n    description?: string;\n    /**\n     * ITEM_DISCOUNT: Shows on products automatically. COUPON_CODE: Requires code at checkout\n     * @type {string}\n     * @memberof UpdateDiscountDto\n     */\n    type?: UpdateDiscountDtoTypeEnum;\n    /**\n     * PERCENTAGE or FIXED_AMOUNT\n     * @type {string}\n     * @memberof UpdateDiscountDto\n     */\n    valueType?: UpdateDiscountDtoValueTypeEnum;\n    /**\n     * The discount value (percentage 1-100 or fixed dollar amount)\n     * @type {number}\n     * @memberof UpdateDiscountDto\n     */\n    value?: number;\n    /**\n     * Maximum discount amount for percentage discounts (optional, mainly for COUPON_CODE)\n     * @type {number}\n     * @memberof UpdateDiscountDto\n     */\n    cappedAt?: number;\n    /**\n     * Coupon code (required for COUPON_CODE type)\n     * @type {string}\n     * @memberof UpdateDiscountDto\n     */\n    code?: string;\n    /**\n     * When the discount becomes active\n     * @type {Date}\n     * @memberof UpdateDiscountDto\n     */\n    startsAt?: Date;\n    /**\n     * When the discount expires\n     * @type {Date}\n     * @memberof UpdateDiscountDto\n     */\n    expiresAt?: Date;\n    /**\n     * Current lifecycle state\n     * @type {string}\n     * @memberof UpdateDiscountDto\n     */\n    state?: UpdateDiscountDtoStateEnum;\n    /**\n     * Quick toggle to enable/disable the discount\n     * @type {boolean}\n     * @memberof UpdateDiscountDto\n     */\n    isActive?: boolean;\n    /**\n     * Products to apply discount to (all their variants will be discounted)\n     * @type {Array<string>}\n     * @memberof UpdateDiscountDto\n     */\n    productsEligible?: Array<string>;\n    /**\n     * Specific variants to apply discount to\n     * @type {Array<string>}\n     * @memberof UpdateDiscountDto\n     */\n    variantsEligible?: Array<string>;\n    /**\n     * Maximum total times this discount can be used (optional)\n     * @type {number}\n     * @memberof UpdateDiscountDto\n     */\n    maxUses?: number;\n    /**\n     * Maximum times a single user can use this discount (optional)\n     * @type {number}\n     * @memberof UpdateDiscountDto\n     */\n    maxUsesPerUser?: number;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UpdateDiscountDtoTypeEnum {\n    ITEMDISCOUNT = 'ITEM_DISCOUNT',\n    COUPONCODE = 'COUPON_CODE'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UpdateDiscountDtoValueTypeEnum {\n    PERCENTAGE = 'PERCENTAGE',\n    FIXEDAMOUNT = 'FIXED_AMOUNT'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UpdateDiscountDtoStateEnum {\n    ACTIVE = 'ACTIVE',\n    INACTIVE = 'INACTIVE',\n    EXPIRED = 'EXPIRED',\n    SCHEDULED = 'SCHEDULED'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface UpdateManualShipmentStatusDto\n */\nexport interface UpdateManualShipmentStatusDto {\n  _id?: string;\n    /**\n     * The new status for the manual delivery\n     * @type {string}\n     * @memberof UpdateManualShipmentStatusDto\n     */\n    status: UpdateManualShipmentStatusDtoStatusEnum;\n    /**\n     * Optional notes about the status update\n     * @type {string}\n     * @memberof UpdateManualShipmentStatusDto\n     */\n    notes?: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UpdateManualShipmentStatusDtoStatusEnum {\n    Pending = 'Pending',\n    Processing = 'Processing',\n    OutForDelivery = 'Out for Delivery',\n    Delivered = 'Delivered',\n    Cancelled = 'Cancelled',\n    Returned = 'Returned'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface UpdateMessageDto\n */\nexport interface UpdateMessageDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateMessageDto\n     */\n    name?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateMessageDto\n     */\n    email?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateMessageDto\n     */\n    subject?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateMessageDto\n     */\n    message?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateMessageDto\n     */\n    phoneNumber?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateMessageDto\n     */\n    adminNotes?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateMessageDto\n     */\n    status?: UpdateMessageDtoStatusEnum;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UpdateMessageDtoStatusEnum {\n    Pending = 'Pending',\n    Read = 'Read',\n    Resolved = 'Resolved',\n    Archived = 'Archived'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface UpdateProductBankItemDto\n */\nexport interface UpdateProductBankItemDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateProductBankItemDto\n     */\n    name?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateProductBankItemDto\n     */\n    brand?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateProductBankItemDto\n     */\n    manufacturer?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateProductBankItemDto\n     */\n    description?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateProductBankItemDto\n     */\n    upc?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateProductBankItemDto\n     */\n    ndc?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateProductBankItemDto\n     */\n    drugType?: UpdateProductBankItemDtoDrugTypeEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateProductBankItemDto\n     */\n    dosageForm?: UpdateProductBankItemDtoDosageFormEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateProductBankItemDto\n     */\n    strength?: string;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof UpdateProductBankItemDto\n     */\n    activeIngredients?: Array<string>;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateProductBankItemDto\n     */\n    category?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateProductBankItemDto\n     */\n    subCategory?: string;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof UpdateProductBankItemDto\n     */\n    tags?: Array<string>;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof UpdateProductBankItemDto\n     */\n    images?: Array<string>;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateProductBankItemDto\n     */\n    isActive?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateProductBankItemDto\n     */\n    isVerified?: boolean;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UpdateProductBankItemDtoDrugTypeEnum {\n    OTC = 'OTC',\n    RX = 'RX',\n    SUPPLEMENT = 'SUPPLEMENT',\n    GENERAL = 'GENERAL'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UpdateProductBankItemDtoDosageFormEnum {\n    TABLET = 'TABLET',\n    CAPSULE = 'CAPSULE',\n    LIQUID = 'LIQUID',\n    CREAM = 'CREAM',\n    GEL = 'GEL',\n    SPRAY = 'SPRAY',\n    PATCH = 'PATCH',\n    DROPS = 'DROPS',\n    POWDER = 'POWDER',\n    CHEWABLE = 'CHEWABLE',\n    OTHER = 'OTHER'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { AppointmentSettingsDto } from './appointment-settings-dto';\nimport { ServiceFormFieldDto } from './service-form-field-dto';\n/**\n * \n * @export\n * @interface UpdateServiceFormDto\n */\nexport interface UpdateServiceFormDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateServiceFormDto\n     */\n    name?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateServiceFormDto\n     */\n    description?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateServiceFormDto\n     */\n    category?: UpdateServiceFormDtoCategoryEnum;\n    /**\n     * \n     * @type {number}\n     * @memberof UpdateServiceFormDto\n     */\n    price?: number;\n    /**\n     * \n     * @type {number}\n     * @memberof UpdateServiceFormDto\n     */\n    duration?: number;\n    /**\n     * \n     * @type {Array<ServiceFormFieldDto>}\n     * @memberof UpdateServiceFormDto\n     */\n    fields?: Array<ServiceFormFieldDto>;\n    /**\n     * \n     * @type {AppointmentSettingsDto}\n     * @memberof UpdateServiceFormDto\n     */\n    appointment?: AppointmentSettingsDto;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateServiceFormDto\n     */\n    isActive?: boolean;\n    /**\n     * When true, the questionnaire comes from the store shared consent template (vaccines). Set false for a custom form with its own fields.\n     * @type {boolean}\n     * @memberof UpdateServiceFormDto\n     */\n    usesSharedForm?: boolean;\n    /**\n     * Create from a catalog template; missing name/fields are copied from it\n     * @type {string}\n     * @memberof UpdateServiceFormDto\n     */\n    catalogKey?: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UpdateServiceFormDtoCategoryEnum {\n    Vaccine = 'vaccine',\n    Test = 'test',\n    Consultation = 'consultation',\n    Treatment = 'treatment',\n    Other = 'other'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface UpdateSubmissionDto\n */\nexport interface UpdateSubmissionDto {\n  _id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateSubmissionDto\n     */\n    status?: UpdateSubmissionDtoStatusEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateSubmissionDto\n     */\n    adminNotes?: string;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UpdateSubmissionDtoStatusEnum {\n    Pending = 'Pending',\n    Confirmed = 'Confirmed',\n    Completed = 'Completed',\n    Cancelled = 'Cancelled'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\nimport { UserGroup } from './user-group';\n/**\n * \n * @export\n * @interface UpdateUserDto\n */\nexport interface UpdateUserDto {\n  _id?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof UpdateUserDto\n     */\n    createdAt?: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof UpdateUserDto\n     */\n    updatedAt?: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateUserDto\n     */\n    id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateUserDto\n     */\n    firstname?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateUserDto\n     */\n    lastname?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateUserDto\n     */\n    email?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateUserDto\n     */\n    password?: string;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateUserDto\n     */\n    isEmailVerified?: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateUserDto\n     */\n    role?: UpdateUserDtoRoleEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateUserDto\n     */\n    phoneNumber?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof UpdateUserDto\n     */\n    dateOfBirth?: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof UpdateUserDto\n     */\n    lastActive?: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateUserDto\n     */\n    notes?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateUserDto\n     */\n    storeId?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateUserDto\n     */\n    customerType?: UpdateUserDtoCustomerTypeEnum;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof UpdateUserDto\n     */\n    adminStores?: Array<string>;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateUserDto\n     */\n    isEmailNotifActive?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateUserDto\n     */\n    isSmsNotifActive?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateUserDto\n     */\n    alertOnUserRegistration?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateUserDto\n     */\n    alertOnOrderCreation?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateUserDto\n     */\n    alertOnOrderDelivery?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateUserDto\n     */\n    alertOnNewReview?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateUserDto\n     */\n    isActive?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateUserDto\n     */\n    isBlocked?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateUserDto\n     */\n    isTaxExempted?: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof UpdateUserDto\n     */\n    stripeCustomerId?: string;\n    /**\n     * ISO 3166-1 alpha-2 country code ... examples -> https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n     * @type {string}\n     * @memberof UpdateUserDto\n     */\n    country?: string;\n    /**\n     * \n     * @type {number}\n     * @memberof UpdateUserDto\n     */\n    availableCreditBalance?: number;\n    /**\n     * \n     * @type {number}\n     * @memberof UpdateUserDto\n     */\n    creditLimit?: number;\n    /**\n     * \n     * @type {number}\n     * @memberof UpdateUserDto\n     */\n    creditUsed?: number;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UpdateUserDto\n     */\n    isAllowedtToUseCredit?: boolean;\n    /**\n     * \n     * @type {Array<UserGroup>}\n     * @memberof UpdateUserDto\n     */\n    groups?: Array<UserGroup>;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UpdateUserDtoRoleEnum {\n    SuperAdmin = 'SuperAdmin',\n    Admin = 'Admin',\n    User = 'User'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UpdateUserDtoCustomerTypeEnum {\n    B2B = 'B2B',\n    Regular = 'Regular'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface UserEntity\n */\nexport interface UserEntity {\n  _id?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof UserEntity\n     */\n    createdAt?: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof UserEntity\n     */\n    updatedAt?: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof UserEntity\n     */\n    id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UserEntity\n     */\n    firstname?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UserEntity\n     */\n    lastname?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UserEntity\n     */\n    email?: string;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserEntity\n     */\n    isEmailVerified?: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof UserEntity\n     */\n    role?: UserEntityRoleEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof UserEntity\n     */\n    phoneNumber?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof UserEntity\n     */\n    dateOfBirth?: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof UserEntity\n     */\n    lastActive?: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof UserEntity\n     */\n    notes?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UserEntity\n     */\n    customerType?: UserEntityCustomerTypeEnum;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof UserEntity\n     */\n    adminStores?: Array<string>;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserEntity\n     */\n    isEmailNotifActive?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserEntity\n     */\n    isSmsNotifActive?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserEntity\n     */\n    alertOnUserRegistration?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserEntity\n     */\n    alertOnOrderCreation?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserEntity\n     */\n    alertOnOrderDelivery?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserEntity\n     */\n    alertOnNewReview?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserEntity\n     */\n    isActive?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserEntity\n     */\n    isBlocked?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserEntity\n     */\n    isTaxExempted?: boolean;\n    /**\n     * ISO 3166-1 alpha-2 country code ... examples -> https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n     * @type {string}\n     * @memberof UserEntity\n     */\n    country?: string;\n    /**\n     * \n     * @type {number}\n     * @memberof UserEntity\n     */\n    availableCreditBalance?: number;\n    /**\n     * \n     * @type {number}\n     * @memberof UserEntity\n     */\n    creditLimit?: number;\n    /**\n     * \n     * @type {number}\n     * @memberof UserEntity\n     */\n    creditUsed?: number;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserEntity\n     */\n    isAllowedtToUseCredit?: boolean;\n    /**\n     * \n     * @type {number}\n     * @memberof UserEntity\n     */\n    ordersCount: number;\n    /**\n     * \n     * @type {number}\n     * @memberof UserEntity\n     */\n    totalSpent: number;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UserEntityRoleEnum {\n    SuperAdmin = 'SuperAdmin',\n    Admin = 'Admin',\n    User = 'User'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UserEntityCustomerTypeEnum {\n    B2B = 'B2B',\n    Regular = 'Regular'\n}\n\n","/* tslint:disable */\n/* eslint-disable */\n/**\n * Hey Pharamcist API\n * No description provided (generated by Swagger Codegen https://github.com/swagger-api/swagger-codegen)\n *\n * OpenAPI spec version: 1.0\n * \n *\n * NOTE: This class is auto generated by the swagger code generator program.\n * https://github.com/swagger-api/swagger-codegen.git\n * Do not edit the class manually.\n */\n/**\n * \n * @export\n * @interface UserWithNoId\n */\nexport interface UserWithNoId {\n  _id?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof UserWithNoId\n     */\n    createdAt?: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof UserWithNoId\n     */\n    updatedAt?: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof UserWithNoId\n     */\n    id?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UserWithNoId\n     */\n    firstname?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UserWithNoId\n     */\n    lastname?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UserWithNoId\n     */\n    email?: string;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserWithNoId\n     */\n    isEmailVerified?: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof UserWithNoId\n     */\n    role?: UserWithNoIdRoleEnum;\n    /**\n     * \n     * @type {string}\n     * @memberof UserWithNoId\n     */\n    phoneNumber?: string;\n    /**\n     * \n     * @type {Date}\n     * @memberof UserWithNoId\n     */\n    dateOfBirth?: Date;\n    /**\n     * \n     * @type {Date}\n     * @memberof UserWithNoId\n     */\n    lastActive?: Date;\n    /**\n     * \n     * @type {string}\n     * @memberof UserWithNoId\n     */\n    notes?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UserWithNoId\n     */\n    storeId?: string;\n    /**\n     * \n     * @type {string}\n     * @memberof UserWithNoId\n     */\n    customerType?: UserWithNoIdCustomerTypeEnum;\n    /**\n     * \n     * @type {Array<string>}\n     * @memberof UserWithNoId\n     */\n    adminStores?: Array<string>;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserWithNoId\n     */\n    isEmailNotifActive?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserWithNoId\n     */\n    isSmsNotifActive?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserWithNoId\n     */\n    alertOnUserRegistration?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserWithNoId\n     */\n    alertOnOrderCreation?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserWithNoId\n     */\n    alertOnOrderDelivery?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserWithNoId\n     */\n    alertOnNewReview?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserWithNoId\n     */\n    isActive?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserWithNoId\n     */\n    isBlocked?: boolean;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserWithNoId\n     */\n    isTaxExempted?: boolean;\n    /**\n     * \n     * @type {string}\n     * @memberof UserWithNoId\n     */\n    stripeCustomerId?: string;\n    /**\n     * ISO 3166-1 alpha-2 country code ... examples -> https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2\n     * @type {string}\n     * @memberof UserWithNoId\n     */\n    country?: string;\n    /**\n     * \n     * @type {number}\n     * @memberof UserWithNoId\n     */\n    availableCreditBalance?: number;\n    /**\n     * \n     * @type {number}\n     * @memberof UserWithNoId\n     */\n    creditLimit?: number;\n    /**\n     * \n     * @type {number}\n     * @memberof UserWithNoId\n     */\n    creditUsed?: number;\n    /**\n     * \n     * @type {boolean}\n     * @memberof UserWithNoId\n     */\n    isAllowedtToUseCredit?: boolean;\n}\n\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UserWithNoIdRoleEnum {\n    SuperAdmin = 'SuperAdmin',\n    Admin = 'Admin',\n    User = 'User'\n}\n/**\n    * @export\n    * @enum {string}\n    */\nexport enum UserWithNoIdCustomerTypeEnum {\n    B2B = 'B2B',\n    Regular = 'Regular'\n}\n\n","export { initializeApiAdapter, getApiConfiguration, getCurrentConfig, setAuthToken, getAuthToken, clearAuthToken } from './config';\n","import globalAxios from \"axios\";\nimport { getCurrentConfig } from '../api-adapter/config';\nimport { getAuthToken } from '../api-adapter/config';\nimport { getDeviceId } from '../utils/deviceId';\nimport { AXIOS_CONFIG } from \"./sharedConfig\";\n\n// Re-export AXIOS_CONFIG for use in other files\nexport { AXIOS_CONFIG } from \"./sharedConfig\";\n\nglobalAxios.interceptors.request.use(async (config) => {\n\n  if (!config?.headers) {\n    throw new Error(\n      `Expected 'config' and 'config.headers' not to be undefined`\n    );\n  }\n\n  if (typeof window !== 'undefined') {\n    try {\n      // Get storeId from configuration instead of cookies\n      const ecommerceConfig = getCurrentConfig();\n      const token = getAuthToken();\n      const deviceId = getDeviceId();\n\n      if (token) {\n        config.headers.Authorization = `Bearer ${token}`;\n      }\n\n      if (ecommerceConfig?.storeId) {\n        config.headers[\"X-Store-Key\"] = ecommerceConfig.storeId;\n      }\n\n      if (deviceId) {\n        config.headers[\"x-device-id\"] = deviceId;\n      }\n    } catch (error) {\n      // Configuration not initialized yet, skip adding headers\n      // Console debug only to reduce noise\n      // console.debug('API configuration not initialized yet:', error);\n    }\n  }\n\n  return config;\n});\n\n// Lazy-init AbortController only on client to avoid SSR errors\nif (typeof window !== 'undefined') {\n  const abortController = new AbortController();\n  if (AXIOS_CONFIG.baseOptions) {\n    AXIOS_CONFIG.baseOptions.signal = abortController.signal;\n  }\n}\n\n","'use client';\n\nimport React, { useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { CheckCircle2, XCircle, AlertCircle, Info, X } from 'lucide-react';\n\nexport type NotificationType = 'success' | 'error' | 'warning' | 'info';\n\nexport interface NotificationData {\n    id: string;\n    type: NotificationType;\n    message: string;\n    description?: string;\n    duration?: number;\n}\n\ninterface NotificationProps {\n    notification: NotificationData;\n    onDismiss: (id: string) => void;\n}\n\nconst notificationConfig = {\n    success: {\n        icon: CheckCircle2,\n        iconColor: 'text-emerald-500',\n        accentColor: 'bg-emerald-500',\n    },\n    error: {\n        icon: XCircle,\n        iconColor: 'text-red-500',\n        accentColor: 'bg-red-500',\n    },\n    warning: {\n        icon: AlertCircle,\n        iconColor: 'text-amber-500',\n        accentColor: 'bg-amber-500',\n    },\n    info: {\n        icon: Info,\n        iconColor: 'text-blue-500',\n        accentColor: 'bg-blue-500',\n    },\n};\n\nexport function Notification({ notification, onDismiss }: NotificationProps) {\n    const config = notificationConfig[notification.type];\n    const Icon = config.icon;\n    const duration = notification.duration ?? 1800;\n\n    useEffect(() => {\n        const timer = setTimeout(() => onDismiss(notification.id), duration);\n        return () => clearTimeout(timer);\n    }, [notification.id, duration, onDismiss]);\n\n    return (\n        <motion.div\n            initial={{ opacity: 0, y: -8, scale: 0.98 }}\n            animate={{ opacity: 1, y: 0, scale: 1 }}\n            exit={{ opacity: 0, y: -4, scale: 0.98 }}\n            transition={{ duration: 0.18, ease: 'easeOut' }}\n            className=\"flex items-start gap-3 bg-white border border-gray-200 rounded-2xl shadow-md px-4 py-3.5 min-w-[300px] max-w-[380px]\"\n        >\n            {/* Left accent bar */}\n            <div className={`absolute left-0 top-3 bottom-3 w-[3px] rounded-full ${config.accentColor}`} />\n\n            <Icon className={`size-[18px] ${config.iconColor} shrink-0 mt-0.5`} />\n\n            <div className=\"flex-1 min-w-0\">\n                <p className=\"text-sm font-medium text-gray-900 leading-snug\">\n                    {notification.message}\n                </p>\n                {notification.description && (\n                    <p className=\"text-xs text-gray-500 mt-0.5 leading-relaxed\">\n                        {notification.description}\n                    </p>\n                )}\n            </div>\n\n            <button\n                onClick={() => onDismiss(notification.id)}\n                className=\"p-1 hover:bg-gray-100 rounded-lg transition-colors shrink-0 -mr-1\"\n                aria-label=\"Dismiss\"\n            >\n                <X className=\"size-3.5 text-gray-400\" />\n            </button>\n        </motion.div>\n    );\n}\n\ninterface NotificationContainerProps {\n    notifications: NotificationData[];\n    onDismiss: (id: string) => void;\n}\n\nexport function NotificationContainer({ notifications, onDismiss }: NotificationContainerProps) {\n    return (\n        <div className=\"fixed top-4 right-4 z-50 flex flex-col gap-2 pointer-events-none\">\n            <AnimatePresence mode=\"popLayout\">\n                {notifications.map((notification) => (\n                    <div key={notification.id} className=\"pointer-events-auto relative\">\n                        <Notification notification={notification} onDismiss={onDismiss} />\n                    </div>\n                ))}\n            </AnimatePresence>\n        </div>\n    );\n}\n","'use client';\n\nimport React, { createContext, useContext, useState, useCallback } from 'react';\nimport { NotificationContainer, NotificationData, NotificationType } from '@/components/Notification';\n\ninterface NotificationContextValue {\n    success: (message: string, description?: string, duration?: number) => void;\n    error: (message: string, description?: string, duration?: number) => void;\n    warning: (message: string, description?: string, duration?: number) => void;\n    info: (message: string, description?: string, duration?: number) => void;\n}\n\nconst NotificationContext = createContext<NotificationContextValue | undefined>(undefined);\n\nexport function useNotification() {\n    const context = useContext(NotificationContext);\n    if (!context) {\n        throw new Error('useNotification must be used within NotificationProvider');\n    }\n    return context;\n}\n\ninterface NotificationProviderProps {\n    children: React.ReactNode;\n}\n\nexport function NotificationProvider({ children }: NotificationProviderProps) {\n    const [notifications, setNotifications] = useState<NotificationData[]>([]);\n\n    const addNotification = useCallback(\n        (type: NotificationType, message: string, description?: string, duration?: number) => {\n            const id = Math.random().toString(36).substring(2, 9);\n            const notification: NotificationData = {\n                id,\n                type,\n                message,\n                description,\n                duration: duration || 4000,\n            };\n\n            setNotifications((prev) => [...prev, notification]);\n        },\n        []\n    );\n\n    const dismissNotification = useCallback((id: string) => {\n        setNotifications((prev) => prev.filter((n) => n.id !== id));\n    }, []);\n\n    const value: NotificationContextValue = {\n        success: useCallback(\n            (message: string, description?: string, duration?: number) =>\n                addNotification('success', message, description, duration),\n            [addNotification]\n        ),\n        error: useCallback(\n            (message: string, description?: string, duration?: number) =>\n                addNotification('error', message, description, duration),\n            [addNotification]\n        ),\n        warning: useCallback(\n            (message: string, description?: string, duration?: number) =>\n                addNotification('warning', message, description, duration),\n            [addNotification]\n        ),\n        info: useCallback(\n            (message: string, description?: string, duration?: number) =>\n                addNotification('info', message, description, duration),\n            [addNotification]\n        ),\n    };\n\n    return (\n        <NotificationContext.Provider value={value}>\n            {children}\n            <NotificationContainer notifications={notifications} onDismiss={dismissNotification} />\n        </NotificationContext.Provider>\n    );\n}\n","function getGuestWishlistKey(): string {\n  if (typeof window === 'undefined') return 'guest_wishlist';\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\n    const config = require('@/lib/api-adapter/config').getCurrentConfig();\n    const storeId = config?.storeId || config?.storeKey;\n    return storeId ? `guest_wishlist_${storeId}` : 'guest_wishlist';\n  } catch {\n    return 'guest_wishlist';\n  }\n}\n\nexport function readGuestWishlist(): string[] {\n  if (typeof window === 'undefined') return [];\n  try {\n    return JSON.parse(localStorage.getItem(getGuestWishlistKey()) || '[]');\n  } catch {\n    return [];\n  }\n}\n\nexport function writeGuestWishlist(productIds: string[]): void {\n  if (typeof window === 'undefined') return;\n  localStorage.setItem(getGuestWishlistKey(), JSON.stringify(productIds));\n}\n\nexport function clearGuestWishlist(): void {\n  if (typeof window === 'undefined') return;\n  localStorage.removeItem(getGuestWishlistKey());\n}\n\nexport function addToGuestWishlist(productId: string): string[] {\n  const items = readGuestWishlist();\n  if (!items.includes(productId)) {\n    items.push(productId);\n    writeGuestWishlist(items);\n  }\n  return items;\n}\n\nexport function removeFromGuestWishlist(productId: string): string[] {\n  const items = readGuestWishlist().filter((id) => id !== productId);\n  writeGuestWishlist(items);\n  return items;\n}\n\nexport function isInGuestWishlist(productId: string): boolean {\n  return readGuestWishlist().includes(productId);\n}\n","'use client';\n\nimport React, { createContext, useContext, useState, useEffect, ReactNode, useCallback } from 'react';\nimport { WishlistApi } from '@/lib/Apis/apis/wishlist-api';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { useAuth } from './AuthProvider';\nimport { useMemo } from 'react';\nimport { ProductsApi, Wishlist, Product } from '@/lib/Apis';\nimport { useNotification } from './NotificationProvider';\nimport {\n  readGuestWishlist,\n  writeGuestWishlist,\n  clearGuestWishlist,\n  addToGuestWishlist,\n  removeFromGuestWishlist,\n} from '@/lib/utils/guestWishlist';\n\n\ninterface WishlistContextType extends Wishlist {\n  addToWishlist: (product: Product) => Promise<boolean>;\n  removeFromWishlist: (productId: string) => Promise<void>;\n  isInWishlist: (productId: string) => boolean;\n  getWishlistCount: () => number;\n  refreshWishlist: () => Promise<void>;\n  clearWishlist: () => Promise<void>;\n  mergeGuestWishlist: () => Promise<void>;\n}\n\nconst WishlistContext = createContext<WishlistContextType | undefined>(undefined);\n\nexport function WishlistProvider({ children }: { children: ReactNode }) {\n  const [state, setState] = useState<Wishlist>({\n    _id: '',\n    createdAt: new Date(),\n    updatedAt: new Date(),\n    userId: '',\n    products: [],\n  } as unknown as Wishlist);\n\n  const { isAuthenticated } = useAuth() || {};\n  const notification = useNotification();\n  const wishlistApi = useMemo(() => new WishlistApi(AXIOS_CONFIG), []);\n\n  const fetchWishlist = useCallback(async () => {\n    if (!isAuthenticated) {\n      const guestProducts = readGuestWishlist();\n      setState(prev => ({\n        ...prev,\n        isLoading: false,\n        products: guestProducts,\n      }));\n      return;\n    }\n\n    setState(prev => ({ ...prev, isLoading: true, error: null }));\n\n    try {\n      const response = await wishlistApi.getWishlist();\n      const responseData = response?.data;\n\n      setState({\n        ...responseData,\n        isLoading: false,\n        error: null,\n      } as unknown as Wishlist);\n    } catch (error) {\n      console.error('Error fetching wishlist:', error);\n      setState(prev => ({\n        ...prev,\n        isLoading: false,\n        error: error instanceof Error ? error.message : 'Failed to load wishlist',\n      }));\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isAuthenticated]);\n\n\n  const isInWishlist = useCallback((productId: string): boolean => {\n    if (!state.products) return false;\n    return state.products.some((id: any) => {\n      const idToCompare = typeof id === 'string' ? id : id?._id;\n      return idToCompare === productId;\n    });\n  }, [state.products]);\n\n  const getWishlistCount = useCallback((): number => {\n    return Math.max(0, state.products?.length || 0);\n  }, [state.itemCount, state.products]);\n\n  useEffect(() => {\n    fetchWishlist();\n  }, [fetchWishlist]);\n\n  const addToWishlist = useCallback(async (product: Product): Promise<boolean> => {\n    const productId = product?._id || '';\n\n    if (!isAuthenticated) {\n      if (isInWishlist(productId)) return false;\n\n      const newProducts = addToGuestWishlist(productId);\n      setState(prev => ({\n        ...prev,\n        products: newProducts,\n        itemCount: newProducts.length,\n      }));\n      notification.success(\n        'Added to wishlist',\n        `${product?.name || 'Item'} was added to your wishlist.`\n      );\n      return true;\n    }\n\n    try {\n      if (isInWishlist(productId)) {\n        return false;\n      }\n\n      // Optimistic update\n      setState(prev => {\n        const currentProducts = prev.products || [];\n        const newProducts = [...currentProducts, productId];\n        return {\n          ...prev,\n          products: newProducts,\n          itemCount: (prev.itemCount || 0) + 1,\n          isLoading: false,\n          error: null,\n        };\n      });\n\n      notification.success(\n        'Added to wishlist',\n        `${product?.name || 'Item'} was added to your wishlist.`\n      );\n\n      const response = await wishlistApi.addToWishlist(productId);\n      const responseData = response?.data;\n\n      if (responseData) {\n        setState({\n          ...responseData,\n          isLoading: false,\n          error: null,\n        } as unknown as Wishlist);\n      }\n\n      return true;\n    } catch (error) {\n      console.error('Error adding to wishlist:', error);\n      await fetchWishlist();\n      notification.error(\n        'Could not add to wishlist',\n        'Something went wrong while adding this item. Please try again.'\n      );\n      throw error;\n    }\n  }, [isAuthenticated, isInWishlist, wishlistApi, fetchWishlist, notification]);\n\n  const removeFromWishlist = useCallback(async (productId: string) => {\n    if (!isAuthenticated) {\n      const newProducts = removeFromGuestWishlist(productId);\n      setState(prev => ({\n        ...prev,\n        products: newProducts,\n        itemCount: newProducts.length,\n      }));\n      notification.success(\n        'Removed from wishlist',\n        'The item has been removed from your wishlist.'\n      );\n      return;\n    }\n\n    try {\n      // Optimistic update\n      setState(prev => {\n        const newProducts = prev.products.filter((id: any) => {\n          const idToCompare = typeof id === 'string' ? id : id?._id;\n          return idToCompare !== productId;\n        });\n        return {\n          ...prev,\n          products: newProducts,\n          itemCount: Math.max(0, (prev.itemCount || 0) - 1),\n        };\n      });\n\n      const response = await wishlistApi.removeFromWishlist(productId);\n      const responseData = response?.data;\n\n      if (responseData) {\n        setState({\n          ...responseData,\n          isLoading: false,\n          error: null,\n        } as unknown as Wishlist);\n      }\n\n      notification.success(\n        'Removed from wishlist',\n        'The item has been removed from your wishlist.'\n      );\n    } catch (error) {\n      console.error('Error removing from wishlist:', error);\n      await fetchWishlist();\n      notification.error(\n        'Could not remove item',\n        'Something went wrong while removing this item. Please try again.'\n      );\n      throw error;\n    }\n  }, [isAuthenticated, wishlistApi, fetchWishlist, notification]);\n\n  const clearWishlist = useCallback(async () => {\n    if (!isAuthenticated) {\n      clearGuestWishlist();\n      setState(prev => ({\n        ...prev,\n        products: [],\n        itemCount: 0,\n      }));\n      notification.success(\n        'Wishlist cleared',\n        'All items have been removed from your wishlist.'\n      );\n      return;\n    }\n\n    try {\n      await wishlistApi.clearWishlist();\n      setState(prev => ({\n        ...prev,\n        products: [],\n        itemCount: 0,\n      }));\n      notification.success(\n        'Wishlist cleared',\n        'All items have been removed from your wishlist.'\n      );\n    } catch (error) {\n      console.error('Error clearing wishlist:', error);\n      notification.error(\n        'Could not clear wishlist',\n        'We could not clear your wishlist. Please try again.'\n      );\n      throw error;\n    }\n  }, [isAuthenticated, wishlistApi, notification]);\n\n  const refreshWishlist = useCallback(async () => {\n    await fetchWishlist();\n  }, [fetchWishlist]);\n\n  const mergeGuestWishlist = useCallback(async () => {\n    const guestProductIds = readGuestWishlist();\n    if (guestProductIds.length === 0) return;\n\n    try {\n      // Fetch current server wishlist\n      let serverProductIds: string[] = [];\n      try {\n        const res = await wishlistApi.getWishlist();\n        serverProductIds = (res.data?.products || []).map((id: any) =>\n          typeof id === 'string' ? id : id?._id\n        );\n      } catch {\n        // Server wishlist may be empty\n      }\n\n      // Add guest items not already on server\n      const toAdd = guestProductIds.filter((id) => !serverProductIds.includes(id));\n      await Promise.all(toAdd.map((id) => wishlistApi.addToWishlist(id).catch(() => null)));\n\n      clearGuestWishlist();\n      await fetchWishlist();\n    } catch (error) {\n      console.error('Failed to merge guest wishlist:', error);\n      clearGuestWishlist();\n    }\n  }, [wishlistApi, fetchWishlist]);\n\n  return (\n    <WishlistContext.Provider\n      value={{\n        ...state,\n        addToWishlist,\n        removeFromWishlist,\n        isInWishlist,\n        getWishlistCount,\n        refreshWishlist,\n        clearWishlist,\n        mergeGuestWishlist,\n      }}\n    >\n      {children}\n    </WishlistContext.Provider>\n  );\n}\n\nexport const useWishlist = (): WishlistContextType => {\n  const context = useContext(WishlistContext);\n  if (context === undefined) {\n    throw new Error('useWishlist must be used within a WishlistProvider');\n  }\n  return context;\n};\n","export interface GuestCartItem {\n  productVariantId: string;\n  quantity: number;\n}\n\nfunction getGuestCartKey(): string {\n  if (typeof window === 'undefined') return 'guest_cart';\n  try {\n    // eslint-disable-next-line @typescript-eslint/no-var-requires\n    const config = require('@/lib/api-adapter/config').getCurrentConfig();\n    const storeId = config?.storeId || config?.storeKey;\n    return storeId ? `guest_cart_${storeId}` : 'guest_cart';\n  } catch {\n    return 'guest_cart';\n  }\n}\n\nexport function readGuestCart(): GuestCartItem[] {\n  if (typeof window === 'undefined') return [];\n  try {\n    return JSON.parse(localStorage.getItem(getGuestCartKey()) || '[]');\n  } catch {\n    return [];\n  }\n}\n\nexport function writeGuestCart(items: GuestCartItem[]): void {\n  if (typeof window === 'undefined') return;\n  localStorage.setItem(getGuestCartKey(), JSON.stringify(items));\n}\n\nexport function clearGuestCart(): void {\n  if (typeof window === 'undefined') return;\n  localStorage.removeItem(getGuestCartKey());\n}\n\nexport function addToGuestCart(variantId: string, quantity: number): GuestCartItem[] {\n  const items = readGuestCart();\n  const existing = items.find((i) => i.productVariantId === variantId);\n  if (existing) {\n    existing.quantity += quantity;\n  } else {\n    items.push({ productVariantId: variantId, quantity });\n  }\n  writeGuestCart(items);\n  return items;\n}\n\nexport function updateGuestCartItem(variantId: string, quantity: number): GuestCartItem[] {\n  const items = readGuestCart().map((i) =>\n    i.productVariantId === variantId ? { ...i, quantity } : i\n  );\n  writeGuestCart(items);\n  return items;\n}\n\nexport function removeFromGuestCart(variantId: string): GuestCartItem[] {\n  const items = readGuestCart().filter((i) => i.productVariantId !== variantId);\n  writeGuestCart(items);\n  return items;\n}\n\nexport function getGuestCartCount(): number {\n  return readGuestCart().reduce((sum, item) => sum + item.quantity, 0);\n}\n","'use client';\n\nimport React, { createContext, useContext, useState, useEffect, useCallback, useRef } from 'react';\nimport globalAxios from 'axios';\nimport { useAuth } from './AuthProvider';\nimport { CartResponseDto, CartItemPopulated, PopulatedOrder, Product } from '@/lib/Apis/models';\nimport { CartApi, WishlistApi } from '@/lib/Apis';\nimport { getApiConfiguration, getAuthToken } from '@/lib/api-adapter';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { useNotification } from './NotificationProvider';\nimport { useWishlist } from './WishlistProvider';\nimport {\n  readGuestCart,\n  writeGuestCart,\n  clearGuestCart,\n  addToGuestCart,\n  updateGuestCartItem,\n  removeFromGuestCart,\n} from '@/lib/utils/guestCart';\n\ninterface CartContextValue {\n  cart: CartResponseDto | null;\n  isLoading: boolean;\n  isFetching: boolean;\n  cartError: string | null;\n  clearCartError: () => void;\n  addToCart: (productId: string, quantity?: number, variantId?: string) => Promise<void>;\n  updateQuantity: (productId: string, quantity: number) => void;\n  removeFromCart: (productId: string) => Promise<void>;\n  clearCart: () => Promise<void>;\n  refreshCart: (deliveryMethod?: string, shippingRateId?: string, discountId?: string, userAddressId?: string, guestAddress?: Record<string, any>) => Promise<void>;\n  reorderFromOrder: (order: PopulatedOrder) => Promise<void>;\n  saveForLater: (item: CartItemPopulated) => Promise<void>;\n  /** Merge localStorage guest cart into the server cart after login. No-op if guest cart is empty. */\n  mergeGuestCart: () => Promise<void>;\n}\n\nconst CartContext = createContext<CartContextValue | undefined>(undefined);\n\nexport function useCart() {\n  const context = useContext(CartContext);\n  if (!context) {\n    throw new Error('useCart must be used within CartProvider');\n  }\n  return context;\n}\n\ninterface CartProviderProps {\n  children: React.ReactNode;\n}\n\nexport function CartProvider({ children }: CartProviderProps) {\n  const [cart, setCart] = useState<CartResponseDto | null>(null);\n  const [isLoading, setIsLoading] = useState(false);\n  const [isFetching, setIsFetching] = useState(true);\n  const [cartError, setCartError] = useState<string | null>(null);\n  const clearCartError = useCallback(() => setCartError(null), []);\n  const { isAuthenticated } = useAuth();\n  const notification = useNotification();\n  const { addToWishlist } = useWishlist();\n\n  // Ref to always have the latest cart state in async functions without stale closures\n  const cartRef = useRef<CartResponseDto | null>(cart);\n  // Prevent older cart reads from overwriting a newer mutation response.\n  const cartFetchSequenceRef = useRef(0);\n  const cartMutationSequenceRef = useRef(0);\n  const activeCartFetchesRef = useRef(0);\n  // Cart updates replace the full server cart, so serialize adds to avoid two\n  // rapid clicks building payloads from the same stale snapshot.\n  const addQueueRef = useRef<Promise<void>>(Promise.resolve());\n  // Debounce timers for quantity updates, keyed by productId\n  const pendingUpdatesRef = useRef<Map<string, ReturnType<typeof setTimeout>>>(new Map());\n\n  useEffect(() => {\n    cartRef.current = cart;\n  }, [cart]);\n\n  const commitCart = useCallback((nextCart: CartResponseDto | null) => {\n    cartRef.current = nextCart;\n    setCart(nextCart);\n  }, []);\n\n  // ─── Calculate guest cart prices via onspot endpoint ─────────────────────\n  const calculateGuestCart = useCallback(async (deliveryMethod?: string, shippingRateId?: string, discountId?: string, guestAddress?: Record<string, any>) => {\n    const requestId = ++cartFetchSequenceRef.current;\n    const mutationVersion = cartMutationSequenceRef.current;\n    activeCartFetchesRef.current += 1;\n    setIsFetching(true);\n    const guestItems = readGuestCart();\n    try {\n      if (guestItems.length === 0) {\n        if (requestId === cartFetchSequenceRef.current && mutationVersion === cartMutationSequenceRef.current) {\n          commitCart(null);\n        }\n        return;\n      }\n      const body: any = { items: guestItems };\n      if (deliveryMethod) body.deliveryMethod = deliveryMethod;\n      if (discountId) body.discountId = discountId;\n      if (guestAddress) body.deliveryAddress = guestAddress;\n      const response = await new CartApi(AXIOS_CONFIG).handleVisitorCart(\n        body,\n        undefined, // no userId for guests\n        shippingRateId || undefined\n      );\n      if (\n        response.data &&\n        requestId === cartFetchSequenceRef.current &&\n        mutationVersion === cartMutationSequenceRef.current\n      ) {\n        commitCart(response.data);\n      }\n    } catch (error) {\n      console.error('Failed to calculate guest cart:', error);\n      throw error;\n    } finally {\n      activeCartFetchesRef.current = Math.max(0, activeCartFetchesRef.current - 1);\n      if (activeCartFetchesRef.current === 0) setIsFetching(false);\n    }\n  }, [commitCart]);\n\n  // ─── Refresh cart (authenticated or guest) ────────────────────────────────\n  const refreshCart = useCallback(async (deliveryMethod?: string, shippingRateId?: string, discountId?: string, userAddressId?: string, guestAddress?: Record<string, any>) => {\n    if (!isAuthenticated) {\n      return calculateGuestCart(deliveryMethod, shippingRateId, discountId, guestAddress);\n    }\n\n    const requestId = ++cartFetchSequenceRef.current;\n    const mutationVersion = cartMutationSequenceRef.current;\n    activeCartFetchesRef.current += 1;\n    setIsFetching(true);\n    try {\n      let response;\n      if (discountId) {\n        // Use globalAxios directly to avoid the generated SDK spreading `options.params`\n        // into the axios config, which causes params to be appended twice to the URL.\n        const params: Record<string, string> = { discountId };\n        if (deliveryMethod) params.deliveryMethod = deliveryMethod;\n        if (shippingRateId) params.shippingRateId = shippingRateId;\n        if (userAddressId) params.userAddressId = userAddressId;\n        response = await globalAxios.get<CartResponseDto>(\n          `${AXIOS_CONFIG.basePath}/cart/user/mine`,\n          { params }\n        );\n      } else {\n        response = await new CartApi(getApiConfiguration()).getUserCart(undefined, deliveryMethod, shippingRateId, undefined, userAddressId);\n      }\n      if (\n        response.data &&\n        requestId === cartFetchSequenceRef.current &&\n        mutationVersion === cartMutationSequenceRef.current\n      ) {\n        commitCart(response.data);\n      }\n    } catch (error) {\n      console.error('Failed to fetch cart:', error);\n      throw error;\n    } finally {\n      activeCartFetchesRef.current = Math.max(0, activeCartFetchesRef.current - 1);\n      if (activeCartFetchesRef.current === 0) setIsFetching(false);\n    }\n  }, [isAuthenticated, calculateGuestCart, commitCart]);\n\n  useEffect(() => {\n    refreshCart();\n  }, [refreshCart]);\n\n  // ─── Add to cart ──────────────────────────────────────────────────────────\n  const addToCart = useCallback(async (productId: string, quantity: number = 1, variantId?: string) => {\n    const runAdd = async () => {\n      const targetVariantId = variantId || productId;\n      // Invalidate any read that began before this mutation. A token can be\n      // available briefly before AuthProvider has restored the cached user.\n      cartMutationSequenceRef.current += 1;\n      cartFetchSequenceRef.current += 1;\n      const hasAuthenticatedSession = isAuthenticated || Boolean(getAuthToken());\n\n      setIsLoading(true);\n      try {\n        if (!hasAuthenticatedSession) {\n          // Persist first, but only announce success after the priced cart has\n          // been returned and committed to visible state.\n          addToGuestCart(targetVariantId, quantity);\n          await calculateGuestCart();\n          notification.success('Added to cart', 'The item was added to your cart.');\n          return;\n        }\n\n        const currentCart = cartRef.current;\n        const currentItems = currentCart?.cartBody?.items || [];\n\n        let itemsFound = false;\n        const simplifiedItems = currentItems.map((item: CartItemPopulated) => {\n          let q = Number(item.quantity) || 0;\n          if (String(item.productVariantId) === String(targetVariantId)) {\n            itemsFound = true;\n            q += Number(quantity);\n          }\n          return {\n            _id: item._id,\n            productVariantId: item.productVariantId,\n            quantity: q\n          };\n        });\n\n        if (!itemsFound) {\n          simplifiedItems.push({\n            productVariantId: targetVariantId,\n            quantity: Number(quantity)\n          } as any);\n        }\n\n        const payload = {\n          _id: currentCart?.cartBody?._id,\n          items: simplifiedItems\n        };\n\n        const response = await new CartApi(getApiConfiguration()).handleUserCart(payload as any);\n        if (!response.data) throw new Error('The cart update returned no data.');\n\n        commitCart(response.data);\n        notification.success('Added to cart', 'The item was added to your cart.');\n      } catch (error: any) {\n        console.error('Add to cart error:', error);\n        const errorMessage = error.response?.data?.message || '';\n\n        const isExistingItemError = errorMessage.toLowerCase().includes('available') ||\n          errorMessage.toLowerCase().includes('stock') ||\n          errorMessage.toLowerCase().includes('quantity');\n\n        await refreshCart();\n\n        if (isExistingItemError) {\n          const msg = 'Some items in your cart exceed available stock and have been adjusted.';\n          notification.error('Stock limit reached', msg);\n          setCartError(msg);\n        } else {\n          const msg = errorMessage || 'Could not add item to cart. Please try again.';\n          notification.error('Could not add item', msg);\n          setCartError(msg);\n        }\n        throw error;\n      } finally {\n        setIsLoading(false);\n      }\n    };\n\n    const queuedAdd = addQueueRef.current.then(runAdd, runAdd);\n    addQueueRef.current = queuedAdd.catch(() => undefined);\n    return queuedAdd;\n  }, [isAuthenticated, notification, refreshCart, calculateGuestCart, commitCart]);\n\n  // ─── Update quantity ──────────────────────────────────────────────────────\n  const updateQuantity = useCallback((productId: string, quantity: number) => {\n    const targetQ = Number(quantity);\n\n    if (!isAuthenticated) {\n      // Guest: update localStorage immediately, debounce recalculate\n      updateGuestCartItem(productId, targetQ);\n      // Optimistic UI\n      setCart(prev => {\n        if (!prev) return null;\n        const newItems = prev.cartBody.items.map(item => {\n          if (String(item.productVariantId) === String(productId)) {\n            return { ...item, quantity: targetQ };\n          }\n          return item;\n        });\n        const newSubtotal = Math.round(newItems.reduce((acc, item) => acc + (item.productVariantData?.finalPrice || 0) * item.quantity, 0) * 100) / 100;\n        return { ...prev, subTotal: newSubtotal, total: newSubtotal + (prev.shipping || 0) + (prev.tax || 0), cartBody: { ...prev.cartBody, items: newItems } };\n      });\n      const existing = pendingUpdatesRef.current.get(productId);\n      if (existing) clearTimeout(existing);\n      const timer = setTimeout(() => {\n        pendingUpdatesRef.current.delete(productId);\n        calculateGuestCart().catch(() => {});\n      }, 400);\n      pendingUpdatesRef.current.set(productId, timer);\n      return;\n    }\n\n    const currentCart = cartRef.current;\n    if (!currentCart) return;\n\n    // Optimistic UI Update immediately so the UI feels responsive\n    setCart(prev => {\n      if (!prev) return null;\n      const newItems = prev.cartBody.items.map(item => {\n        if (String(item.productVariantId) === String(productId)) {\n          return { ...item, quantity: targetQ };\n        }\n        return item;\n      });\n      const newSubtotal = Math.round(newItems.reduce((acc, item) => acc + (item.productVariantData.finalPrice || 0) * item.quantity, 0) * 100) / 100;\n      return {\n        ...prev,\n        subTotal: newSubtotal,\n        total: newSubtotal + (prev.shipping || 0) + (prev.tax || 0),\n        cartBody: { ...prev.cartBody, items: newItems }\n      };\n    });\n\n    const existingTimer = pendingUpdatesRef.current.get(productId);\n    if (existingTimer) clearTimeout(existingTimer);\n\n    const timer = setTimeout(async () => {\n      pendingUpdatesRef.current.delete(productId);\n      const snapshotCart = cartRef.current;\n      if (!snapshotCart) return;\n\n      setIsLoading(true);\n      try {\n        const simplifiedItems = snapshotCart.cartBody.items.map(item => ({\n          _id: item._id,\n          productVariantId: item.productVariantId,\n          quantity: item.quantity\n        }));\n\n        const payload = { _id: snapshotCart.cartBody._id, items: simplifiedItems };\n        const response = await new CartApi(getApiConfiguration()).handleUserCart(payload as any);\n\n        if (response.data) {\n          setCart(response.data);\n        } else {\n          await refreshCart();\n        }\n      } catch (error: any) {\n        console.error('Update quantity error:', error);\n        await refreshCart();\n        const msg = error.response?.data?.message || 'Failed to update quantity. Please try again.';\n        notification.error('Update failed', msg);\n        setCartError(msg);\n      } finally {\n        setIsLoading(false);\n      }\n    }, 400);\n\n    pendingUpdatesRef.current.set(productId, timer);\n  }, [isAuthenticated, refreshCart, calculateGuestCart, notification]);\n\n  // ─── Remove from cart ─────────────────────────────────────────────────────\n  const removeFromCart = useCallback(async (productId: string) => {\n    if (!isAuthenticated) {\n      removeFromGuestCart(productId);\n      setCart(prev => {\n        if (!prev) return null;\n        const newItems = prev.cartBody.items.filter(item => String(item.productVariantId) !== String(productId));\n        if (newItems.length === 0) return null;\n        const newSubtotal = Math.round(newItems.reduce((acc, item) => acc + (item.productVariantData?.finalPrice || 0) * item.quantity, 0) * 100) / 100;\n        return { ...prev, subTotal: newSubtotal, total: newSubtotal + (prev.shipping || 0) + (prev.tax || 0), cartBody: { ...prev.cartBody, items: newItems } };\n      });\n      await calculateGuestCart();\n      return;\n    }\n\n    const currentCart = cartRef.current;\n    if (!currentCart) return;\n    setIsLoading(true);\n    const oldCart = currentCart;\n\n    setCart(prev => {\n      if (!prev) return null;\n      const newItems = prev.cartBody.items.filter(item => String(item.productVariantId) !== String(productId));\n      const newSubtotal = Math.round(newItems.reduce((acc, item) => acc + (item.productVariantData.finalPrice || 0) * item.quantity, 0) * 100) / 100;\n      return {\n        ...prev,\n        subTotal: newSubtotal,\n        total: newSubtotal + (prev.shipping || 0) + (prev.tax || 0),\n        cartBody: { ...prev.cartBody, items: newItems }\n      };\n    });\n\n    try {\n      const itemsToKeep = currentCart.cartBody.items.filter(item => String(item.productVariantId) !== String(productId));\n      const simplifiedItems = itemsToKeep.map(item => ({\n        _id: item._id,\n        productVariantId: item.productVariantId,\n        quantity: item.quantity\n      }));\n\n      if (simplifiedItems.length === 0) {\n        await new CartApi(getApiConfiguration()).clearCart();\n        setCart(null);\n      } else {\n        const payload = { _id: currentCart.cartBody._id, items: simplifiedItems };\n        const response = await new CartApi(getApiConfiguration()).handleUserCart(payload as any);\n        if (response.data) {\n          setCart(response.data);\n        }\n      }\n    } catch (error: any) {\n      console.error('Remove from cart error:', error);\n      setCart(oldCart);\n      notification.error('Could not remove item', error.response?.data?.message || 'Failed to remove item.');\n      throw error;\n    } finally {\n      setIsLoading(false);\n    }\n  }, [isAuthenticated, notification, calculateGuestCart]);\n\n  // ─── Clear cart ───────────────────────────────────────────────────────────\n  const clearCart = useCallback(async () => {\n    // Always clear localStorage guest cart first (synchronous, prevents merge race)\n    clearGuestCart();\n    setCart(null);\n\n    if (!isAuthenticated) return;\n\n    setIsLoading(true);\n    try {\n      await new CartApi(getApiConfiguration()).clearCart();\n    } catch (error: any) {\n      console.error('Clear cart error:', error);\n      notification.error('Could not clear cart', error.response?.data?.message || 'Failed to clear cart.');\n      throw error;\n    } finally {\n      setIsLoading(false);\n    }\n  }, [isAuthenticated, notification]);\n\n  // ─── Merge guest cart on login ────────────────────────────────────────────\n  const mergeGuestCart = useCallback(async () => {\n    const guestItems = readGuestCart();\n    if (guestItems.length === 0) return;\n\n    cartMutationSequenceRef.current += 1;\n    cartFetchSequenceRef.current += 1;\n    try {\n      // Fetch existing server cart\n      let serverItems: Array<{ productVariantId: string; quantity: number }> = [];\n      try {\n        const res = await new CartApi(getApiConfiguration()).getUserCart();\n        serverItems = (res.data?.cartBody?.items || []).map((item: CartItemPopulated) => ({\n          productVariantId: String(item.productVariantId),\n          quantity: Number(item.quantity) || 0,\n        }));\n      } catch {\n        // Server cart may be empty — that's fine\n      }\n\n      // Merge: add guest quantities to existing items, append new items\n      const merged = [...serverItems];\n      for (const guestItem of guestItems) {\n        const existing = merged.find(i => i.productVariantId === guestItem.productVariantId);\n        if (existing) {\n          existing.quantity += guestItem.quantity;\n        } else {\n          merged.push({ productVariantId: guestItem.productVariantId, quantity: guestItem.quantity });\n        }\n      }\n\n      const res = await new CartApi(getApiConfiguration()).handleUserCart({ items: merged } as any);\n      if (res.data) commitCart(res.data);\n      clearGuestCart();\n    } catch (error: any) {\n      console.error('Failed to merge guest cart:', error);\n      // Keep the local cart so a temporary network/auth failure cannot discard\n      // items the customer added before signing in.\n    }\n  }, [commitCart]);\n\n  // ─── Reorder from order ───────────────────────────────────────────────────\n  const reorderFromOrder = useCallback(async (order: PopulatedOrder) => {\n    if (!isAuthenticated) return;\n    if (!order.items || order.items.length === 0) {\n      notification.warning('No items to reorder', 'This order has no items to add to cart.');\n      return;\n    }\n    setIsLoading(true);\n    try {\n      const currentCart = cartRef.current;\n      const currentItems = currentCart?.cartBody?.items || [];\n\n      const simplifiedItems = currentItems.map((item: CartItemPopulated) => ({\n        _id: item._id,\n        productVariantId: item.productVariantId,\n        quantity: item.quantity\n      }));\n\n      for (const orderItem of order.items) {\n        const variantId = orderItem.productVariantId;\n        if (!variantId) continue;\n\n        const existingIndex = simplifiedItems.findIndex(\n          item => String(item.productVariantId) === String(variantId)\n        );\n\n        if (existingIndex >= 0) {\n          simplifiedItems[existingIndex].quantity += orderItem.quantity;\n        } else {\n          simplifiedItems.push({ productVariantId: variantId, quantity: orderItem.quantity } as any);\n        }\n      }\n\n      const payload = { _id: currentCart?.cartBody?._id, items: simplifiedItems };\n      const response = await new CartApi(getApiConfiguration()).handleUserCart(payload as any);\n      if (response.data) {\n        setCart(response.data);\n        notification.success('Items added to cart', `${order.items.length} item(s) from your order have been added to your cart.`);\n      }\n    } catch (error: any) {\n      console.error('Reorder error:', error);\n      notification.error('Could not reorder', error.response?.data?.message || 'Failed to add items to cart.');\n      throw error;\n    } finally {\n      setIsLoading(false);\n    }\n  }, [isAuthenticated, notification]);\n\n  // ─── Save for later ───────────────────────────────────────────────────────\n  const saveForLater = useCallback(async (item: CartItemPopulated) => {\n    if (!isAuthenticated) {\n      notification.error('Sign-in required', 'Please sign in to save items for later.');\n      return;\n    }\n\n    const productId =\n      (item as any).productId ||\n      (item as any).product?._id ||\n      (item as any).product?.id ||\n      (item.productVariantData as any).productId ||\n      (item.productVariantData as any).product?._id ||\n      (item.productVariantData as any).product?.id ||\n      item.productVariantData?._id ||\n      item.productVariantData?.id;\n\n    if (!productId) {\n      notification.error('Cannot save item', 'Unable to identify the product.');\n      return;\n    }\n\n    const product: Product = {\n      _id: productId,\n      id: productId,\n      name: item.productVariantData?.name || 'Product',\n    } as unknown as Product;\n\n    setIsLoading(true);\n    try {\n      const wasAdded = await addToWishlist(product);\n      await removeFromCart(item.productVariantId);\n      if (wasAdded) {\n        notification.success('Saved for later', 'Item moved to your wishlist for future purchase.');\n      } else {\n        notification.info('Already in wishlist', 'Item removed from cart (it was already in your wishlist).');\n      }\n    } catch (error: any) {\n      console.error('Save for later error:', error);\n      notification.error('Could not save for later', error.response?.data?.message || 'Failed to move item to wishlist.');\n      throw error;\n    } finally {\n      setIsLoading(false);\n    }\n  }, [isAuthenticated, notification, removeFromCart, addToWishlist]);\n\n  const value = {\n    cart,\n    isLoading,\n    isFetching,\n    cartError,\n    clearCartError,\n    addToCart,\n    updateQuantity,\n    removeFromCart,\n    clearCart,\n    refreshCart,\n    reorderFromOrder,\n    saveForLater,\n    mergeGuestCart,\n  };\n\n  return <CartContext.Provider value={value}>{children}</CartContext.Provider>;\n}\n","'use client';\n\nimport React, { createContext, useContext } from 'react';\n\ninterface BasePathContextValue {\n  basePath: string;\n  buildPath: (path: string) => string;\n}\n\nconst BasePathContext = createContext<BasePathContextValue | undefined>(undefined);\n\nexport function BasePathProvider({ basePath = '', children }: { basePath?: string; children: React.ReactNode }) {\n  const normalized = basePath ? (basePath.startsWith('/') ? basePath : `/${basePath}`) : '';\n\n  const buildPath = (path: string) => {\n    if (!normalized) return path;\n    if (!path) return normalized;\n    if (path.startsWith(normalized + '/')) return path; // already prefixed\n    if (path.startsWith('/')) return `${normalized}${path}`;\n    return `${normalized}/${path}`;\n  };\n\n  return (\n    <BasePathContext.Provider value={{ basePath: normalized, buildPath }}>\n      {children}\n    </BasePathContext.Provider>\n  );\n}\n\nexport function useBasePath(): BasePathContextValue {\n  const ctx = useContext(BasePathContext);\n  if (!ctx) throw new Error('useBasePath must be used within BasePathProvider');\n  return ctx;\n}\n\n\n","/**\n * Discount Utility Functions\n * Handles calculation and validation of discounts based on the V2 refactor\n */\n\nimport { Discount } from '@/lib/Apis/models/discount';\nimport { \n  DiscountTypeEnum, \n  DiscountValueTypeEnum, \n  DiscountStateEnum \n} from '@/lib/Apis/models/discount';\n\nexport { DiscountTypeEnum, DiscountValueTypeEnum, DiscountStateEnum };\n\nexport interface DiscountsInsightsDto {\n  totalDiscounts: number;\n  totalActive: number;\n  totalInactive: number;\n  totalExpired: number;\n  totalScheduled: number;\n  totalItemDiscounts: number;\n  totalCouponCodes: number;\n}\n\n/**\n * Calculate discount amount for a given price\n * @param price - Original price\n * @param discount - Discount object\n * @returns Calculated discount amount\n */\nexport function calculateDiscountAmount(price: number, discount: Discount): number {\n  // Skip state validation - trust that backend already validated the discount\n  // Just check if we have the required fields to calculate\n  if (!discount || !discount.value) {\n    return 0;\n  }\n\n  let amount = 0;\n  const valueType = String(discount.valueType).toUpperCase();\n\n  if (valueType === 'PERCENTAGE') {\n    amount = (price * discount.value) / 100;\n    // Apply cap if specified (mainly for coupon codes)\n    if (discount.cappedAt && amount > discount.cappedAt) {\n      amount = discount.cappedAt;\n    }\n  } else if (valueType === 'FIXED_AMOUNT' || valueType === 'FIXEDAMOUNT') {\n    amount = discount.value;\n  }\n\n  const finalAmount = Math.min(amount, price);\n  return Math.round(finalAmount * 100) / 100; // Round to 2 decimal places\n}\n\n/**\n * Calculate final price after discount\n * @param price - Original price\n * @param discount - Discount object\n * @returns Final discounted price\n */\nexport function calculateFinalPrice(price: number, discount: Discount): number {\n  const discountAmount = calculateDiscountAmount(price, discount);\n  return Math.max(0, price - discountAmount);\n}\n\n/**\n * Check if a discount is currently valid (active and not expired/scheduled)\n * @param discount - Discount object\n * @returns True if discount is valid and can be applied\n */\nexport function isDiscountValid(discount: Discount): boolean {\n  if (!discount.isActive) {\n    return false;\n  }\n\n  const now = new Date();\n\n  // Check if scheduled\n  if (discount.startsAt && new Date(discount.startsAt) > now) {\n    return false; // Not yet started\n  }\n\n  // Check if expired\n  if (discount.expiresAt && new Date(discount.expiresAt) < now) {\n    return false; // Already expired\n  }\n\n  // Check state\n  const activeStates = [\n    DiscountStateEnum.ACTIVE,\n    'ACTIVE',\n  ];\n  \n  if (!activeStates.includes(discount.state as any)) {\n    return false;\n  }\n\n  return true;\n}\n\n/**\n * Check if a product is eligible for an item discount\n * @param productId - Product ID\n * @param variantId - Variant ID (optional)\n * @param discount - Discount object\n * @returns True if product/variant is eligible\n */\nexport function isProductEligibleForDiscount(\n  productId: string,\n  variantId: string | undefined,\n  discount: Discount\n): boolean {\n  // Check variant eligibility first (most specific)\n  if (variantId && discount.variantsEligible?.includes(variantId)) {\n    return true;\n  }\n\n  // Check product eligibility\n  if (discount.productsEligible?.includes(productId)) {\n    return true;\n  }\n\n  return false;\n}\n\n/**\n * Format discount display text\n * @param discount - Discount object\n * @returns Formatted string like \"20% OFF\" or \"$10 OFF\"\n */\nexport function formatDiscountDisplay(discount: Discount): string {\n  const valueType = String(discount.valueType).toUpperCase();\n  \n  if (valueType === 'PERCENTAGE') {\n    return `${discount.value}% OFF`;\n  } else {\n    return `$${discount.value.toFixed(2)} OFF`;\n  }\n}\n\n/**\n * Calculate discount amount for a list of cart items, only applying to eligible products/variants.\n * If the discount has no eligibility restrictions it applies to the full cart subtotal.\n * @param items - Cart items (CartItemPopulated[])\n * @param discount - Discount object\n * @returns Total discount amount\n */\nexport function calculateDiscountForCartItems(\n  items: Array<{\n    productVariantId?: string;\n    quantity: number;\n    productVariantData: { id?: string; _id?: string; productId: string; finalPrice: number };\n  }>,\n  discount: Discount\n): number {\n  const hasRestrictions =\n    (discount.productsEligible?.length ?? 0) > 0 ||\n    (discount.variantsEligible?.length ?? 0) > 0;\n\n  const eligibleSubtotal = items.reduce((sum, item) => {\n    if (hasRestrictions) {\n      const variantId =\n        item.productVariantId ||\n        item.productVariantData?.id ||\n        item.productVariantData?._id;\n      const productId = item.productVariantData?.productId;\n      if (!isProductEligibleForDiscount(productId, variantId, discount)) {\n        return sum;\n      }\n    }\n    return sum + item.productVariantData.finalPrice * item.quantity;\n  }, 0);\n\n  return calculateDiscountAmount(eligibleSubtotal, discount);\n}\n\n/**\n * Get discount state label\n * @param state - Discount state\n * @returns Human-readable state label\n */\nexport function getDiscountStateLabel(state: DiscountStateEnum | string): string {\n  const stateStr = String(state).toUpperCase();\n  const stateMap: Record<string, string> = {\n    'ACTIVE': 'Active',\n    'INACTIVE': 'Inactive',\n    'EXPIRED': 'Expired',\n    'SCHEDULED': 'Scheduled',\n  };\n  return stateMap[stateStr] || 'Unknown';\n}\n","'use client';\n\nimport React, { createContext, useContext, useState, useCallback } from 'react';\nimport { Discount } from '@/lib/Apis/models/discount';\nimport { CartItemPopulated } from '@/lib/Apis/models';\nimport { DiscountsApi } from '@/lib/Apis/apis/discounts-api';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { calculateDiscountAmount } from '@/lib/utils/discount';\n\ninterface DiscountContextType {\n  appliedCoupon: Discount | null;\n  couponError: string | null;\n  isValidatingCoupon: boolean;\n  validateAndApplyCoupon: (code: string, userId?: string, cartItems?: CartItemPopulated[]) => Promise<{ success: boolean; error?: string; discount?: Discount }>;\n  removeCoupon: () => void;\n  calculateCouponDiscount: (subtotal: number) => number;\n}\n\nconst DiscountContext = createContext<DiscountContextType | undefined>(undefined);\n\nexport function DiscountProvider({ children }: { children: React.ReactNode }) {\n  const [appliedCoupon, setAppliedCoupon] = useState<Discount | null>(null);\n  const [couponError, setCouponError] = useState<string | null>(null);\n  const [isValidatingCoupon, setIsValidatingCoupon] = useState(false);\n\n  const validateAndApplyCoupon = useCallback(\n    async (code: string, userId?: string, cartItems?: CartItemPopulated[]) => {\n      setIsValidatingCoupon(true);\n      setCouponError(null);\n\n      try {\n        const api = new DiscountsApi(AXIOS_CONFIG);\n        const bodyOptions = cartItems && cartItems.length > 0 ? { data: { products: cartItems } } : {};\n        const response = await api.validateCoupon(code, userId, undefined, bodyOptions);\n        const discount = response.data;\n\n        if (!discount) {\n          setCouponError('Coupon code not found');\n          setAppliedCoupon(null);\n          return { success: false, error: 'Coupon code not found' };\n        }\n\n        setAppliedCoupon(discount);\n        setCouponError(null);\n        return { success: true, discount };\n      } catch (error: any) {\n        const errorMessage =\n          error.response?.data?.message || 'Failed to validate coupon code';\n        setCouponError(errorMessage);\n        setAppliedCoupon(null);\n        return { success: false, error: errorMessage };\n      } finally {\n        setIsValidatingCoupon(false);\n      }\n    },\n    []\n  );\n\n  const removeCoupon = useCallback(() => {\n    setAppliedCoupon(null);\n    setCouponError(null);\n  }, []);\n\n  const calculateCouponDiscount = useCallback(\n    (subtotal: number): number => {\n      if (!appliedCoupon) {\n        return 0;\n      }\n      const discount = calculateDiscountAmount(subtotal, appliedCoupon);\n      return discount;\n    },\n    [appliedCoupon]\n  );\n\n  const value: DiscountContextType = {\n    appliedCoupon,\n    couponError,\n    isValidatingCoupon,\n    validateAndApplyCoupon,\n    removeCoupon,\n    calculateCouponDiscount,\n  };\n\n  return (\n    <DiscountContext.Provider value={value}>\n      {children}\n    </DiscountContext.Provider>\n  );\n}\n\nexport function useDiscountsContext() {\n  const context = useContext(DiscountContext);\n  if (!context) {\n    throw new Error('useDiscountsContext must be used within DiscountProvider');\n  }\n  return context;\n}\n\nexport type { DiscountContextType };\n","'use client';\n\nimport React, { createContext, useContext, useState, useEffect, useCallback, useRef } from 'react';\nimport { NotificationsApi } from '@/lib/Apis/apis/notifications-api';\nimport { getApiConfiguration, getAuthToken, getCurrentConfig } from '@/lib/api-adapter/config';\nimport { useAuth } from './AuthProvider';\nimport { PreferenceUpdateItemTypeEnum, UpdateNotificationSettingsDto } from '@/lib/Apis/models';\n\n// Re-export the enum for convenience\nexport type NotificationType = PreferenceUpdateItemTypeEnum;\nexport const NotificationType = PreferenceUpdateItemTypeEnum;\nexport { PreferenceUpdateItemTypeEnum };\n\nexport interface NotificationData {\n    _id: string;\n    type: NotificationType;\n    title: string;\n    body: string;\n    isRead: boolean;\n    createdAt: string;\n    data?: {\n        orderId?: string;\n        productId?: string;\n        [key: string]: any;\n    };\n}\n\nexport interface NotificationSettings {\n    _id?: string;\n    userId?: string;\n    preferences: Array<{\n        type: NotificationType;\n        settings: {\n            email?: boolean;\n            push?: boolean;\n            inApp?: boolean;\n        };\n    }>;\n}\n\ninterface NotificationCenterContextValue {\n    notifications: NotificationData[];\n    unreadCount: number;\n    isLoading: boolean;\n    isDrawerOpen: boolean;\n    settings: NotificationSettings | null;\n    openDrawer: () => void;\n    closeDrawer: () => void;\n    markAsRead: (id: string) => Promise<void>;\n    markAllAsRead: () => Promise<void>;\n    deleteNotification: (id: string) => Promise<void>;\n    loadMore: () => Promise<void>;\n    hasMore: boolean;\n    refreshNotifications: () => Promise<void>;\n    updateSettings: (settings: NotificationSettings) => Promise<void>;\n}\n\nconst NotificationCenterContext = createContext<NotificationCenterContextValue | undefined>(undefined);\n\nexport function useNotificationCenter() {\n    const context = useContext(NotificationCenterContext);\n    if (!context) {\n        throw new Error('useNotificationCenter must be used within NotificationCenterProvider');\n    }\n    return context;\n}\n\ninterface NotificationCenterProviderProps {\n    children: React.ReactNode;\n}\n\nexport function NotificationCenterProvider({ children }: NotificationCenterProviderProps) {\n    const { isAuthenticated } = useAuth();\n    const [notifications, setNotifications] = useState<NotificationData[]>([]);\n    const [unreadCount, setUnreadCount] = useState(0);\n    const [isLoading, setIsLoading] = useState(false);\n    const [isDrawerOpen, setIsDrawerOpen] = useState(false);\n    const [settings, setSettings] = useState<NotificationSettings | null>(null);\n    const [page, setPage] = useState(1);\n    const [hasMore, setHasMore] = useState(true);\n    const eventSourceRef = useRef<EventSource | null>(null);\n    const notificationsApi = useRef(new NotificationsApi(getApiConfiguration()));\n    const reconnectTimeoutRef = useRef<NodeJS.Timeout | null>(null);\n    const reconnectAttemptRef = useRef(0);\n    const isConnectingRef = useRef(false);\n    const settingsRef = useRef<NotificationSettings | null>(null);\n    const [sseVersion, setSseVersion] = useState(0); // Used to trigger reconnection\n\n    // Keep settingsRef in sync so SSE handler can access current settings\n    useEffect(() => {\n        settingsRef.current = settings;\n    }, [settings]);\n\n    // Fetch unread count\n    const fetchUnreadCount = useCallback(async () => {\n        if (!isAuthenticated) return;\n\n        try {\n            const response = await notificationsApi.current.getUnreadCount();\n            setUnreadCount((response.data as any)?.unreadCount || 0);\n        } catch (error) {\n            console.error('Failed to fetch unread count:', error);\n        }\n    }, [isAuthenticated]);\n\n    // Fetch notifications\n    const fetchNotifications = useCallback(async (pageNum: number = 1, append: boolean = false) => {\n        if (!isAuthenticated) return;\n\n        setIsLoading(true);\n        try {\n            const response = await notificationsApi.current.getNotifications(pageNum, 20, false);\n            const data = response.data as any;\n            let rawNotifications = [];\n\n            if (Array.isArray(data)) {\n                rawNotifications = data;\n            } else if (data?.notifications && Array.isArray(data.notifications)) {\n                rawNotifications = data.notifications;\n            } else if (data?.data && Array.isArray(data.data)) {\n                rawNotifications = data.data;\n            }\n\n\n            // Map API response to our NotificationData interface\n            const newNotifications = rawNotifications.map((n: any) => ({\n                _id: n.id || n._id, // API returns 'id', we use '_id' internally\n                type: n.type,\n                title: n.title,\n                body: n.body,\n                isRead: n.isRead,\n                createdAt: n.createdAt,\n                data: n.data,\n            }));\n\n            if (append) {\n                setNotifications(prev => [...prev, ...newNotifications]);\n            } else {\n                setNotifications(newNotifications);\n            }\n\n            setHasMore(newNotifications.length === 20);\n            setPage(pageNum);\n        } catch (error) {\n            console.error('Failed to fetch notifications:', error);\n        } finally {\n            setIsLoading(false);\n        }\n    }, [isAuthenticated]);\n\n    // Fetch settings\n    const fetchSettings = useCallback(async () => {\n        if (!isAuthenticated) return;\n\n        setIsLoading(true);\n        try {\n            const response = await notificationsApi.current.getSettings();\n            const rawData = response.data as any;\n\n            // Handle different API response structures robustly\n            let finalSettings: NotificationSettings | null = null;\n\n            if (rawData) {\n                if (Array.isArray(rawData)) {\n                    // Raw array [ { type: '...', settings: { ... } } ]\n                    finalSettings = { preferences: rawData };\n                } else if (rawData.preferences) {\n                    if (Array.isArray(rawData.preferences)) {\n                        // Standard nested preferences array\n                        finalSettings = rawData;\n                    } else if (typeof rawData.preferences === 'object') {\n                        // Backend returned preferences as an object { TYPE: { email: true } }\n                        // Convert to our expected array format\n                        const preferences = Object.entries(rawData.preferences).map(([type, settings]) => ({\n                            type: type as any,\n                            settings: settings as any\n                        }));\n                        finalSettings = { ...rawData, preferences };\n                    }\n                } else if (rawData.data) {\n                    const d = rawData.data;\n                    if (d.preferences) {\n                        if (Array.isArray(d.preferences)) {\n                            finalSettings = d;\n                        } else if (typeof d.preferences === 'object') {\n                            const preferences = Object.entries(d.preferences).map(([type, settings]) => ({\n                                type: type as any,\n                                settings: settings as any\n                            }));\n                            finalSettings = { ...d, preferences };\n                        }\n                    } else if (Array.isArray(d)) {\n                        finalSettings = { preferences: d };\n                    }\n                } else if (typeof rawData === 'object' && !rawData.preferences) {\n                    // Maybe it's just the preferences object directly { TYPE: { email: true } }\n                    const preferences = Object.entries(rawData).map(([type, settings]) => ({\n                        type: type as any,\n                        settings: settings as any\n                    }));\n                    if (preferences.length > 0 && preferences[0].settings && typeof preferences[0].settings === 'object') {\n                        finalSettings = { preferences };\n                    } else {\n                        finalSettings = rawData;\n                    }\n                } else {\n                    finalSettings = rawData;\n                }\n            }\n            setSettings(finalSettings);\n        } catch (error) {\n            console.error('Failed to fetch settings:', error);\n        } finally {\n            setIsLoading(false);\n        }\n    }, [isAuthenticated]);\n\n    // SSE Connection for real-time notifications\n    useEffect(() => {\n        // Clean up any pending reconnection timer\n        if (reconnectTimeoutRef.current) {\n            clearTimeout(reconnectTimeoutRef.current);\n            reconnectTimeoutRef.current = null;\n        }\n\n        if (!isAuthenticated) {\n            // Close existing connection if user logs out\n            if (eventSourceRef.current) {\n                eventSourceRef.current.close();\n                eventSourceRef.current = null;\n            }\n            isConnectingRef.current = false;\n            reconnectAttemptRef.current = 0;\n            return;\n        }\n\n        // Prevent duplicate connections\n        if (isConnectingRef.current || eventSourceRef.current?.readyState === EventSource.OPEN) {\n            return;\n        }\n\n        const config = getCurrentConfig();\n        const token = getAuthToken();\n\n        if (!token) return;\n\n        isConnectingRef.current = true;\n\n        // Ensure no double slashes in URL\n        const baseUrl = config.apiBaseUrl.endsWith('/') ? config.apiBaseUrl.slice(0, -1) : config.apiBaseUrl;\n        const sseUrl = `${baseUrl}/notifications/stream?token=${encodeURIComponent(token)}`;\n\n        try {\n            const eventSource = new EventSource(sseUrl);\n            eventSourceRef.current = eventSource;\n\n            eventSource.onopen = () => {\n                // Connection successful - reset reconnection attempts\n                reconnectAttemptRef.current = 0;\n                isConnectingRef.current = false;\n            };\n\n            eventSource.onmessage = (event) => {\n                try {\n                    const rawNotification = JSON.parse(event.data);\n\n                    // Map API response to our NotificationData interface\n                    const notification: NotificationData = {\n                        _id: rawNotification.id || rawNotification._id,\n                        type: rawNotification.type,\n                        title: rawNotification.title,\n                        body: rawNotification.body,\n                        isRead: rawNotification.isRead || false,\n                        createdAt: rawNotification.createdAt,\n                        data: rawNotification.data,\n                    };\n\n                    const typeSetting = settingsRef.current?.preferences?.find(p => p.type === notification.type);\n                    const pushEnabled = typeSetting?.settings?.push !== false;\n\n                    // Add to notification center only if push is enabled for this type (default true)\n                    if (pushEnabled) {\n                        setNotifications(prev => [notification, ...prev]);\n                        setUnreadCount(prev => prev + 1);\n                    }\n\n                    // Browser notification disabled — inApp setting is reserved for the mobile app\n                    if (false && 'Notification' in window && Notification.permission === 'granted') {\n                        new Notification(notification.title, {\n                            body: notification.body,\n                            icon: '/icon.png',\n                        });\n                    }\n                } catch (error) {\n                    console.error('Failed to parse SSE notification:', error);\n                }\n            };\n\n            eventSource.onerror = () => {\n                // Close the failed connection\n                eventSource.close();\n                eventSourceRef.current = null;\n                isConnectingRef.current = false;\n\n                // Calculate exponential backoff delay (1s, 2s, 4s, 8s, ... max 30s)\n                const baseDelay = 1000;\n                const maxDelay = 30000;\n                const delay = Math.min(baseDelay * Math.pow(2, reconnectAttemptRef.current), maxDelay);\n                reconnectAttemptRef.current++;\n\n                // Only log occasional reconnection attempts to reduce console noise\n                if (reconnectAttemptRef.current <= 3 || reconnectAttemptRef.current % 5 === 0) {\n                    console.warn(`SSE connection error. Reconnecting in ${delay / 1000}s (attempt ${reconnectAttemptRef.current})`);\n                }\n\n                // Schedule reconnection\n                reconnectTimeoutRef.current = setTimeout(() => {\n                    if (isAuthenticated && getAuthToken()) {\n                        // Trigger effect to recreate connection\n                        setSseVersion(v => v + 1);\n                    }\n                }, delay);\n            };\n\n            return () => {\n                eventSource.close();\n                eventSourceRef.current = null;\n                isConnectingRef.current = false;\n            };\n        } catch (error) {\n            console.error('Failed to establish SSE connection:', error);\n            isConnectingRef.current = false;\n        }\n    }, [isAuthenticated, sseVersion]);\n\n    // Initial data fetch\n    useEffect(() => {\n        if (isAuthenticated) {\n            fetchUnreadCount();\n            fetchNotifications(1);\n            fetchSettings();\n        } else {\n            // Reset state when logged out\n            setNotifications([]);\n            setUnreadCount(0);\n            setSettings(null);\n            setPage(1);\n            setHasMore(true);\n        }\n    }, [isAuthenticated, fetchUnreadCount, fetchNotifications, fetchSettings]);\n\n    // Request notification permission\n    useEffect(() => {\n        if ('Notification' in window && Notification.permission === 'default') {\n            Notification.requestPermission();\n        }\n    }, []);\n\n    const openDrawer = useCallback(() => {\n        console.log('[NotificationCenter] Drawer opened', {\n            totalNotifications: notifications.length,\n            unreadCount,\n            settings: settings?.preferences?.map(p => ({\n                type: p.type,\n                push: p.settings?.push,\n                inApp: p.settings?.inApp,\n                email: p.settings?.email,\n            })),\n            notifications: notifications.map(n => ({\n                id: n._id,\n                type: n.type,\n                title: n.title,\n                isRead: n.isRead,\n            })),\n        });\n        setIsDrawerOpen(true);\n    }, [notifications, unreadCount, settings]);\n\n    const closeDrawer = useCallback(() => {\n        setIsDrawerOpen(false);\n    }, []);\n\n    const markAsRead = useCallback(async (id: string) => {\n        try {\n            await notificationsApi.current.markAsRead(id);\n\n            // Update local state\n            setNotifications(prev =>\n                prev.map(n => (n._id === id ? { ...n, isRead: true } : n))\n            );\n\n            // Decrement unread count\n            setUnreadCount(prev => Math.max(0, prev - 1));\n        } catch (error) {\n            console.error('Failed to mark notification as read:', error);\n        }\n    }, []);\n\n    const markAllAsRead = useCallback(async () => {\n        try {\n            await notificationsApi.current.markAllAsRead();\n\n            // Update local state\n            setNotifications(prev => prev.map(n => ({ ...n, isRead: true })));\n            setUnreadCount(0);\n        } catch (error) {\n            console.error('Failed to mark all as read:', error);\n        }\n    }, []);\n\n    const deleteNotification = useCallback(async (id: string) => {\n        try {\n            await notificationsApi.current.deleteNotification(id);\n\n            // Update local state\n            const notification = notifications.find(n => n._id === id);\n            setNotifications(prev => prev.filter(n => n._id !== id));\n\n            // Decrement unread count if notification was unread\n            if (notification && !notification.isRead) {\n                setUnreadCount(prev => Math.max(0, prev - 1));\n            }\n        } catch (error) {\n            console.error('Failed to delete notification:', error);\n        }\n    }, [notifications]);\n\n    const loadMore = useCallback(async () => {\n        if (!hasMore || isLoading) return;\n        await fetchNotifications(page + 1, true);\n    }, [hasMore, isLoading, page, fetchNotifications]);\n\n    const refreshNotifications = useCallback(async () => {\n        await fetchNotifications(1, false);\n        await fetchUnreadCount();\n    }, [fetchNotifications, fetchUnreadCount]);\n\n    const updateSettings = useCallback(async (newSettings: NotificationSettings) => {\n        try {\n            // Clean the settings object to match UpdateNotificationSettingsDto\n            // and remove any frontend-only fields that might cause validation errors\n            const payload: UpdateNotificationSettingsDto = {\n                _id: newSettings._id,\n                preferences: newSettings.preferences.map(p => ({\n                    type: p.type,\n                    settings: {\n                        email: p.settings?.email,\n                        push: p.settings?.push,\n                        inApp: p.settings?.inApp,\n                    }\n                }))\n            };\n\n            await notificationsApi.current.updateSettings(payload);\n\n            // Refetch settings to ensure we have the server-persisted state\n            await fetchSettings();\n        } catch (error) {\n            console.error('Failed to update settings:', error);\n            throw error;\n        }\n    }, [fetchSettings]);\n\n    // Filter notifications by push settings - only show types where push is enabled\n    const filteredNotifications = settings?.preferences\n        ? notifications.filter(n => {\n            const typeSetting = settings.preferences.find(p => p.type === n.type);\n            // If no setting found for this type, default to showing it\n            if (!typeSetting) return true;\n            return typeSetting.settings?.push !== false;\n        })\n        : notifications;\n\n    const filteredUnreadCount = unreadCount;\n\n    const value: NotificationCenterContextValue = {\n        notifications: filteredNotifications,\n        unreadCount: filteredUnreadCount,\n        isLoading,\n        isDrawerOpen,\n        settings,\n        openDrawer,\n        closeDrawer,\n        markAsRead,\n        markAllAsRead,\n        deleteNotification,\n        loadMore,\n        hasMore,\n        refreshNotifications,\n        updateSettings,\n    };\n\n    return (\n        <NotificationCenterContext.Provider value={value}>\n            {children}\n        </NotificationCenterContext.Provider>\n    );\n}\n","'use client';\n\nimport React, { createContext, useContext } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { CategoriesApi, CategoryPopulated } from '@/lib/Apis';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\n\ninterface CategoriesContextValue {\n    categories: CategoryPopulated[];\n    isLoading: boolean;\n    error: Error | null;\n    refetch: () => Promise<void>;\n}\n\nconst CategoriesContext = createContext<CategoriesContextValue | undefined>(undefined);\n\nexport function useCategories() {\n    const context = useContext(CategoriesContext);\n    if (!context) {\n        throw new Error('useCategories must be used within CategoriesProvider');\n    }\n    return context;\n}\n\ninterface CategoriesProviderProps {\n    children: React.ReactNode;\n}\n\nexport function CategoriesProvider({ children }: CategoriesProviderProps) {\n    const { data, isLoading, error, refetch } = useQuery({\n        queryKey: ['categories'],\n        queryFn: async () => {\n            const response = await new CategoriesApi(AXIOS_CONFIG).getAllCategories();\n            const all = response.data?.data || [];\n            return all.filter((cat: CategoryPopulated) => (cat as any).isActive === true);\n        },\n        staleTime: 0,\n    });\n\n    const handleRefetch = async () => {\n        await refetch();\n    };\n\n    const value: CategoriesContextValue = {\n        categories: data || [],\n        isLoading,\n        error: error as Error | null,\n        refetch: handleRefetch,\n    };\n\n    return (\n        <CategoriesContext.Provider value={value}>\n            {children}\n        </CategoriesContext.Provider>\n    );\n}\n","'use client';\n\nimport { createContext, useContext, useState, ReactNode } from 'react';\nimport { useCart } from '@/providers/CartProvider';\n\ninterface StoreContextType {\n  cart: any[];\n  cartTotal: number;\n  isCartOpen: boolean;\n  setCartOpen: (open: boolean) => void;\n  removeFromCart: (id: string) => Promise<void>;\n  updateQuantity: (id: string, quantity: number) => void;\n}\n\nconst StoreContext = createContext<StoreContextType | undefined>(undefined);\n\nexport function useStore() {\n  const context = useContext(StoreContext);\n  if (!context) {\n    throw new Error('useStore must be used within StoreProvider');\n  }\n  return context;\n}\n\ninterface StoreProviderProps {\n  children: ReactNode;\n}\n\nexport function StoreProvider({ children }: StoreProviderProps) {\n  const [isCartOpen, setCartOpen] = useState(false);\n  const { cart: cartData, updateQuantity, removeFromCart } = useCart();\n\n  // Convert CartResponseDto to simple array for CartDrawer\n  const cart = cartData?.cartBody?.items?.map((item: any) => ({\n    id: item.productVariantId,\n    productId: (item.productVariantData as any)?.productId || (item.productVariantData as any)?.product?._id || item.productVariantId,\n    productName: (item as any).product?.name || null,\n    variantName: item.productVariantData?.name || 'Product',\n    name: item.productVariantData?.name || 'Product',\n    price: item.productVariantData?.finalPrice || 0,\n    quantity: item.quantity,\n    image: (item as any).product?.media?.[0]?.file || item.productVariantData?.media?.[0]?.file || '/placeholder.png',\n  })) || [];\n\n  const cartTotal = cartData?.subTotal || 0;\n\n  const value: StoreContextType = {\n    cart,\n    cartTotal,\n    isCartOpen,\n    setCartOpen,\n    removeFromCart,\n    updateQuantity,\n  };\n\n  return (\n    <StoreContext.Provider value={value}>\n      {children}\n    </StoreContext.Provider>\n  );\n}\n","'use client';\n\nimport React, { useEffect } from 'react';\nimport { EcommerceConfig } from '@/lib/types';\nimport { ThemeProvider } from './ThemeProvider';\nimport { AuthProvider } from './AuthProvider';\nimport { CartProvider } from './CartProvider';\nimport { WishlistProvider } from './WishlistProvider';\nimport { BasePathProvider } from './BasePathProvider';\nimport { DiscountProvider } from './DiscountProvider';\nimport { initializeApiAdapter } from '@/lib/api-adapter';\nimport { QueryClientProvider } from '@tanstack/react-query';\nimport { QueryClient } from '@tanstack/react-query';\nimport { NotificationProvider } from './NotificationProvider';\nimport { NotificationCenterProvider } from './NotificationCenterProvider';\nimport { NotificationDrawer } from '@/components/NotificationDrawer';\nimport { CategoriesProvider } from './CategoriesProvider';\nimport { StoreProvider } from '@/context/StoreContext';\n\ninterface EcommerceProviderProps {\n  config: EcommerceConfig;\n  children: React.ReactNode;\n  withToaster?: boolean;\n  basePath?: string;\n}\n\nexport function EcommerceProvider({ config, children, withToaster = true, basePath = '' }: EcommerceProviderProps) {\n  // Initialize API adapter with store configuration synchronously\n  // This ensures setting up the real backend APIs before children render and fire their effects\n  React.useMemo(() => {\n    initializeApiAdapter(config);\n  }, [config]);\n\n  const [client] = React.useState(\n    new QueryClient({ defaultOptions: { queries: { staleTime: 5000 } } })\n  );\n  return (\n    <QueryClientProvider client={client}>\n      <ThemeProvider config={config}>\n        <BasePathProvider basePath={basePath}>\n          <AuthProvider>\n            <NotificationProvider>\n              <NotificationCenterProvider>\n                <CategoriesProvider>\n                  <WishlistProvider>\n                    <CartProvider>\n                      <StoreProvider>\n                        <DiscountProvider>\n                          {children}\n                        </DiscountProvider>\n                      </StoreProvider>\n                    </CartProvider>\n                  </WishlistProvider>\n                </CategoriesProvider>\n              </NotificationCenterProvider>\n            </NotificationProvider>\n          </AuthProvider>\n        </BasePathProvider>\n      </ThemeProvider>\n    </QueryClientProvider>\n  );\n}\n","export const PLACEHOLDER_IMAGE_SRC = `data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAwIiBoZWlnaHQ9IjQwMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBmaWxsPSIjZjNmNGY2Ii8+CiAgPHRleHQgeD0iNTAlIiB5PSI1MCUiIGZvbnQtZmFtaWx5PSJBcmlhbCIgZm9udC1zaXplPSIyNCIgZmlsbD0iIzljYTNhZiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZG9taW5hbnQtYmFzZWxpbmU9Im1pZGRsZSI+Tm8gSW1hZ2U8L3RleHQ+CiAgPHJlY3QgeD0iMTUwIiB5PSIxMjAiIHdpZHRoPSIxMDAiIGhlaWdodD0iMTAwIiBzdHJva2U9IiM5Y2EzYWYiIHN0cm9rZS13aWR0aD0iNCIgZmlsbD0ibm9uZSIgcng9IjgiLz4KICA8cGF0aCBkPSJNMTUwIDE4MCBMMTcwIDE2MCBMMjAwIDE5MCBMMjIwIDE3MCBMMjUwIDIwMCBMMjUwIDIyMCBMMTUwIDIyMCBaIiBmaWxsPSIjOWNhM2FmIiBvcGFjaXR5PSIwLjUiLz4KPC9zdmc+`;\n","'use client';\n\nimport React, { useState, useEffect, useCallback } from 'react';\nimport { Bell, BellOff, CheckCircle2, X, Loader2 } from 'lucide-react';\nimport { motion } from 'framer-motion';\nimport axios from 'axios';\n\nimport { useAuth } from '@/providers/AuthProvider';\nimport { useNotification } from '@/providers/NotificationProvider';\nimport { getCurrentConfig } from '@/lib/api-adapter/config';\n\n/* -------------------------------------------------------------------------- */\n/*                               LocalStorage                                 */\n/* -------------------------------------------------------------------------- */\n\nconst getStorageKey = () => {\n  try {\n    return `stock_alerts_${getCurrentConfig()?.storeId || 'default'}`;\n  } catch {\n    return `stock_alerts_default`;\n  }\n};\n\nconst getSubscribedAlerts = (): Record<string, boolean> => {\n  if (typeof window === 'undefined') return {};\n  try {\n    return JSON.parse(localStorage.getItem(getStorageKey()) || '{}');\n  } catch {\n    return {};\n  }\n};\n\nconst setSubscribedAlert = (key: string) => {\n  const alerts = getSubscribedAlerts();\n  alerts[key] = true;\n  localStorage.setItem(getStorageKey(), JSON.stringify(alerts));\n};\n\nconst removeSubscribedAlert = (key: string) => {\n  const alerts = getSubscribedAlerts();\n  delete alerts[key];\n  localStorage.setItem(getStorageKey(), JSON.stringify(alerts));\n};\n\n/* -------------------------------------------------------------------------- */\n/*                               Guest Email                                  */\n/* -------------------------------------------------------------------------- */\n\nconst guestKey = (storeId: string) => `stock_alert_emails_${storeId}`;\n\nconst getGuestEmails = (): Record<string, string> => {\n  try {\n    const storeId = getCurrentConfig()?.storeId || 'default';\n    return JSON.parse(localStorage.getItem(guestKey(storeId)) || '{}');\n  } catch {\n    return {};\n  }\n};\n\nconst saveGuestEmail = (alertKey: string, email: string) => {\n  const storeId = getCurrentConfig()?.storeId || 'default';\n  const emails = getGuestEmails();\n  emails[alertKey] = email;\n  localStorage.setItem(guestKey(storeId), JSON.stringify(emails));\n};\n\nconst removeGuestEmail = (alertKey: string) => {\n  const storeId = getCurrentConfig()?.storeId || 'default';\n  const emails = getGuestEmails();\n  delete emails[alertKey];\n  localStorage.setItem(guestKey(storeId), JSON.stringify(emails));\n};\n\nconst getLastGuestEmail = () => {\n  const values = Object.values(getGuestEmails());\n  return values.length ? values[values.length - 1] : '';\n};\n\n/* -------------------------------------------------------------------------- */\n/*                                Types                                       */\n/* -------------------------------------------------------------------------- */\n\ninterface NotifyWhenInStockButtonProps {\n  productId: string;\n  variantId: string;\n  className?: string;\n  size?: 'sm' | 'md';\n  appearance?: 'default' | 'compact';\n}\n\n/* -------------------------------------------------------------------------- */\n/*                                Component                                   */\n/* -------------------------------------------------------------------------- */\n\nexport function NotifyWhenInStockButton({\n  productId,\n  variantId,\n  className = '',\n  size = 'md',\n  appearance = 'default',\n}: NotifyWhenInStockButtonProps) {\n  const { isAuthenticated, user } = useAuth();\n  const notification = useNotification();\n\n  const [isSubscribed, setIsSubscribed] = useState(false);\n  const [loading, setLoading] = useState(false);\n  const [showEmail, setShowEmail] = useState(false);\n  const [email, setEmail] = useState('');\n\n  const alertKey = `${productId}_${variantId}`;\n  const isSmall = size === 'sm';\n  const isCompact = appearance === 'compact';\n\n  /* -------------------------------------------------------------------------- */\n  /*                                 Init                                       */\n  /* -------------------------------------------------------------------------- */\n\n  useEffect(() => {\n    setIsSubscribed(!!getSubscribedAlerts()[alertKey]);\n  }, [alertKey]);\n\n  /* -------------------------------------------------------------------------- */\n  /*                              API functions                                 */\n  /* -------------------------------------------------------------------------- */\n\n  const subscribe = useCallback(\n    async (guestEmail?: string) => {\n      try {\n        setLoading(true);\n\n        const config = getCurrentConfig();\n\n        await axios.post(\n          `${config.apiBaseUrl}/products/${productId}/variants/${variantId}/stock-alert`,\n          guestEmail ? { email: guestEmail } : undefined,\n        );\n\n        setSubscribedAlert(alertKey);\n\n        if (guestEmail) saveGuestEmail(alertKey, guestEmail);\n\n        setIsSubscribed(true);\n        setShowEmail(false);\n        setEmail('');\n\n        notification.success(\n          \"You'll be notified\",\n          'We will email you once this item is back in stock.',\n        );\n      } catch (err: any) {\n        const status = err?.response?.status;\n\n        if (status === 409) {\n          setIsSubscribed(true);\n        } else {\n          notification.error(\n            'Subscription failed',\n            'Unable to set stock alert. Please try again.',\n          );\n        }\n      } finally {\n        setLoading(false);\n      }\n    },\n    [productId, variantId, alertKey, notification],\n  );\n\n  const unsubscribe = useCallback(async () => {\n    try {\n      setLoading(true);\n\n      const config = getCurrentConfig();\n\n      await axios.delete(\n        `${config.apiBaseUrl}/products/${productId}/variants/${variantId}/stock-alert`,\n        {\n          data: isAuthenticated\n            ? { userId: user?._id || user?.id }\n            : { email: getGuestEmails()[alertKey] },\n        },\n      );\n\n      removeSubscribedAlert(alertKey);\n      removeGuestEmail(alertKey);\n\n      setIsSubscribed(false);\n\n      notification.success('Alert removed', 'You will no longer receive alerts.');\n    } catch {\n      notification.error('Error', 'Failed to remove alert.');\n    } finally {\n      setLoading(false);\n    }\n  }, [productId, variantId, isAuthenticated, user, alertKey, notification]);\n\n  /* -------------------------------------------------------------------------- */\n  /*                                Handlers                                    */\n  /* -------------------------------------------------------------------------- */\n\n  const handleSubscribeClick = (e: React.MouseEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n\n    if (isAuthenticated) subscribe();\n    else {\n      setEmail(getLastGuestEmail());\n      setShowEmail(true);\n    }\n  };\n\n  const handleGuestSubmit = async (e: React.FormEvent) => {\n    e.preventDefault();\n    e.stopPropagation();\n    await subscribe(email);\n  };\n\n  /* -------------------------------------------------------------------------- */\n  /*                                Styles                                      */\n  /* -------------------------------------------------------------------------- */\n\nconst baseBtn =\n  'relative inline-flex items-center justify-center gap-2 rounded-full font-semibold tracking-wide select-none ' +\n  'transition-all duration-300 ease-out active:scale-[0.96] ' +\n  'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-offset-white';\nconst widthStyle = isCompact ? 'w-auto shrink-0' : 'w-full';\nconst subscribeStyle =\n  'border-2 border-hsecondary/30 bg-hsecondary/10 text-hsecondary ' +\n  'shadow-sm hover:bg-hsecondary/50 hover:shadow-md ' +\n  'focus-visible:ring-hsecondary disabled:cursor-not-allowed disabled:opacity-50 ' +\n  'disabled:hover:border-hsecondary/30 disabled:hover:bg-hsecondary/10 ' +\n  'disabled:hover:text-hsecondary disabled:hover:shadow-none';\nconst subscribedStyle =\n  'group/notify relative bg-emerald-50/70 text-emerald-700 border border-emerald-200 ' +\n  'shadow-sm backdrop-blur-sm ' +\n  'hover:bg-red-50 hover:text-red-600 hover:border-red-200 hover:shadow-md ' +\n  'transition-all duration-200 ease-out ' +\n  'focus-visible:ring-emerald-500';\n  /* -------------------------------------------------------------------------- */\n  /*                              Subscribed UI                                 */\n  /* -------------------------------------------------------------------------- */\n\n  if (isSubscribed) {\n    if (!isAuthenticated) {\n      return (\n        <motion.div\n          initial={{ opacity: 0, y: 4 }}\n          animate={{ opacity: 1, y: 0 }}\n          className={`inline-flex items-center justify-center gap-2 rounded-full border border-emerald-200 bg-emerald-50/70 text-xs font-semibold text-emerald-700 ${widthStyle} ${isCompact ? 'px-4 py-2' : 'px-6 py-3'} ${className}`}\n        >\n          <CheckCircle2 className=\"h-4 w-4\" />\n          Alert active\n        </motion.div>\n      );\n    }\n\n    return (\n      <motion.button\n        initial={{ opacity: 0, y: 4 }}\n        animate={{ opacity: 1, y: 0 }}\n        whileTap={{ scale: 0.97 }}\n        disabled={loading}\n        onClick={e => { e.preventDefault(); e.stopPropagation(); unsubscribe(); }}\n        title=\"Click to remove alert\"\n        className={`${baseBtn} ${subscribedStyle} ${widthStyle} ${isCompact ? 'px-4 py-2' : 'px-6 py-3'} text-xs ${className}`}\n      >\n        {loading ? (\n          <Loader2 className=\"h-4 w-4 animate-spin\" />\n        ) : (\n          <>\n            <span className=\"group-hover/notify:hidden flex items-center gap-2\">\n              <CheckCircle2 className=\"h-4 w-4\" />\n              Alert active\n            </span>\n            <span className=\"hidden group-hover/notify:flex items-center gap-2\">\n              <BellOff className=\"h-4 w-4\" />\n              Remove alert\n            </span>\n          </>\n        )}\n      </motion.button>\n    );\n  }\n\n  /* -------------------------------------------------------------------------- */\n  /*                               Email Form                                   */\n  /* -------------------------------------------------------------------------- */\n\n  if (showEmail) {\n    return (\n      <motion.div\n        initial={{ opacity: 0, scale: 0.97, y: 6 }}\n        animate={{ opacity: 1, scale: 1, y: 0 }}\n        transition={{ duration: 0.2, ease: 'easeOut' }}\n        className={`${isCompact ? 'w-72 max-w-[65vw]' : 'w-full'} space-y-3 rounded-2xl border border-hsecondary/20 bg-white/95 p-4 shadow-lg`}\n        onClick={e => e.stopPropagation()}\n      >\n        {/* Header */}\n        <div className=\"flex items-start justify-between gap-2\">\n          <div className=\"flex items-center gap-2\">\n            <span className=\"flex h-8 w-8 shrink-0 items-center justify-center rounded-full bg-hsecondary/15\">\n              <Bell className=\"h-4 w-4 text-hsecondary\" />\n            </span>\n            <div>\n              <p className=\"text-sm font-semibold text-gray-800 leading-tight\">Get notified</p>\n              <p className=\"text-xs text-gray-500 leading-tight\">We'll email you when this is back in stock</p>\n            </div>\n          </div>\n          <button\n            type=\"button\"\n            onClick={e => { e.preventDefault(); e.stopPropagation(); setShowEmail(false); }}\n            className=\"shrink-0 mt-0.5 text-gray-400 hover:text-gray-600 transition-colors\"\n            aria-label=\"Dismiss\"\n          >\n            <X className=\"h-4 w-4\" />\n          </button>\n        </div>\n\n        {/* Form */}\n        <form onSubmit={handleGuestSubmit} className=\"space-y-2\">\n          <input\n            type=\"email\"\n            required\n            autoFocus\n            placeholder=\"your@email.com\"\n            value={email}\n            onChange={e => setEmail(e.target.value)}\n            className=\"w-full rounded-xl border-2 border-gray-200 px-4 py-2.5 text-sm bg-white focus:border-hsecondary focus:ring-4 focus:ring-hsecondary/10 outline-none transition-all duration-200 placeholder:text-gray-400\"\n          />\n          <motion.button\n            type=\"submit\"\n            whileTap={{ scale: 0.97 }}\n            disabled={loading}\n            className=\"w-full flex items-center justify-center gap-2 rounded-xl bg-hsecondary px-4 py-2.5 text-sm font-semibold text-white shadow-sm hover:bg-hsecondary/90 hover:shadow-md transition-all duration-200 disabled:opacity-60 disabled:cursor-not-allowed\"\n          >\n            {loading ? (\n              <>\n                <Loader2 className=\"h-4 w-4 animate-spin\" />\n                Setting alert…\n              </>\n            ) : (\n              <>\n                <Bell className=\"h-4 w-4\" />\n                Notify me\n              </>\n            )}\n          </motion.button>\n        </form>\n      </motion.div>\n    );\n  }\n\n  /* -------------------------------------------------------------------------- */\n  /*                               Default Button                               */\n  /* -------------------------------------------------------------------------- */\n\n  return (\n    <motion.button\n      initial={{ opacity: 0, y: 4 }}\n      animate={{ opacity: 1, y: 0 }}\n      whileTap={{ scale: 0.97 }}\n      onClick={handleSubscribeClick}\n      disabled={loading}\n      className={`${baseBtn} ${subscribeStyle} ${widthStyle} ${\n        isSmall ? 'px-4 py-2 text-xs gap-1.5' : 'px-6 py-3 text-sm'\n      } ${className}`}\n    >\n      {loading ? (\n        <>\n          <Loader2 className=\"h-4 w-4 animate-spin\" />\n          {!isSmall && (\n            <>\n              <span className=\"sm:hidden\">Setting…</span>\n              <span className=\"hidden sm:inline\">Setting alert…</span>\n            </>\n          )}\n        </>\n      ) : (\n        <>\n          <motion.span\n            animate={{ rotate: [0, -8, 8, -4, 4, 0] }}\n            transition={{ duration: 0.6, delay: 0.4, ease: 'easeInOut' }}\n          >\n            <Bell className={isSmall ? 'h-3.5 w-3.5' : 'h-4 w-4'} />\n          </motion.span>\n          {isSmall ? (\n            'Notify me'\n          ) : (\n            <>\n              <span className=\"sm:hidden\">Notify me</span>\n              <span className=\"hidden sm:inline\">Notify When In Stock</span>\n            </>\n          )}\n        </>\n      )}\n    </motion.button>\n  );\n}\n","import { useState, useMemo } from 'react';\nimport { X, ShoppingCart, Check, /* Star, */ Package, ExternalLink, Minus, Plus } from 'lucide-react';\nimport { Product } from '@/lib/Apis';\nimport { useCart } from '@/providers/CartProvider';\nimport Image from 'next/image';\nimport { ProductVariantInventoryStatusEnum } from '@/lib/Apis';\nimport { useNotification } from '@/providers/NotificationProvider';\nimport Link from 'next/link';\nimport { PLACEHOLDER_IMAGE_SRC } from '@/lib/constants/assets';\nimport { NotifyWhenInStockButton } from '@/components/NotifyWhenInStockButton';\n\n// Find the best default variant index: lowest-priced in-stock, or lowest-priced overall\nfunction getBestDefaultVariantIndex(variants: Product['variants']): number {\n  if (!variants || variants.length === 0) return 0;\n\n  const inStockIndices = variants\n    .map((v, i) => ({ v, i }))\n    .filter(({ v }) => (v.inventoryCount ?? 0) > 0);\n\n  const pool = inStockIndices.length > 0\n    ? inStockIndices\n    : variants.map((v, i) => ({ v, i }));\n\n  return pool.reduce((best, current) =>\n    (current.v.finalPrice ?? Infinity) < (best.v.finalPrice ?? Infinity) ? current : best\n    , pool[0]).i;\n}\n\ninterface QuickViewModalProps {\n  product: Product;\n  onClose: () => void;\n  onNavigateToProduct?: (productId: string) => void;\n}\n\nexport function QuickViewModal({ product, onClose, onNavigateToProduct }: QuickViewModalProps) {\n  const [selectedVariantIndex, setSelectedVariantIndex] = useState(() => getBestDefaultVariantIndex(product.variants));\n  const [selectedSizeIndex, setSelectedSizeIndex] = useState(0);\n  const [selectedImageIndex, setSelectedImageIndex] = useState(0);\n  const [addedToCart, setAddedToCart] = useState(false);\n  const [quantity, setQuantity] = useState(1);\n  const { addToCart } = useCart();\n  const [isAddingToCart, setIsAddingToCart] = useState(false);\n  const notification = useNotification();\n\n  const selectedVariant = product.variants?.[selectedVariantIndex] || product.variants?.[0];\n  const selectedSize = selectedVariant?.media?.[selectedSizeIndex];\n  const displayPrice = selectedVariant?.finalPrice || (product as any).finalPrice || (product as any).price || 0;\n  const displayOriginalPrice = selectedVariant?.retailPrice || (product as any).retailPrice || (product as any).compareAtPrice || 0;\n  const isDiscounted = selectedVariant?.isDiscounted ?? (product as any).isDiscounted;\n  const discountAmount = selectedVariant?.discountAmount ?? (product as any).discountAmount;\n  const displayName = product.name;\n\n  const handleQuantityChange = (newQuantity: number) => {\n    if (newQuantity >= 1 && newQuantity <= (selectedVariant?.inventoryCount || 10)) {\n      setQuantity(newQuantity);\n    }\n  };\n\n  const handleAddToCart = async () => {\n    if (!product || !selectedVariant) return;\n\n    setIsAddingToCart(true);\n    try {\n      await addToCart(\n        product.id,\n        quantity,\n        selectedVariant._id\n      );\n    } catch (error) {\n      console.error('Failed to add to cart', error);\n    } finally {\n      setIsAddingToCart(false);\n    }\n  };\n\n  return (\n    <div\n      className=\"fixed inset-0 z-50 flex items-center justify-center p-4 bg-black/50 backdrop-blur-xs\"\n      onClick={onClose}\n    >\n      <div\n        className=\"bg-white rounded-[32px] max-w-5xl w-full max-h-[90vh] overflow-hidden relative flex flex-col\"\n        onClick={(e) => e.stopPropagation()}\n      >\n        <button\n          onClick={onClose}\n          className=\"absolute top-6 right-6 p-2 hover:bg-gray-100 rounded-full transition-colors z-20 bg-white/80 backdrop-blur-sm shadow-sm\"\n        >\n          <X className=\"size-6 text-hmuted\" />\n        </button>\n\n        <div className=\"overflow-y-auto p-8 flex-1 custom-scrollbar\">\n          <div className=\"grid grid-cols-1 md:grid-cols-2 gap-8\">\n            {/* Product Image */}\n            <div className=\"space-y-4\">\n              <div className=\"relative aspect-3/4 rounded-[24px] overflow-hidden bg-gray-50\">\n                <Image\n                  src={selectedVariant?.media?.[selectedImageIndex]?.file || selectedVariant?.media?.[0]?.file || product.media?.[0]?.file || PLACEHOLDER_IMAGE_SRC}\n                  alt={product.name}\n                  className=\"w-full h-full object-contain\"\n                  width={500}\n                  height={500}\n                />\n                {/* Badges */}\n                <div className=\"absolute top-4 left-4 flex flex-col gap-2\">\n                  {isDiscounted && (\n                    <div className=\"bg-haccent text-white rounded-full px-3 py-1.5\">\n                      <span className=\"font-bold text-[11px] uppercase\">\n                        -{discountAmount}%\n                      </span>\n                    </div>\n                  )}\n                  {/* {product.bestseller && (\n                    <div className=\"bg-hsecondary text-white rounded-full px-3 py-1.5\">\n                      <span className=\"font-semibold text-[10px] uppercase\">\n                        Bestseller\n                      </span>\n                    </div>\n                  )} */}\n                </div>\n              </div>\n\n              {/* Thumbnail Images */}\n              {selectedVariant?.media && selectedVariant.media.length > 1 && (\n                <div className=\"grid grid-cols-4 gap-3\">\n                  {selectedVariant.media.map((image: any, index: any) => (\n                    <div\n                      key={index}\n                      className={`aspect-square rounded-xl overflow-hidden cursor-pointer transition-opacity ${selectedImageIndex === index ? 'ring-2 ring-hprimary' : 'bg-gray-50 hover:opacity-75'}`}\n                      onClick={() => setSelectedImageIndex(index)}\n                    >\n                      <img\n                        src={image.file}\n                        alt={`${product.name} ${index + 1}`}\n                        className=\"w-full h-full object-contain\"\n                      />\n                    </div>\n                  ))}\n                </div>\n              )}\n            </div>\n\n            {/* Product Details */}\n            <div className=\"flex flex-col\">\n              <div className=\"mb-6\">\n                <p className=\"text-[11px] text-hprimary uppercase tracking-wide font-medium mb-2\">\n                  {product.brand}\n                </p>\n                <h2 className=\"text-3xl font-bold text-hsecondary tracking-tight\">\n                  {displayName}\n                </h2>\n                {selectedVariant?.name && selectedVariant.name !== product.name && (\n                  <p className=\"text-sm text-hmuted mt-1\">\n                    {selectedVariant.name}\n                  </p>\n                )}\n\n                {/* Reviews are temporarily hidden.\n                <div className=\"flex items-center gap-2 mt-3\">\n                  <div className=\"flex items-center gap-0.5\">\n                    {[...Array(5)].map((_, i) => (\n                      <Star\n                        key={i}\n                        className={`size-4 ${i < Math.floor(product.summary?.averageRating || 0)\n                          ? 'text-haccent fill-accent'\n                          : 'text-gray-300'\n                          }`}\n                      />\n                    ))}\n                  </div>\n                  <span className=\"text-[13px] text-hmuted\">\n                    {product.summary?.averageRating || 0} ({product.summary?.reviewCount || 0} reviews)\n                  </span>\n                </div>\n                */}\n              </div>\n\n              {/* Price */}\n              <div className=\"flex items-center gap-3 mb-4\">\n                <span className=\"font-bold text-[32px] text-haccent\">\n                  ${displayPrice.toFixed(2)}\n                </span>\n                {isDiscounted && (\n                  <span className=\"text-[20px] text-hmuted line-through\">\n                    ${displayOriginalPrice.toFixed(2)}\n                  </span>\n                )}\n              </div>\n\n              {/* Stock Status */}\n              <div className=\"flex flex-col gap-1 mb-6\">\n                <div className=\"flex items-center gap-2\">\n                  {selectedVariant?.inventoryCount === 0 ? (\n                    <span className=\"text-[12px] text-red-500 font-medium\">\n                      Out of Stock\n                    </span>\n                  ) : selectedVariant?.inventoryCount && selectedVariant.inventoryCount <= 10 ? (\n                    <span className=\"text-[12px] text-hprimary font-medium flex items-center gap-1\">\n                      <Package className=\"size-3\" />\n                      Only {selectedVariant.inventoryCount} left in stock\n                    </span>\n                  ) : (\n                    <span className=\"text-[12px] text-green-600 font-medium flex items-center gap-1\">\n                      <Package className=\"size-3\" />\n                      In Stock\n                    </span>\n                  )}\n                </div>\n                {(selectedVariant?.sku || product.sku) && (\n                  <p className=\"text-[11px] text-hmuted\">\n                    SKU: {selectedVariant?.sku || product.sku}\n                  </p>\n                )}\n              </div>\n\n              {/* Physical Details */}\n              {Boolean(selectedVariant?.weight || selectedVariant?.width || selectedVariant?.height || selectedVariant?.length) && (\n                <div className=\"grid grid-cols-2 gap-4 mb-6 p-3 bg-gray-50/50 rounded-xl border border-gray-100\">\n                  {selectedVariant?.weight > 0 && (\n                    <div>\n                      <p className=\"text-[10px] text-hmuted uppercase font-semibold\">Weight</p>\n                      <p className=\"text-[12px] text-hsecondary\">{selectedVariant.weight}g</p>\n                    </div>\n                  )}\n                  {(selectedVariant?.width > 0 || selectedVariant?.height > 0 || selectedVariant?.length > 0) && (\n                    <div>\n                      <p className=\"text-[10px] text-hmuted uppercase font-semibold\">Dimensions</p>\n                      <p className=\"text-[12px] text-hsecondary\">\n                        {[selectedVariant?.length, selectedVariant?.width, selectedVariant?.height]\n                          .filter(v => (v || 0) > 0)\n                          .join(' × ')} cm\n                      </p>\n                    </div>\n                  )}\n                </div>\n              )}\n\n              {/* Description */}\n              <div\n                className=\"text-[14px] text-hmuted leading-[1.7] mb-6 max-w-full overflow-hidden break-words\"\n                dangerouslySetInnerHTML={{ __html: selectedVariant?.description || product.description }}\n              />\n\n              {/* Color Selection */}\n              {product.variants.length > 1 && (\n                <div className=\"mb-6\">\n                  <h3 className=\"font-semibold text-[13px] text-hsecondary mb-3\">\n                    Selected Variant: <span className=\"font-normal text-hmuted\">{product.variants[selectedVariantIndex].name}</span>\n                  </h3>\n                  <div className=\"flex flex-wrap gap-3\">\n                    {product.variants.map((variant: any, index: any) => (\n                      <button\n                        key={variant.id}\n                        onClick={() => {\n                          setSelectedVariantIndex(index);\n                          setSelectedSizeIndex(0);\n                          setSelectedImageIndex(0); // Reset selected image index when variant changes\n                        }}\n                        className={`size-10 rounded-full border-2 transition-all ${selectedVariantIndex === index\n                          ? 'border-hprimary scale-110'\n                          : 'border-gray-200 hover:border-hprimary-50'\n                          }`}\n                        style={{ backgroundColor: variant.colorHex }}\n                        title={variant.color}\n                      >\n                        <Image\n                          src={variant.media?.[0]?.file || product.media?.[0]?.file || PLACEHOLDER_IMAGE_SRC}\n                          alt={variant.color || `Variant ${index + 1}`}\n                          className=\"object-cover\"\n                          height={32}\n                          width={32}\n                        />\n                      </button>\n                    ))}\n                  </div>\n                </div>\n              )}\n              {/* Quick Features */}\n              {product?.tags?.length > 0 &&\n                <div className=\"mb-6 p-4 bg-gray-50 rounded-xl\">\n                  <ul className=\"space-y-2\">\n                    {product?.tags?.slice(0, 3).map((feature: any, index: any) => (\n                      <li key={index} className=\"flex items-start gap-2\">\n                        <Check className=\"size-4 text-hprimary shrink-0 mt-0.5\" />\n                        <span className=\"text-[12px] text-hmuted\">\n                          {feature}\n                        </span>\n                      </li>\n                    ))}\n                  </ul>\n                </div>}\n\n              {/* Quantity Selector */}\n              <div className=\"mb-6\">\n                <h3 className=\"font-semibold text-[13px] text-hsecondary mb-3\">\n                  Quantity\n                </h3>\n                <div className=\"flex flex-col gap-2\">\n                  <div className=\"flex items-center gap-4\">\n                    <button\n                      onClick={() => handleQuantityChange(quantity - 1)}\n                      disabled={quantity <= 1}\n                      className=\"p-2 rounded-full border border-gray-200 hover:bg-gray-50 disabled:opacity-50 disabled:cursor-not-allowed\"\n                    >\n                      <Minus className=\"size-4 text-hsecondary\" />\n                    </button>\n                    <span className=\"w-8 text-center font-medium\">{quantity}</span>\n                    <button\n                      onClick={() => {\n                        const maxStock = selectedVariant?.inventoryCount || 999;\n                        if (quantity >= maxStock) {\n                          notification.error(\n                            'Maximum Stock Reached',\n                            `Sorry, only ${maxStock} units of this item are available.`\n                          );\n                          return;\n                        }\n                        handleQuantityChange(quantity + 1);\n                      }}\n                      className=\"p-2 rounded-full border border-gray-200 hover:bg-gray-50 transition-colors\"\n                    >\n                      <Plus className=\"size-4 text-hsecondary\" />\n                    </button>\n                  </div>\n                  {quantity >= (selectedVariant?.inventoryCount || 999) && (\n                    <p className=\"text-[11px] text-hprimary font-medium px-2\">\n                      Maximum available reached\n                    </p>\n                  )}\n                </div>\n              </div>\n\n              {/* Action Buttons */}\n              <div className=\"flex flex-col gap-3 mt-auto\">\n                {selectedVariant?.inventoryCount === 0 || selectedVariant?.inventoryStatus === ProductVariantInventoryStatusEnum.OUTOFSTOCK ? (\n                  <NotifyWhenInStockButton\n                    productId={product._id || product.id}\n                    variantId={selectedVariant._id || selectedVariant.id}\n                  />\n                ) : (\n                  <button\n                    onClick={handleAddToCart}\n                    disabled={addedToCart}\n                    className={`w-full font-medium text-[14px] px-6 py-4 rounded-full transition-all duration-300 flex items-center justify-center gap-3 ${addedToCart\n                      ? 'bg-green-500 text-white'\n                      : 'bg-hprimary text-white hover:bg-[#d66f45] hover:shadow-lg disabled:opacity-50 disabled:cursor-not-allowed'\n                      }`}\n                  >\n                    {isAddingToCart ? (\n                      <>\n                        <svg className=\"animate-spin h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n                          <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n                          <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n                        </svg>\n                        Loading...\n                      </>\n                    ) : (\n                      <>\n                        <ShoppingCart className=\"h-4 w-4\" />\n                        {!selectedVariant ? 'Select a variant' : 'Add to Cart'}\n                      </>\n                    )}\n                  </button>\n                )}\n                <Link href={`/products/${product._id}`}>\n                  <button\n                    onClick={() => {\n                      onClose();\n                      // onNavigateToProduct?.(product._id || product.id);\n                    }}\n                    className=\"w-full font-medium text-[13px] px-6 py-3 rounded-full bg-white text-hsecondary border-2 border-hprimary hover:bg-gray-50 transition-all flex items-center justify-center gap-2\"\n                  >\n                    View Full Details\n                    <ExternalLink className=\"size-4\" />\n                  </button>\n                </Link>\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n","'use client';\n\nimport React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { motion } from 'framer-motion';\nimport { /* Star, */ ShoppingCart, Heart } from 'lucide-react';\nimport { Product, ProductVariantInventoryStatusEnum } from '@/lib/Apis';\nimport { formatPrice } from '@/lib/utils/format';\nimport { useWishlist } from '@/providers/WishlistProvider';\nimport { useCart } from '@/providers/CartProvider';\nimport Image from 'next/image';\nimport { useRouter } from 'next/navigation';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { QuickViewModal } from './QuickViewModal';\nimport { useNotification } from '@/providers/NotificationProvider';\nimport { useAuth } from '@/providers/AuthProvider';\nimport { PLACEHOLDER_IMAGE_SRC } from '@/lib/constants/assets';\nimport { NotifyWhenInStockButton } from '@/components/NotifyWhenInStockButton';\n// import { useProductReviews } from '@/hooks/useReviews';\n\nconst normalizeProductName = (name?: string) =>\n  name?.trim().replace(/\\s+/g, ' ').toLowerCase() ?? '';\n\ninterface ProductCardProps {\n  product: Product;\n  layout?: 'vertical' | 'horizontal';\n  onClickProduct?: (product: Product) => void;\n  onFavorite?: (product: Product) => void;\n  isFavorited?: boolean;\n  showFavoriteButton?: boolean;\n  selectedVariantId?: string | null;\n  onVariantChange?: (variantId: string | null) => void;\n  defaultVariantId?: string | null;\n  // Price filter props to determine pre-selection when only one variant matches\n  minPrice?: number;\n  maxPrice?: number;\n}\n\nexport function ProductCard({\n  product,\n  layout = 'vertical',\n  onClickProduct,\n  onFavorite,\n  isFavorited = false,\n  showFavoriteButton = true,\n  selectedVariantId: controlledVariantId,\n  onVariantChange,\n  defaultVariantId,\n  minPrice,\n  maxPrice,\n  className\n}: ProductCardProps & { className?: string }) {\n  const router = useRouter();\n  const { isAuthenticated } = useAuth();\n  const { buildPath } = useBasePath();\n  const [isFavorite, setIsFavorite] = useState(isFavorited);\n  const { addToWishlist, removeFromWishlist, isInWishlist } = useWishlist();\n  const { addToCart, isLoading: isAddingToCart } = useCart();\n  const [isHovered, setIsHovered] = useState(false);\n  const [isImageLoaded, setIsImageLoaded] = useState(false);\n  const [selectedVariantImage, setSelectedVariantImage] = useState<string | null>(null);\n  const [internalSelectedVariantId, setInternalSelectedVariantId] = useState<string | null>(null);\n\n  const selectedVariantId = controlledVariantId !== undefined ? controlledVariantId : internalSelectedVariantId;\n\n  const [showQuickView, setShowQuickView] = useState(false);\n  const notification = useNotification();\n\n  // Reviews are temporarily hidden.\n  // const { reviews } = useProductReviews(product._id || product.id);\n  // const liveReviewCount = reviews.length > 0 ? reviews.length : (product.summary?.reviewCount ?? 0);\n  // const liveAverageRating = reviews.length > 0\n  //   ? reviews.reduce((sum, r) => sum + (r.rating ?? 0), 0) / reviews.length\n  //   : (product.summary?.averageRating ?? 0);\n  // Handle image load state\n  const handleImageLoad = useCallback(() => {\n    setIsImageLoaded(true);\n  }, []);\n\n  // Handle card click\n  const handleCardClick = useCallback((e: React.MouseEvent) => {\n    if (onClickProduct) {\n      e.preventDefault();\n      onClickProduct(product);\n    }\n  }, [onClickProduct, product]);\n\n  // Handle variant selection\n  const handleVariantSelect = useCallback((variantId: string, variantImage: string | null) => {\n    if (controlledVariantId === undefined) {\n      setInternalSelectedVariantId(variantId);\n    }\n    if (variantImage) setSelectedVariantImage(variantImage);\n    onVariantChange?.(variantId);\n  }, [controlledVariantId, onVariantChange]);\n\n\n  const handleFavorite = async (e: React.MouseEvent) => {\n    e.stopPropagation();\n    try {\n      if (isFavorite) {\n        await removeFromWishlist(product?._id || '');\n        setIsFavorite(false);\n      } else {\n        const added = await addToWishlist(product as unknown as Product);\n        if (!added) {\n          router.push(buildPath(`/login?redirect=${encodeURIComponent(typeof window !== 'undefined' ? window.location.pathname + window.location.search : '/shop')}`));\n          return;\n        }\n        setIsFavorite(true);\n      }\n      onFavorite?.(product);\n    } catch (error) {\n      console.error('Error updating wishlist:', error);\n      notification.error(\n        'Could not update wishlist',\n        'We could not update your wishlist. Please try again.'\n      );\n    }\n  };\n\n  // Update favorite state when props or wishlist changes\n  useEffect(() => {\n    setIsFavorite(isInWishlist(product?._id || '') || isFavorited);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [isFavorited, isInWishlist, product?._id]);\n\n  // Find the best default variant: lowest-priced in-stock variant, or lowest-priced overall if all are out of stock\n  // If only one variant matches the price range (even if out of stock), pre-select it\n  const bestDefaultVariant = useMemo(() => {\n    if (!product.variants || product.variants.length === 0) return null;\n\n    const min = minPrice ?? 0;\n    const max = maxPrice ?? Infinity;\n\n    // Check if there's only one variant that matches the price range\n    const matchingVariants = product.variants.filter((v: any) => {\n      const price = v.finalPrice ?? v.price ?? 0;\n      return price >= min && price <= max;\n    });\n\n    // If only one variant matches the price range, pre-select it regardless of stock\n    if (matchingVariants.length === 1) {\n      return matchingVariants[0];\n    }\n\n    const inStockVariants = product.variants.filter(v => (v.inventoryCount ?? 0) > 0);\n    const pool = inStockVariants.length > 0 ? inStockVariants : product.variants;\n\n    return pool.reduce((best, current) =>\n      (current.finalPrice ?? Infinity) < (best.finalPrice ?? Infinity) ? current : best\n      , pool[0]);\n  }, [product.variants, minPrice, maxPrice]);\n\n  // Reset selected variant image when product changes and auto-select best variant\n  useEffect(() => {\n    setSelectedVariantImage(null);\n    if (controlledVariantId === undefined) {\n      setInternalSelectedVariantId(null);\n    }\n    setIsImageLoaded(false);\n\n    if (controlledVariantId === undefined) {\n      // Use explicit defaultVariantId if provided, otherwise fall back to bestDefaultVariant\n      const initialId = defaultVariantId !== undefined\n        ? defaultVariantId\n        : ((bestDefaultVariant as any)?._id || (bestDefaultVariant as any)?.id || null);\n\n      setInternalSelectedVariantId(initialId);\n    }\n  }, [product._id, defaultVariantId, bestDefaultVariant, controlledVariantId]);\n\n  // Handle keyboard navigation\n  const handleKeyDown = (e: React.KeyboardEvent) => {\n    if (e.key === 'Enter' || e.key === ' ') {\n      e.preventDefault();\n      handleCardClick(e as any);\n    }\n  };\n\n\n  const MAX_VISIBLE_VARIANTS = 5;\n\n  // Map all variants to a unified shape: image if available, otherwise null\n  const allVariantItems = useMemo(() => {\n    if (!product.variants || product.variants.length === 0) return [];\n    return product.variants.map((variant) => ({\n      variantId: (variant as any)._id || (variant as any).id,\n      variantName: variant.name,\n      image: variant.media && variant.media.length > 0 ? variant.media[0].file : null,\n    }));\n  }, [product.variants]);\n\n  // Keep for backward-compat checks (add-to-cart guard, etc.)\n  const variantImages = useMemo(\n    () => allVariantItems.filter((v) => v.image !== null),\n    [allVariantItems]\n  );\n\n  // Get selected variant\n  const selectedVariant = useMemo(() => {\n    if (!selectedVariantId || !product.variants) return null;\n    return product.variants.find(\n      (variant) => ((variant as any)._id || (variant as any).id) === selectedVariantId\n    );\n  }, [selectedVariantId, product.variants]);\n\n  const displayFinalPrice = useMemo(() => {\n    return selectedVariant?.finalPrice ?? bestDefaultVariant?.finalPrice ?? (product as any).finalPrice ?? (product as any).price ?? 0;\n  }, [selectedVariant, bestDefaultVariant, product]);\n\n  const displayPriceBeforeDiscount = useMemo(() => {\n    return selectedVariant?.retailPrice ?? bestDefaultVariant?.retailPrice ?? (product as any).retailPrice ?? (product as any).compareAtPrice ?? 0;\n  }, [selectedVariant, bestDefaultVariant, product]);\n\n  const displayIsDiscounted = useMemo(() => {\n    return selectedVariant ? selectedVariant.isDiscounted : bestDefaultVariant?.isDiscounted;\n  }, [selectedVariant, bestDefaultVariant]);\n\n  const displayDiscountPercent = useMemo(() => {\n    if (!displayPriceBeforeDiscount || displayPriceBeforeDiscount === 0) return 0;\n    return Math.round(((displayPriceBeforeDiscount - displayFinalPrice) / displayPriceBeforeDiscount) * 100);\n  }, [displayPriceBeforeDiscount, displayFinalPrice]);\n\n  const displayInventoryCount = useMemo(() => {\n    return selectedVariant?.inventoryCount ?? bestDefaultVariant?.inventoryCount ?? product?.summary?.totalInventory ?? 0;\n  }, [selectedVariant, bestDefaultVariant, product]);\n\n  const displayInventoryStatus = useMemo(() => {\n    return selectedVariant?.inventoryStatus ?? bestDefaultVariant?.inventoryStatus ?? null;\n  }, [selectedVariant, bestDefaultVariant]);\n\n\n\n  // ... (inside component)\n\n  const imageSource = useMemo(() => {\n    const src = selectedVariantImage || product.media?.[0]?.file || PLACEHOLDER_IMAGE_SRC;\n    return {\n      src,\n      alt: product.name || 'Product image'\n    };\n  }, [product.media, product.name, selectedVariantImage]);\n\n  // Reset image loaded state when image source changes\n  useEffect(() => {\n    setIsImageLoaded(false);\n  }, [imageSource.src]);\n\n\n\n  const stripHtml = (html: string) =>\n    html.replace(/<[^>]*>/g, '').replace(/&nbsp;/g, ' ').trim();\n\n  const outOfStockVariantId: string | undefined =\n    selectedVariantId ||\n    (product.variants?.[0] as any)?._id ||\n    (product.variants?.[0] as any)?.id;\n\n  const handleAddToCart = async (e: React.MouseEvent<HTMLButtonElement>) => {\n    e.stopPropagation();\n    const hasMultipleVariants = (product.variants?.length || 0) > 1;\n    if (!selectedVariantId && hasMultipleVariants && variantImages.length > 1) {\n      notification.error(\n        'Select a variant',\n        'Please choose a variant before adding this item to your cart.'\n      );\n      return;\n    }\n\n    try {\n      const firstVariantId = product.variants && product.variants.length > 0\n        ? ((product.variants[0] as any)._id || (product.variants[0] as any).id)\n        : null;\n      const finalVariantId = selectedVariantId || firstVariantId;\n      await addToCart(product._id || product.id, 1, finalVariantId || undefined);\n    } catch (error) {\n      console.error('Failed to add to cart', error);\n    }\n  };\n\n  if (layout === 'horizontal') {\n    return (\n      <>\n        <motion.div\n          className={`group flex min-h-[148px] h-full cursor-pointer overflow-hidden rounded-2xl border border-slate-100 bg-white transition-all hover:border-hsecondary/15 hover:shadow-sm ${className ?? ''}`}\n          whileHover={{ y: -1 }}\n          aria-labelledby={`product-${product.id}-title`}\n          role=\"article\"\n          tabIndex={0}\n          onClick={handleCardClick}\n          onKeyDown={handleKeyDown}\n        >\n          <div className=\"relative m-3 mr-0 w-28 shrink-0 self-stretch overflow-hidden rounded-xl bg-slate-50 sm:w-32\">\n            <Image\n              src={imageSource.src}\n              alt={imageSource.alt}\n              className=\"h-full w-full object-contain transition-transform duration-300 group-hover:scale-105\"\n              height={180}\n              width={180}\n              priority={false}\n              onLoad={handleImageLoad}\n              onError={() => setIsImageLoaded(true)}\n              key={imageSource.src}\n            />\n\n            {product.showStock && displayInventoryCount === 0 ? (\n              <span className=\"absolute left-2 top-2 z-10 rounded-md bg-gray-800 px-2 py-0.5 text-[9px] font-semibold text-white\">\n                Out of Stock\n              </span>\n            ) : product.showStock && displayInventoryStatus === ProductVariantInventoryStatusEnum.LOWSTOCK ? (\n              <span className=\"absolute left-2 top-2 z-10 rounded-md bg-amber-500 px-2 py-0.5 text-[9px] font-semibold text-white\">\n                Low Stock\n              </span>\n            ) : displayIsDiscounted ? (\n              <span className=\"absolute left-2 top-2 z-10 rounded-full bg-haccent-500 px-2 py-0.5 text-[9px] font-bold text-white\">\n                Save {displayDiscountPercent}%\n              </span>\n            ) : (product as any).isNew ? (\n              <span className=\"absolute left-2 top-2 z-10 rounded-md bg-green-700 px-2 py-0.5 text-[9px] font-semibold text-white\">\n                New\n              </span>\n            ) : null}\n\n            {showFavoriteButton && (\n              <button\n                type=\"button\"\n                onClick={handleFavorite}\n                className=\"absolute right-2 top-2 z-10 rounded-full bg-white/90 p-1.5 shadow-sm transition hover:bg-white\"\n                aria-label={isFavorite ? 'Remove from wishlist' : 'Add to wishlist'}\n              >\n                <Heart className={`size-3.5 transition-colors ${isFavorite ? 'fill-red-400 text-red-400' : 'text-gray-400'}`} />\n              </button>\n            )}\n          </div>\n\n          <div className=\"flex min-w-0 flex-1 flex-col gap-1.5 p-3.5 sm:p-4\">\n            <div className=\"min-w-0\">\n              <h3\n                id={`product-${product.id}-title`}\n                className=\"line-clamp-2 font-serif text-[17px] font-medium italic leading-snug text-hsecondary\"\n              >\n                {product.name}\n              </h3>\n\n              {product.variants?.length === 1 &&\n                product.variants[0].name &&\n                normalizeProductName(product.variants[0].name) !== normalizeProductName(product.name) && (\n                <span className=\"mt-0.5 block truncate text-[11px] text-gray-400\">\n                  {product.variants[0].name}\n                </span>\n              )}\n\n              {product.description && (\n                <p className=\"mt-1 line-clamp-1 text-xs leading-relaxed text-gray-400\">\n                  {stripHtml(product.description)}\n                </p>\n              )}\n            </div>\n\n            {product.variants && product.variants.length > 1 && (\n              <div className=\"flex min-w-0 items-center gap-1.5 pt-0.5\" onClick={(event) => event.stopPropagation()}>\n                {allVariantItems.slice(0, 4).map(({ variantId, variantName, image }) => (\n                  <button\n                    key={variantId}\n                    type=\"button\"\n                    onClick={() => handleVariantSelect(variantId, image)}\n                    className={`size-6 shrink-0 overflow-hidden rounded-full border-2 transition-all ${selectedVariantId === variantId ? 'scale-105 border-hsecondary' : 'border-gray-200 hover:border-gray-400'}`}\n                    aria-label={variantName}\n                    title={variantName}\n                  >\n                    <Image\n                      src={image || product.media?.[0]?.file || PLACEHOLDER_IMAGE_SRC}\n                      alt={variantName || ''}\n                      width={24}\n                      height={24}\n                      className=\"h-full w-full object-cover\"\n                    />\n                  </button>\n                ))}\n                {allVariantItems.length > 4 && (\n                  <span className=\"truncate text-[10px] text-gray-400\">+{allVariantItems.length - 4} more</span>\n                )}\n              </div>\n            )}\n\n            <div className=\"mt-auto flex items-end justify-between gap-3\" onClick={(event) => event.stopPropagation()}>\n              <div className=\"flex min-w-0 flex-wrap items-baseline gap-1.5\">\n                <span className=\"font-serif text-[17px] font-semibold italic text-hsecondary\">\n                  ${(displayFinalPrice || (product as any).price || 0).toFixed(2)}\n                </span>\n                {displayIsDiscounted && displayPriceBeforeDiscount > 0 && (\n                  <span className=\"text-[11px] text-gray-400 line-through\">\n                    ${(displayPriceBeforeDiscount || 0).toFixed(2)}\n                  </span>\n                )}\n              </div>\n\n              {displayInventoryCount === 0 ? (\n                outOfStockVariantId ? (\n                  <NotifyWhenInStockButton\n                    productId={product._id || product.id}\n                    variantId={outOfStockVariantId}\n                    size=\"sm\"\n                    appearance=\"compact\"\n                  />\n                ) : null\n              ) : (\n                <button\n                  type=\"button\"\n                  onClick={handleAddToCart}\n                  disabled={isAddingToCart || ((product.variants?.length || 0) > 1 && variantImages.length > 1 && !selectedVariantId)}\n                  className=\"flex shrink-0 items-center justify-center gap-1.5 rounded-full bg-hsecondary px-4 py-2 text-xs font-medium text-white transition hover:bg-hsecondary/90 disabled:cursor-not-allowed disabled:opacity-50\"\n                >\n                  <ShoppingCart className=\"size-3.5\" />\n                  <span className=\"hidden sm:inline\">Add to cart</span>\n                  <span className=\"sm:hidden\">Add</span>\n                </button>\n              )}\n            </div>\n          </div>\n        </motion.div>\n\n        {showQuickView && (\n          <QuickViewModal\n            product={product}\n            onClose={() => setShowQuickView(false)}\n            onNavigateToProduct={() => handleCardClick}\n          />\n        )}\n      </>\n    );\n  }\n\n  return (\n    <>\n      <motion.div\n        className={`bg-white rounded-2xl overflow-hidden group h-full flex flex-col cursor-pointer hover:-translate-y-1 hover:shadow-md transition-all relative ${className ?? ''}`}\n        whileHover={{ y: -2 }}\n        onMouseEnter={() => setIsHovered(true)}\n        onMouseLeave={() => setIsHovered(false)}\n        aria-labelledby={`product-${product.id}-title`}\n        role=\"article\"\n        tabIndex={0}\n        onClick={handleCardClick}\n        onKeyDown={handleKeyDown}\n      >\n        {/* Image */}\n        <div className=\"relative aspect-square overflow-hidden bg-white shrink-0\">\n          <Image\n            src={imageSource.src}\n            alt={imageSource.alt}\n            className=\"w-full h-full object-contain group-hover:scale-105 transition-transform duration-300\"\n            height={400}\n            width={400}\n            priority={false}\n            onLoad={handleImageLoad}\n            onError={() => setIsImageLoaded(true)}\n            key={imageSource.src}\n          />\n\n          {/* Top-left badge: out of stock takes priority (only if showStock), then discount, then new */}\n          {product.showStock && displayInventoryCount === 0 ? (\n            <span className=\"absolute top-2.5 left-2.5 bg-gray-800 text-white text-[10px] font-semibold px-2.5 py-1 rounded-md z-10\">\n              Out of Stock\n            </span>\n          ) : product.showStock && displayInventoryStatus === ProductVariantInventoryStatusEnum.LOWSTOCK ? (\n            <span className=\"absolute top-2.5 left-2.5 bg-amber-500 text-white text-[10px] font-semibold px-2.5 py-1 rounded-md z-10\">\n              Low Stock\n            </span>\n          ) : displayIsDiscounted ? (\n            <span className=\"absolute top-2.5 left-2.5 bg-haccent-500 text-white text-[10px] font-bold px-2 py-0.5 rounded-full z-10\">\n              Save {displayDiscountPercent}%\n            </span>\n          ) : (product as any).isNew ? (\n            <span className=\"absolute top-2.5 left-2.5 bg-green-700 text-white text-[10px] font-semibold px-2.5 py-1 rounded-md z-10\">\n              New\n            </span>\n          ) : null}\n\n          {/* Wishlist button — always visible */}\n          {showFavoriteButton && (\n            <button\n              type=\"button\"\n              onClick={handleFavorite}\n              className=\"absolute top-2.5 right-2.5 p-1.5 rounded-full bg-white/90 hover:bg-white shadow-sm transition-all duration-200 z-10\"\n              aria-label={isFavorite ? 'Remove from wishlist' : 'Add to wishlist'}\n            >\n              <Heart className={`size-4 transition-colors ${isFavorite ? 'fill-red-400 text-red-400' : 'text-gray-400'}`} />\n            </button>\n          )}\n        </div>\n\n        {/* Info */}\n        <div className=\"p-3 pb-3 flex flex-col gap-1 flex-1\">\n          {/* Reviews are temporarily hidden.\n          <div className=\"flex items-center gap-0.5\">\n            {[...Array(5)].map((_, i) => (\n              <Star\n                key={i}\n                className={`size-3 ${i < Math.floor(liveAverageRating)\n                  ? 'fill-hsecondary text-hsecondary'\n                  : 'fill-gray-200 text-gray-200'\n                  }`}\n              />\n            ))}\n            <span className=\"text-[10px] text-gray-400 ml-1\">({liveReviewCount})</span>\n          </div>\n          */}\n\n          {/* Name */}\n          <h3 className=\"text-sm font-semibold text-gray-800 line-clamp-2 leading-snug\">\n            {product.name}\n          </h3>\n\n          {/* Single variant name — shown when there's exactly one variant (no pills rendered) */}\n          {product.variants?.length === 1 &&\n            product.variants[0].name &&\n            normalizeProductName(product.variants[0].name) !== normalizeProductName(product.name) && (\n            <span className=\"text-[11px] text-gray-400 leading-none -mt-0.5\">\n              {product.variants[0].name}\n            </span>\n          )}\n\n          {/* Description */}\n          {product.description && (\n            <p className=\"text-xs text-gray-400 line-clamp-2 leading-relaxed\">\n              {stripHtml(product.description)}\n            </p>\n          )}\n\n          {/* Variant Selector */}\n          {product.variants && product.variants.length > 1 && (\n            <div className=\"flex flex-col gap-1 pt-1\" onClick={e => e.stopPropagation()}>\n              <div className=\"flex flex-wrap gap-1\">\n                {allVariantItems.slice(0, MAX_VISIBLE_VARIANTS).map(({ variantId, variantName, image }) => (\n                  <button\n                    key={variantId}\n                    type=\"button\"\n                    onClick={() => handleVariantSelect(variantId, image)}\n                    className={`w-6 h-6 rounded-full border-2 overflow-hidden transition-all shrink-0 ${selectedVariantId === variantId\n                      ? 'border-hsecondary scale-110'\n                      : 'border-gray-200 hover:border-gray-400'\n                      }`}\n                    aria-label={variantName}\n                    title={variantName}\n                  >\n                    {/* Fall back to the product image when the variant has no photo of its own */}\n                    <Image src={image || product.media?.[0]?.file || PLACEHOLDER_IMAGE_SRC} alt={variantName || ''} width={24} height={24} className=\"w-full h-full object-cover\" />\n                  </button>\n                ))}\n                {allVariantItems.length > MAX_VISIBLE_VARIANTS && (\n                  <span className=\"text-[10px] text-gray-400 self-center shrink-0\">\n                    +{allVariantItems.length - MAX_VISIBLE_VARIANTS} more\n                  </span>\n                )}\n              </div>\n              {selectedVariant?.name &&\n                normalizeProductName(selectedVariant.name) !== normalizeProductName(product.name) && (\n                <span className=\"text-[10px] text-gray-500 leading-none\">\n                  {selectedVariant.name}\n                </span>\n              )}\n            </div>\n          )}\n\n          {/* Price */}\n          <div className=\"flex items-center gap-2 pt-0.5\">\n            <span className=\"font-bold text-sm text-gray-900\">\n              ${(displayFinalPrice || (product as any).price || 0).toFixed(2)}\n            </span>\n            {displayIsDiscounted && displayPriceBeforeDiscount > 0 && (\n              <span className=\"text-sm text-gray-400 line-through\">\n                ${(displayPriceBeforeDiscount || 0).toFixed(2)}\n              </span>\n            )}\n          </div>\n\n          {/* Add to Cart / Notify — always visible at bottom */}\n          <div className=\"mt-auto pt-2\" onClick={e => e.stopPropagation()}>\n            {displayInventoryCount === 0 ? (\n              (() => {\n                const outOfStockVariantId: string | undefined =\n                  selectedVariantId ||\n                  (product.variants?.[0] as any)?._id ||\n                  (product.variants?.[0] as any)?.id;\n                return outOfStockVariantId ? (\n                  <NotifyWhenInStockButton\n                    productId={product._id || product.id}\n                    variantId={outOfStockVariantId}\n                    size=\"sm\"\n                  />\n                ) : null;\n              })()\n            ) : (\n              <button\n                type=\"button\"\n                onClick={handleAddToCart}\n                disabled={isAddingToCart || ((product.variants?.length || 0) > 1 && variantImages.length > 1 && !selectedVariantId)}\n                className=\"w-full bg-hsecondary hover:bg-hsecondary/90 text-white text-[10px] min-[380px]:text-[11px] sm:text-xs font-medium px-2 sm:px-5 py-2 rounded-full flex items-center justify-center gap-1 whitespace-nowrap transition-all disabled:opacity-50 disabled:cursor-not-allowed\"\n              >\n                <ShoppingCart className=\"size-3.5 shrink-0\" />\n                <span>Add to cart</span>\n              </button>\n            )}\n          </div>\n        </div>\n      </motion.div>\n\n      {showQuickView && (\n        <QuickViewModal\n          product={product}\n          onClose={() => setShowQuickView(false)}\n          onNavigateToProduct={() => handleCardClick}\n        />\n      )}\n    </>\n  );\n}\n","import React from 'react';\n\ninterface SkeletonProps {\n  className?: string;\n}\n\nexport function Skeleton({ className = '' }: SkeletonProps) {\n  return (\n    <div className={`animate-pulse bg-linear-to-r from-gray-200 via-gray-300 to-gray-200 bg-size-[200%_100%] rounded-sm ${className}`} />\n  );\n}\n\nexport function ProductCardSkeleton({ layout = 'vertical' }: { layout?: 'vertical' | 'horizontal' }) {\n  if (layout === 'horizontal') {\n    return (\n      <div className=\"flex min-h-[148px] overflow-hidden rounded-2xl border border-slate-100 bg-white\">\n        <Skeleton className=\"m-3 mr-0 w-28 shrink-0 rounded-xl sm:w-32\" />\n        <div className=\"flex min-w-0 flex-1 flex-col gap-3 p-4\">\n          <Skeleton className=\"h-5 w-2/3\" />\n          <Skeleton className=\"h-3 w-full\" />\n          <div className=\"mt-auto flex items-end justify-between gap-4\">\n            <Skeleton className=\"h-5 w-20\" />\n            <Skeleton className=\"h-8 w-24 rounded-full\" />\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"bg-white rounded-2xl overflow-hidden shadow-xs\">\n      <Skeleton className=\"h-64 w-full\" />\n      <div className=\"p-4 space-y-3\">\n        <Skeleton className=\"h-6 w-3/4\" />\n        <Skeleton className=\"h-4 w-1/2\" />\n        <div className=\"flex justify-between items-center pt-2\">\n          <Skeleton className=\"h-8 w-24\" />\n          <Skeleton className=\"h-10 w-10 rounded-full\" />\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport function OrderCardSkeleton() {\n  return (\n    <div className=\"bg-white rounded-2xl p-6 shadow-xs\">\n      <div className=\"flex justify-between items-start mb-4\">\n        <div className=\"space-y-2 flex-1\">\n          <Skeleton className=\"h-6 w-32\" />\n          <Skeleton className=\"h-4 w-48\" />\n        </div>\n        <Skeleton className=\"h-6 w-20 rounded-full\" />\n      </div>\n      <div className=\"space-y-3\">\n        <Skeleton className=\"h-4 w-full\" />\n        <Skeleton className=\"h-4 w-2/3\" />\n      </div>\n    </div>\n  );\n}\n","import React from 'react';\nimport { LucideIcon, Plus } from 'lucide-react';\n\ninterface EmptyStateProps {\n  icon: LucideIcon;\n  title: string;\n  description: string;\n  actionLabel?: string;\n  onAction?: () => void;\n}\n\nexport function EmptyState({ icon: Icon, title, description, actionLabel, onAction }: EmptyStateProps) {\n  return (\n    <div className=\"flex flex-col items-center justify-center gap-3 rounded-2xl border border-gray-200 bg-gray-50 py-12 px-6 text-center\">\n      <div className=\"size-14 rounded-full bg-gray-100 flex items-center justify-center\">\n        <Icon className=\"size-7 text-gray-400\" />\n      </div>\n      <div>\n        <p className=\"font-semibold text-gray-800\">{title}</p>\n        <p className=\"text-sm text-gray-500 mt-0.5\">{description}</p>\n      </div>\n      {actionLabel && onAction && (\n        <button\n          className='flex w-full sm:w-auto flex-row items-center justify-center gap-2 px-6 py-2 border border-slate-200 rounded-xl text-slate-700 hover:opacity-80 transition-colors bg-hsecondary text-white text-sm'\n          onClick={onAction}\n        >\n          <Plus className=\"h-4 w-4\" />\n          {actionLabel}\n        </button>\n      )}\n    </div>\n  );\n}\n\n","import { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { ProductsApi } from '@/lib/Apis';\nimport { ProductFilters } from '@/lib/types';\nimport { useQuery } from '@tanstack/react-query';\n\nexport enum SortOrder {\n  Asc = \"asc\",\n  Desc = \"desc\",\n}\n\nexport function useProducts(filters?: ProductFilters, page: number = 1, limit: number = 20) {\n  const { data, isLoading, error, refetch } = useQuery({\n    queryKey: [\n      \"products\",\n      filters?.search,\n      filters?.category,\n      filters?.subCategory,\n      filters?.inStock,\n      page,\n      limit\n    ],\n    queryFn: async () => {\n      const response = await new ProductsApi(AXIOS_CONFIG).getAllProducts(\n        undefined, // maxPrice — omitted; price filtering is handled client-side to correctly support multi-variant products\n        undefined, // minPrice\n        undefined, // brandFilter\n        filters?.inStock !== undefined ? (filters.inStock ? 'in-stock' : 'out-of-stock') : undefined, // availability\n        \"createdAt\", // sort\n        filters?.subCategory, // subCategoryId\n        filters?.category, // categoryId\n        true, // isActive\n        limit, // limit\n        page // page\n      );\n\n      const res = response.data;\n\n      return {\n        products: res.data || [],\n        pagination: {\n          page: res.currentPage || page,\n          limit: res.limit || limit,\n          total: res.totalItems || 0,\n          totalPages: res.totalPages || 0,\n        },\n      };\n    },\n    staleTime: 2 * 60 * 1000, // 2 minutes - products list can be cached briefly\n  });\n\n\n  return {\n    products: data?.products || [],\n    isLoading,\n    error: error as Error | null,\n    pagination: data?.pagination || {\n      page: 1,\n      limit: 20,\n      total: 0,\n      totalPages: 0,\n    },\n    refetch,\n  };\n}\n\nexport function useProduct(id: string) {\n  const { data, isLoading, error, refetch } = useQuery({\n    queryKey: ['product', id],\n    queryFn: async () => {\n      const response = await new ProductsApi(AXIOS_CONFIG).getSingleProduct(id);\n      return response.data;\n    },\n    staleTime: 5 * 60 * 1000, // 5 minutes - single product details rarely change\n    enabled: !!id, // Only fetch if id is provided\n  });\n\n  return {\n    product: data || null,\n    isLoading,\n    error: error as Error | null,\n    refetch,\n  };\n}\n\nexport function useHomepageSpotlightProduct() {\n  const { data, isLoading, error } = useQuery({\n    queryKey: ['homepage-spotlight-product'],\n    queryFn: async () => {\n      // The compatible `/products/featured` endpoint now resolves the product\n      // explicitly selected through `homeScreenSpotlight`.\n      const response = await new ProductsApi(AXIOS_CONFIG).getFeaturedProduct();\n      return response.data;\n    },\n    // Spotlight is controlled from a separate admin app. Always refresh when\n    // shoppers return to the page, and poll lightly while it remains open so\n    // removing the spotlight also removes the component without a hard reload.\n    staleTime: 0,\n    refetchOnWindowFocus: 'always',\n    refetchInterval: 15_000,\n  });\n\n  return {\n    spotlightProduct: data ?? null,\n    isLoading,\n    error: error as Error | null,\n  };\n}\n\n/**\n * @deprecated Use `useHomepageSpotlightProduct` for the explicit single-select\n * homepage product. Kept as an alias for existing storefront integrations.\n */\nexport function useFeaturedProducts() {\n  const { spotlightProduct, isLoading, error } = useHomepageSpotlightProduct();\n\n  return {\n    featuredProduct: spotlightProduct,\n    isLoading,\n    error,\n  };\n}\n\n// Re-export useCategories from CategoriesProvider for backward compatibility\nexport { useCategories } from '@/providers/CategoriesProvider';\n","/**\n * Format price with currency symbol\n */\nexport function formatPrice(price: number, currency: string = 'USD'): string {\n  return new Intl.NumberFormat('en-US', {\n    style: 'currency',\n    currency,\n  }).format(price);\n}\n\n/**\n * Format date\n */\nexport function formatDate(date: string | Date, format: 'short' | 'long' = 'short'): string {\n  const d = typeof date === 'string' ? new Date(date) : date;\n\n  if (format === 'long') {\n    return new Intl.DateTimeFormat('en-US', {\n      year: 'numeric',\n      month: 'long',\n      day: 'numeric',\n      hour: '2-digit',\n      minute: '2-digit',\n    }).format(d);\n  }\n\n  return new Intl.DateTimeFormat('en-US', {\n    year: 'numeric',\n    month: 'short',\n    day: 'numeric',\n  }).format(d);\n}\n\n/**\n * Truncate text with ellipsis\n */\nexport function truncate(text: string, maxLength: number): string {\n  if (text.length <= maxLength) return text;\n  return text.slice(0, maxLength) + '...';\n}\n\n/**\n * Generate initials from name\n */\nexport function getInitials(firstName: string, lastName: string): string {\n  return `${firstName?.charAt(0)}${lastName?.charAt(0)}`.toUpperCase();\n}\n\n\n/**\n* Format phone number to US international format\n* Always prepends +1 for US numbers\n*/\nexport const formatPhoneNumber = (value: string) => {\n  if (!value) return value;\n  const phoneNumber = value.replace(/[^\\d]/g, '');\n  if (!phoneNumber) return '';\n  \n  // Remove any existing +1 or 1 prefix\n  const cleaned = phoneNumber.replace(/^(\\+?1)/, '');\n  const len = cleaned.length;\n  \n  if (len === 0) return '+1 ';\n  if (len < 4) return `+1 ${cleaned}`;\n  if (len < 7) return `+1 ${cleaned.slice(0, 3)} ${cleaned.slice(3)}`;\n  return `+1 ${cleaned.slice(0, 3)} ${cleaned.slice(3, 6)}-${cleaned.slice(6, 10)}`;\n};\n","import { Product } from '@/lib/Apis';\n\nexport interface ProductFilters {\n  search?: string;\n  category?: string;\n  subCategory?: string;\n  inStock?: boolean;\n  tags?: string[];\n  newArrivals?: boolean;\n  brand?: string;\n  minPrice?: number;\n  maxPrice?: number;\n}\n\n/**\n * Filters products based on price range.\n * A product passes if ANY variant's price falls within [minPrice, maxPrice],\n * regardless of stock. Stock filtering is handled separately by the inStock toggle.\n */\nexport function filterProductsByPriceRange(\n  products: Product[],\n  minPrice?: number,\n  maxPrice?: number\n): Product[] {\n  if (minPrice === undefined && maxPrice === undefined) {\n    return products;\n  }\n\n  const min = minPrice ?? 0;\n  const max = maxPrice ?? Infinity;\n\n  const result = products.filter((product) => {\n    if (!product.variants || product.variants.length === 0) {\n      const price = (product as any).finalPrice ?? (product as any).price ?? 0;\n      const passes = price >= min && price <= max;\n      return passes;\n    }\n\n    let passes = false;\n    const lines = product.variants.map((v: any) => {\n      const price = v.finalPrice ?? v.price ?? 0;\n      const inRange = price >= min && price <= max;\n      const stock = v.inventoryCount ?? 0;\n      if (inRange) passes = true;\n      return `      ${inRange ? '→' : ' '} \"${v.name || v._id}\" price=$${price} stock=${stock}${inRange ? ' [IN RANGE]' : ''}`;\n    });\n\n\n    return passes;\n  });\n\n  return result;\n}\n\n/**\n * Finds the best in-stock variant within the price range to pre-select.\n * Returns null if no in-stock variant falls in range — the ProductCard\n * will then use its own default selection logic.\n */\nexport function findDefaultVariantForPriceRange(\n  product: Product,\n  minPrice?: number,\n  maxPrice?: number\n): any {\n  if (!product.variants || product.variants.length === 0) {\n    return null;\n  }\n\n  const min = minPrice ?? 0;\n  const max = maxPrice ?? Infinity;\n\n  product.variants.forEach((v: any) => {\n    const price = v.finalPrice ?? v.price ?? 0;\n    const inRange = price >= min && price <= max;\n    const stock = v.inventoryCount ?? 0;\n  });\n\n  const inStockInRange = product.variants.filter((variant: any) => {\n    const price = variant.finalPrice ?? variant.price ?? 0;\n    return price >= min && price <= max && (variant.inventoryCount ?? 0) > 0;\n  });\n\n  if (inStockInRange.length === 0) {\n    return null;\n  }\n\n  const pick = inStockInRange.reduce((best: any, current: any) =>\n    (current.finalPrice ?? Infinity) < (best.finalPrice ?? Infinity) ? current : best\n  , inStockInRange[0]);\n\n  return pick;\n}\n","const PERSONALIZATION_SESSION_STARTED_AT_KEY = 'personalization-session-started-at';\n\n/**\n * Returns a timestamp that survives refreshes in the current browser tab.\n * A new tab/session gets a new timestamp, allowing views learned during the\n * previous visit to affect the next personalized feed.\n */\nexport function getPersonalizationSessionStartedAt(): string | undefined {\n  if (typeof window === 'undefined') return undefined;\n\n  try {\n    const existingValue = window.sessionStorage.getItem(PERSONALIZATION_SESSION_STARTED_AT_KEY);\n    const existingTimestamp = existingValue ? Date.parse(existingValue) : Number.NaN;\n\n    if (\n      existingValue &&\n      Number.isFinite(existingTimestamp) &&\n      existingTimestamp <= Date.now() + 60 * 1000\n    ) {\n      return existingValue;\n    }\n\n    const sessionStartedAt = new Date().toISOString();\n    window.sessionStorage.setItem(PERSONALIZATION_SESSION_STARTED_AT_KEY, sessionStartedAt);\n    return sessionStartedAt;\n  } catch {\n    // Personalization should still work when browser storage is unavailable.\n    return new Date().toISOString();\n  }\n}\n","import { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { ProductsApi, Product, PersonalizedProductsQueryDtoSortEnum } from '@/lib/Apis';\n\nimport { useQuery } from '@tanstack/react-query';\nimport { getDeviceId } from '@/lib/utils/deviceId';\nimport { getPersonalizationSessionStartedAt } from '@/lib/utils/personalizationSession';\nimport { ProductFilters } from '@/lib/types';\n\ninterface UsePersonalizedProductsOptions {\n    /** Product filters (category, subcategory, price range, etc.) */\n    filters?: ProductFilters;\n    /** Number of products to return */\n    limit?: number;\n    /** Current page for pagination */\n    page?: number;\n    /** Percentage of personalized products (0-100, default 40) */\n    personalizedRatio?: number;\n    /** Place admin-selected featured products before personalized and regular products */\n    featuredFirst?: boolean;\n    /** Backend sort order */\n    sort?: PersonalizedProductsQueryDtoSortEnum;\n    /** Whether to enable the query */\n    enabled?: boolean;\n}\n\n/**\n * Hook to fetch personalized product recommendations based on user browsing history.\n * Uses device ID for anonymous users and auth token for logged-in users.\n * Supports the same filters as useProducts (category, subcategory, price range).\n * \n * @param options - Configuration options for the query\n * @returns Personalized products response with loading/error states\n */\nexport function usePersonalizedProducts(options: UsePersonalizedProductsOptions = {}) {\n    const {\n        filters,\n        limit = 20,\n        page = 1,\n        personalizedRatio = 40,\n        featuredFirst = false,\n        sort,\n        enabled = true\n    } = options;\n\n    const { data, isLoading, error, refetch } = useQuery({\n        queryKey: [\n            'personalizedProducts',\n            filters?.category,\n            filters?.categories,\n            filters?.subCategory,\n            filters?.maxPrice,\n            filters?.minPrice,\n            filters?.inStock,\n            filters?.onSale,\n            filters?.brand,\n            filters?.brands,\n            limit,\n            page,\n            personalizedRatio,\n            featuredFirst,\n            sort,\n        ],\n        queryFn: async () => {\n            const deviceId = getDeviceId();\n            const personalizationSessionStartedAt = getPersonalizationSessionStartedAt();\n            const selectedCategories = filters?.categories?.length\n                ? filters.categories\n                : filters?.category\n                    ? [filters.category]\n                    : [];\n            const selectedBrands = filters?.brands?.length\n                ? filters.brands\n                : filters?.brand\n                    ? [filters.brand]\n                    : [];\n\n            const response = await new ProductsApi(AXIOS_CONFIG).getPersonalizedProducts(\n                {\n                    page,\n                    limit,\n                    personalizedRatio,\n                    featuredFirst,\n                    personalizationSessionStartedAt,\n                    sort,\n                    brandFilter: selectedBrands.join(',') || undefined,\n                    filters: {\n                        category: selectedCategories.length === 1 ? selectedCategories[0] : undefined,\n                        categories: selectedCategories.length ? selectedCategories : undefined,\n                        brands: selectedBrands.length ? selectedBrands : undefined,\n                        subCategory: filters?.subCategory,\n                        minPrice: filters?.minPrice,\n                        maxPrice: filters?.maxPrice,\n                        inStock: filters?.inStock,\n                        onSale: filters?.onSale,\n                    },\n                },\n                deviceId,\n            );\n\n            return response.data;\n        },\n        staleTime: 2 * 60 * 1000, // 2 minutes - personalized results can be cached briefly\n        enabled,\n    });\n\n    return {\n        products: (data?.products as unknown as Product[]) || [],\n        isPersonalized: data?.isPersonalized ?? false,\n        personalizedCount: data?.personalizedCount ?? 0,\n        regularCount: data?.regularCount ?? 0,\n        availableBrands: data?.availableBrands ?? [],\n        isLoading,\n        error: error as Error | null,\n        refetch,\n        pagination: {\n            page: data?.page ?? page,\n            limit,\n            total: data?.total ?? 0,\n            totalPages: data?.totalPages ?? 0,\n        },\n    };\n}\n","'use client';\n\nimport {\n  useCallback,\n  useEffect,\n  useMemo,\n  useRef,\n  useState,\n} from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport {\n  Accessibility,\n  Activity,\n  Bath,\n  Bed,\n  Bone,\n  Check,\n  ChevronLeft,\n  ChevronRight,\n  ChevronDown,\n  Cigarette,\n  Cross,\n  Droplet,\n  Ear,\n  Flower2,\n  Footprints,\n  Gift,\n  Grid,\n  Hand,\n  HeartPulse,\n  Luggage,\n  List,\n  ListFilter,\n  Monitor,\n  Moon,\n  Package,\n  PackageOpen,\n  PawPrint,\n  PersonStanding,\n  Search,\n  Scale,\n  ShieldCheck,\n  ShoppingBag,\n  Sparkles,\n  SprayCan,\n  TestTube,\n  VenetianMask,\n  Wind,\n  X,\n  Shirt,\n  Pill,\n  Heart,\n  ArrowRight,\n  Stethoscope,\n  Baby,\n  Dumbbell,\n  Thermometer,\n  Eye,\n  Smile,\n  Leaf,\n  Sun,\n  Brain,\n  Apple,\n  Droplets,\n  Syringe,\n  Tablets,\n} from 'lucide-react';\nimport { useRouter } from 'next/navigation';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { ProductCard } from '@/components/ProductCard';\nimport { ProductCardSkeleton, Skeleton } from '@/components/ui/Skeleton';\nimport { EmptyState } from '@/components/EmptyState';\nimport { useCategories, useFeaturedProducts } from '@/hooks/useProducts';\nimport { ProductFilters } from '@/lib/types';\nimport { formatPrice } from '@/lib/utils/format';\nimport { filterProductsByPriceRange, findDefaultVariantForPriceRange } from '@/lib/utils/productFilters';\nimport Image from 'next/image';\nimport React from 'react';\nimport { useSearchParams } from 'next/navigation';\nimport { usePersonalizedProducts } from '@/hooks/usePersonalizedProducts';\nimport { PersonalizedProductsQueryDtoSortEnum } from '@/lib/Apis';\n\ntype SortOption = 'featured' | 'price-low-high' | 'price-high-low' | 'newest';\ntype ProductView = 'grid' | 'list';\n\nconst PRICE_SLIDER_MAX = 200;\n\ninterface ShopScreenProps {\n  initialFilters?: ProductFilters;\n  categoryName?: string;\n}\n\nconst getPageFromSearchParams = (searchParams: Pick<URLSearchParams, 'get'>) => {\n  const requestedPage = Number(searchParams.get('page'));\n  return Number.isInteger(requestedPage) && requestedPage > 0 ? requestedPage : 1;\n};\n\nconst normalizeMultiSelect = (multiple?: string[], single?: string) =>\n  multiple?.length ? multiple : single ? [single] : [];\n\n// Rules are intentionally ordered from specific product groups to broad concepts.\n// That keeps names such as \"Digestive Health\" from being caught by the generic\n// health/care rules before a more useful icon is found.\nconst CATEGORY_ICON_RULES = [\n  { keywords: ['compression stocking', 'compression sock', 'hosiery', 'varicose'], icon: Footprints },\n  { keywords: ['durable medical equipment', 'dme', 'wheelchair', 'walker', 'rollator', 'crutch', 'mobility aid', 'walking cane'], icon: Accessibility },\n  { keywords: ['first aid', 'wound', 'bandage', 'gauze', 'antiseptic', 'burn care'], icon: Cross },\n  { keywords: ['disposable medical', 'medical supplies', 'surgical supplies', 'exam supplies'], icon: PackageOpen },\n  { keywords: ['ppe', 'face mask', 'surgical mask', 'protective equipment'], icon: VenetianMask },\n  { keywords: ['otc', 'over the counter', 'nonprescription', 'prescription', 'medicine', 'medication', 'pharmaceutical', 'pharmacy', 'drug'], icon: Tablets },\n  { keywords: ['vitamin', 'supplement', 'mineral', 'probiotic', 'multivitamin'], icon: Pill },\n  { keywords: ['cough', 'cold and flu', 'cold flu', 'fever', 'temperature', 'thermometer'], icon: Thermometer },\n  { keywords: ['allergy', 'sinus', 'nasal', 'congestion'], icon: Wind },\n  { keywords: ['respiratory', 'asthma', 'inhaler', 'nebulizer', 'oxygen', 'breathing'], icon: Wind },\n  { keywords: ['heart', 'cardiac', 'cardiovascular', 'blood pressure', 'hypertension'], icon: HeartPulse },\n  { keywords: ['diabetes', 'diabetic', 'glucose', 'insulin', 'blood sugar'], icon: Droplet },\n  { keywords: ['diagnostic', 'laboratory', 'lab test', 'test kit', 'testing'], icon: TestTube },\n  { keywords: ['medical device', 'monitoring', 'monitor', 'health device'], icon: Monitor },\n  { keywords: ['baby', 'infant', 'toddler', 'child', 'pediatric', 'nursing'], icon: Baby },\n  { keywords: ['maternity', 'pregnancy', 'pregnant', 'prenatal', 'postpartum'], icon: Baby },\n  { keywords: ['feminine', 'women', 'menstrual', 'period care'], icon: Flower2 },\n  { keywords: ['mens health', 'men care', 'male health'], icon: PersonStanding },\n  { keywords: ['personal care', 'personal hygiene', 'body care', 'deodorant'], icon: Heart },\n  { keywords: ['bath', 'shower', 'bathing'], icon: Bath },\n  { keywords: ['incontinence', 'bladder', 'urology', 'urinary'], icon: Droplets },\n  { keywords: ['dental', 'oral', 'tooth', 'teeth', 'mouth care'], icon: Smile },\n  { keywords: ['eye', 'vision', 'optical', 'contact lens'], icon: Eye },\n  { keywords: ['ear', 'hearing', 'audiology'], icon: Ear },\n  { keywords: ['skin', 'dermatology', 'acne', 'sunscreen', 'sun care'], icon: Sun },\n  { keywords: ['hair', 'grooming', 'shaving'], icon: SprayCan },\n  { keywords: ['beauty', 'cosmetic', 'makeup'], icon: Sparkles },\n  { keywords: ['foot care', 'podiatry', 'heel care'], icon: Footprints },\n  { keywords: ['bone', 'orthopedic', 'joint', 'arthritis', 'brace support'], icon: Bone },\n  { keywords: ['pain relief', 'muscle pain', 'recovery', 'rehabilitation', 'therapy'], icon: Activity },\n  { keywords: ['fitness', 'sport', 'exercise', 'gym'], icon: Dumbbell },\n  { keywords: ['weight management', 'weight loss', 'slimming'], icon: Scale },\n  { keywords: ['nutrition', 'diet', 'healthy food', 'meal replacement'], icon: Apple },\n  { keywords: ['digestive', 'digestion', 'stomach', 'gut health', 'constipation', 'diarrhea'], icon: Apple },\n  { keywords: ['hydration', 'electrolyte', 'water', 'fluid replacement'], icon: Droplets },\n  { keywords: ['immune', 'immunity', 'infection', 'covid'], icon: ShieldCheck },\n  { keywords: ['vaccine', 'vaccination', 'injection', 'syringe'], icon: Syringe },\n  { keywords: ['natural', 'organic', 'herbal', 'homeopathic', 'botanical'], icon: Leaf },\n  { keywords: ['mental', 'brain', 'cognitive', 'memory', 'focus'], icon: Brain },\n  { keywords: ['sleep', 'insomnia', 'bedtime'], icon: Moon },\n  { keywords: ['lifestyle', 'wellness', 'self care'], icon: Sparkles },\n  { keywords: ['sexual health', 'intimate care', 'contraceptive', 'family planning'], icon: Heart },\n  { keywords: ['smoking', 'tobacco', 'nicotine', 'smoking cessation'], icon: Cigarette },\n  { keywords: ['travel', 'traveler'], icon: Luggage },\n  { keywords: ['home care', 'bed care', 'bedroom aids'], icon: Bed },\n  { keywords: ['scrub', 'uniform', 'medical apparel', 'workwear'], icon: Shirt },\n  { keywords: ['pet', 'veterinary', 'animal care'], icon: PawPrint },\n  { keywords: ['gift', 'gift set'], icon: Gift },\n  { keywords: ['aromatherapy', 'essential oil'], icon: Flower2 },\n  { keywords: ['hand care', 'hand sanitizer'], icon: Hand },\n  { keywords: ['clinical', 'clinic', 'doctor', 'general health', 'health care'], icon: Stethoscope },\n  { keywords: ['equipment', 'supplies'], icon: PackageOpen },\n  { keywords: ['care'], icon: Heart },\n] as const;\n\nconst getCategoryIcon = (categoryName: string) => {\n  const normalizedName = categoryName\n    .toLowerCase()\n    .replace(/&/g, ' and ')\n    .replace(/[^a-z0-9]+/g, ' ')\n    .trim();\n\n  return CATEGORY_ICON_RULES.find(({ keywords }) =>\n    keywords.some((keyword) => normalizedName.includes(keyword))\n  )?.icon ?? Package;\n};\n\nexport function ShopScreen({ initialFilters = {}, categoryName }: ShopScreenProps) {\n  const router = useRouter();\n  const searchParams = useSearchParams();\n  const searchParam = searchParams.get('q') || '';\n  const { buildPath } = useBasePath();\n\n  // State\n  const [filters, setFilters] = useState<ProductFilters>(initialFilters);\n  const page = getPageFromSearchParams(searchParams);\n  const [searchQuery, setSearchQuery] = useState('');\n  const [isSearching, setIsSearching] = useState(false);\n  const [sortOption, setSortOption] = useState<SortOption>('featured');\n  const [productView, setProductView] = useState<ProductView>('grid');\n  const [showMobileFilters, setShowMobileFilters] = useState(false);\n  const [priceSliderValues, setPriceSliderValues] = useState({ min: 0, max: PRICE_SLIDER_MAX });\n  const [knownBrands, setKnownBrands] = useState<string[]>([]);\n  const [expandedCategories, setExpandedCategories] = useState<Record<string, boolean>>({});\n  const [expandedFilterSections, setExpandedFilterSections] = useState<Record<string, boolean>>({\n    category: true,\n    brand: false,\n    availability: true,\n    price: true,\n  });\n  const [mobileExpandedFilterSections, setMobileExpandedFilterSections] = useState<Record<string, boolean>>({\n    category: true,\n    brand: false,\n    availability: true,\n    price: false,\n  });\n  const [isMobile, setIsMobile] = useState(false);\n  const productsStartRef = useRef<HTMLDivElement>(null);\n  const categoryRailRef = useRef<HTMLDivElement>(null);\n  const previousPageRef = useRef(page);\n  const [categoryScrollState, setCategoryScrollState] = useState({\n    canScrollLeft: false,\n    canScrollRight: false,\n  });\n\n  const setPage = useCallback((nextPage: number) => {\n    const normalizedPage = Math.max(1, Math.floor(nextPage));\n    const params = new URLSearchParams(window.location.search);\n    const currentPage = getPageFromSearchParams(params);\n\n    if (currentPage === normalizedPage) return;\n\n    if (normalizedPage === 1) {\n      params.delete('page');\n    } else {\n      params.set('page', String(normalizedPage));\n    }\n\n    const query = params.toString();\n    const nextUrl = `${window.location.pathname}${query ? `?${query}` : ''}${window.location.hash}`;\n    router.push(nextUrl, { scroll: false });\n  }, [router]);\n\n  // Track screen size for responsive placeholder\n  useEffect(() => {\n    const mediaQuery = window.matchMedia('(max-width: 768px)');\n    setIsMobile(mediaQuery.matches);\n\n    const handleChange = (e: MediaQueryListEvent) => {\n      setIsMobile(e.matches);\n    };\n\n    mediaQuery.addEventListener('change', handleChange);\n    return () => mediaQuery.removeEventListener('change', handleChange);\n  }, []);\n\n  useEffect(() => {\n    if (!showMobileFilters) return;\n\n    const previousOverflow = document.body.style.overflow;\n    const handleEscape = (event: KeyboardEvent) => {\n      if (event.key === 'Escape') setShowMobileFilters(false);\n    };\n    document.body.style.overflow = 'hidden';\n    document.addEventListener('keydown', handleEscape);\n    return () => {\n      document.body.style.overflow = previousOverflow;\n      document.removeEventListener('keydown', handleEscape);\n    };\n  }, [showMobileFilters]);\n\n  // Keep the filters and page heading visible, but move the first product row into view.\n  useEffect(() => {\n    if (previousPageRef.current === page) return;\n\n    previousPageRef.current = page;\n    const animationFrame = window.requestAnimationFrame(() => {\n      productsStartRef.current?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n    });\n\n    return () => window.cancelAnimationFrame(animationFrame);\n  }, [page]);\n\n  const backendSort = useMemo((): PersonalizedProductsQueryDtoSortEnum | undefined => {\n    switch (sortOption) {\n      case 'price-low-high': return PersonalizedProductsQueryDtoSortEnum.PriceAsc;\n      case 'price-high-low': return PersonalizedProductsQueryDtoSortEnum.PriceDesc;\n      case 'newest': return PersonalizedProductsQueryDtoSortEnum.Latest;\n      default: return undefined;\n    }\n  }, [sortOption]);\n\n  // Query - using personalized products hook instead of generic useProducts\n  const { products, isLoading, pagination, isPersonalized, personalizedCount, availableBrands: catalogBrands } = usePersonalizedProducts({\n    filters,\n    page,\n    limit: 20,\n    personalizedRatio: sortOption === 'featured' ? 40 : 0, // Only personalize when featured sort is active\n    featuredFirst: sortOption === 'featured',\n    sort: backendSort,\n  });\n  const { categories, isLoading: isLoadingCategories } = useCategories();\n  const { featuredProduct } = useFeaturedProducts();\n  const handleSearch = (e: React.FormEvent) => {\n    e.preventDefault();\n    const sanitized = searchQuery.trim().replace(/\\s+/g, ' ');\n    if (sanitized) {\n      setIsSearching(true);\n      router.push(buildPath(`/search?q=${encodeURIComponent(sanitized)}`));\n    }\n  };\n\n  // Handle search input changes\n  const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n    setSearchQuery(e.target.value);\n  };\n\n  // Handle search when pressing Enter\n  const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === 'Enter') {\n      e.preventDefault();\n      const sanitized = searchQuery.trim().replace(/\\s+/g, ' ');\n      if (sanitized) {\n        setIsSearching(true);\n        router.push(buildPath(`/search?q=${encodeURIComponent(sanitized)}`));\n      }\n    }\n  };\n\n  useEffect(() => {\n    setPriceSliderValues({\n      min: Math.max(0, Math.min(filters.minPrice ?? 0, PRICE_SLIDER_MAX - 1)),\n      max: Math.max(1, Math.min(filters.maxPrice ?? PRICE_SLIDER_MAX, PRICE_SLIDER_MAX)),\n    });\n  }, [filters.minPrice, filters.maxPrice]);\n\n  // Real-time filtering for search sidebar REMOVED to fix \"basic search\" issue\n  // Search is now only triggered on Enter or Search Button click\n\n\n  // Auto-expand active category or parent of active subcategory\n  useEffect(() => {\n    const updates: Record<string, boolean> = {};\n    normalizeMultiSelect(filters.categories, filters.category).forEach((categoryId) => {\n      updates[categoryId] = true;\n    });\n    if (filters.subCategory) {\n      const parent = categories.find((c) =>\n        c.categorySubCategories?.some((sc) => (sc._id ?? sc.id) === filters.subCategory)\n      );\n      const parentId = parent?._id ?? parent?.id;\n      if (parentId) updates[parentId] = true;\n    }\n    if (Object.keys(updates).length) {\n      setExpandedCategories((prev) => ({ ...prev, ...updates }));\n    }\n  }, [filters.category, filters.categories, filters.subCategory, categories]);\n\n  const toggleCategoryExpand = useCallback((id: string) => {\n    setExpandedCategories((prev) => {\n      const isExpanded = !!prev[id];\n      // If closing, return empty (or remove id). If opening, return ONLY this id.\n      return isExpanded ? {} : { [id]: true };\n    });\n  }, []);\n\n  const sortedCategories = useMemo(\n    () => [...categories].sort((a, b) => a.name?.localeCompare(b.name ?? '') ?? 0),\n    [categories]\n  );\n  const updateCategoryScrollState = useCallback(() => {\n    const rail = categoryRailRef.current;\n    if (!rail) return;\n\n    const maxScrollLeft = rail.scrollWidth - rail.clientWidth;\n    setCategoryScrollState({\n      canScrollLeft: rail.scrollLeft > 2,\n      canScrollRight: rail.scrollLeft < maxScrollLeft - 2,\n    });\n  }, []);\n\n  useEffect(() => {\n    const animationFrame = window.requestAnimationFrame(updateCategoryScrollState);\n    window.addEventListener('resize', updateCategoryScrollState);\n\n    return () => {\n      window.cancelAnimationFrame(animationFrame);\n      window.removeEventListener('resize', updateCategoryScrollState);\n    };\n  }, [categories, isLoadingCategories, updateCategoryScrollState]);\n\n  const scrollCategories = useCallback((direction: -1 | 1) => {\n    const rail = categoryRailRef.current;\n    if (!rail) return;\n\n    rail.scrollBy({\n      left: direction * Math.max(rail.clientWidth * 0.72, 280),\n      behavior: 'smooth',\n    });\n  }, []);\n\n\n  const filteredProducts = useMemo(() => {\n    if (isLoading) return products;\n    let items = [...products];\n\n    // Client-side inStock filter - ensures products with zero inventory are filtered out\n    if (filters.inStock) {\n      items = items.filter((p) => {\n        const hasStockViaVariants = p.variants?.some((v: any) => (v.inventoryCount ?? 0) > 0);\n        const hasStockViaSummary = (p.summary?.totalInventory ?? 0) > 0;\n        return hasStockViaVariants || hasStockViaSummary;\n      });\n    }\n\n    // Search filter\n    if (filters.search) {\n      const query = filters.search.toLowerCase().trim();\n      items = items.filter((p) =>\n        p.name?.toLowerCase().includes(query) ||\n        p.brand?.toLowerCase().includes(query) ||\n        p.sku?.toLowerCase().includes(query) ||\n        (Array.isArray(p.tags) && p.tags.some((t: string) => t.toLowerCase().includes(query))) ||\n        (Array.isArray(p.variants) && p.variants.some((v: any) =>\n          v.name?.toLowerCase().includes(query) ||\n          v.sku?.toLowerCase().includes(query) ||\n          v.description?.toLowerCase().includes(query) ||\n          (v.attributes && typeof v.attributes === 'object' && Object.values(v.attributes).some(val =>\n            typeof val === 'string' && val.toLowerCase().includes(query)\n          ))\n        ))\n      );\n    }\n\n    if (filters.tags?.length) {\n      items = items.filter((p) => Array.isArray(p.tags) && p.tags.some((t: string) => filters.tags!.includes(t)));\n    }\n    if (filters.newArrivals) {\n      const thirtyDaysAgo = Date.now() - 30 * 24 * 60 * 60 * 1000;\n      items = items.filter((p) => new Date(p.createdAt).getTime() >= thirtyDaysAgo);\n    }\n    const selectedBrands = normalizeMultiSelect(filters.brands, filters.brand);\n    if (selectedBrands.length) {\n      const normalizedBrands = new Set(selectedBrands.map((brand) => brand.trim().toLowerCase()));\n      items = items.filter((p) => p.brand && normalizedBrands.has(p.brand.trim().toLowerCase()));\n    }\n\n    const min = filters.minPrice ?? 0;\n    const max = filters.maxPrice ?? Infinity;\n    const hasPriceFilter = filters.minPrice !== undefined || filters.maxPrice !== undefined;\n    items.forEach((p) => {\n      if (!p.variants || p.variants.length === 0) {\n        const price = (p as any).finalPrice ?? (p as any).price ?? 0;\n      } else {\n        (p.variants as any[]).forEach((v: any) => {\n          const price = v.finalPrice ?? v.price ?? 0;\n          const inRange = hasPriceFilter && price >= min && price <= max;\n        });\n      }\n    });\n\n    // Client-side price filter — include product if ANY variant falls within [minPrice, maxPrice].\n    if (hasPriceFilter) {\n      items = filterProductsByPriceRange(items, filters.minPrice, filters.maxPrice);\n    }\n\n    return items;\n  }, [isLoading, products, filters.search, filters.inStock, filters.tags, filters.newArrivals, filters.brand, filters.brands, filters.minPrice, filters.maxPrice]);\n\n  const displayedProducts = filteredProducts;\n\n  // Keep discovered brands available while filters change. The API supplies the\n  // complete list; accumulating product brands also preserves compatibility with\n  // older API deployments during rollout.\n  useEffect(() => {\n    const brandSet = new Set<string>(knownBrands);\n    catalogBrands.forEach((brand) => brandSet.add(brand));\n    products.forEach((product) => {\n      if (product.brand && product.brand.trim()) {\n        brandSet.add(product.brand.trim());\n      }\n    });\n    normalizeMultiSelect(filters.brands, filters.brand).forEach((brand) => brandSet.add(brand));\n    const nextBrands = Array.from(brandSet).sort();\n    if (nextBrands.length !== knownBrands.length || nextBrands.some((brand, index) => brand !== knownBrands[index])) {\n      setKnownBrands(nextBrands);\n    }\n  }, [catalogBrands, filters.brand, filters.brands, knownBrands, products]);\n\n  const availableBrands = knownBrands;\n\n  const handleCategoryChange = useCallback(\n    (categoryId: string) => {\n      setFilters((current) => {\n        const selected = normalizeMultiSelect(current.categories, current.category);\n        const isSelected = selected.includes(categoryId);\n        const nextSelected = isSelected\n          ? selected.filter((id) => id !== categoryId)\n          : [...selected, categoryId];\n        const next = { ...current } as ProductFilters;\n\n        delete next.category;\n        if (nextSelected.length) next.categories = nextSelected;\n        else delete next.categories;\n\n        if (isSelected && next.subCategory) {\n          const removedCategory = categories.find((category) => (category._id ?? category.id) === categoryId);\n          const ownsActiveSubcategory = removedCategory?.categorySubCategories?.some(\n            (subCategory) => (subCategory._id ?? subCategory.id) === next.subCategory\n          );\n          if (ownsActiveSubcategory) delete next.subCategory;\n        }\n\n        return next;\n      });\n      setPage(1);\n    },\n    [categories]\n  );\n\n  const handleSubCategoryChange = useCallback((parentCategoryId: string, subCategoryId: string) => {\n    setFilters((current) => {\n      if (current.subCategory === subCategoryId) {\n        const { subCategory, ...rest } = current as any;\n        return rest as ProductFilters;\n      }\n      const selected = normalizeMultiSelect(current.categories, current.category);\n      const next = { ...current, subCategory: subCategoryId } as ProductFilters;\n      delete next.category;\n      next.categories = selected.includes(parentCategoryId) ? selected : [...selected, parentCategoryId];\n      return next;\n    });\n    setPage(1);\n  }, []);\n\n  const handleToggleStock = useCallback(() => {\n    setFilters((current) => {\n      if (current.inStock) {\n        const { inStock, ...rest } = current;\n        return rest;\n      }\n      return { ...current, inStock: true };\n    });\n    setPage(1);\n  }, []);\n\n  const handleToggleSale = useCallback(() => {\n    setFilters((current) => {\n      if (current.onSale) {\n        const { onSale, ...rest } = current;\n        return rest;\n      }\n      return { ...current, onSale: true };\n    });\n    setPage(1);\n  }, []);\n\n  const handleToggleNewArrivals = useCallback(() => {\n    setFilters((current) => {\n      if (current.newArrivals) {\n        const { newArrivals, ...rest } = current;\n        return rest as typeof current;\n      }\n      return { ...current, newArrivals: true };\n    });\n    setPage(1);\n  }, []);\n\n  const handleClearCategory = useCallback(() => {\n    setFilters((current) => {\n      const { category, categories, subCategory, ...rest } = current as any;\n      return rest;\n    });\n    setPage(1);\n  }, []);\n\n  const handleClearFilters = useCallback(() => {\n    setFilters({});\n    setSearchQuery('');\n    setPriceSliderValues({ min: 0, max: PRICE_SLIDER_MAX });\n    setPage(1);\n  }, []);\n\n  const handleRemoveCategory = useCallback((categoryId: string) => {\n    setFilters((current) => {\n      const selected = normalizeMultiSelect(current.categories, current.category);\n      const nextSelected = selected.filter((id) => id !== categoryId);\n      const next = { ...current } as ProductFilters;\n      delete next.category;\n      if (nextSelected.length) next.categories = nextSelected;\n      else delete next.categories;\n\n      if (next.subCategory) {\n        const removedCategory = categories.find((category) => (category._id ?? category.id) === categoryId);\n        if (removedCategory?.categorySubCategories?.some((sub) => (sub._id ?? sub.id) === next.subCategory)) {\n          delete next.subCategory;\n        }\n      }\n\n      return next;\n    });\n    setPage(1);\n  }, [categories]);\n\n  const handleRemoveSubCategory = useCallback(() => {\n    setFilters((current) => {\n      const next = { ...current } as any;\n      delete next.subCategory;\n      return next as ProductFilters;\n    });\n    setPage(1);\n  }, []);\n\n  const handleRemoveSearch = useCallback(() => {\n    setFilters((current) => {\n      const { search, ...rest } = current;\n      return rest;\n    });\n    setSearchQuery('');\n    setPage(1);\n  }, []);\n\n  const handleRemoveInStock = useCallback(() => {\n    setFilters((current) => {\n      const { inStock, ...rest } = current;\n      return rest;\n    });\n    setPage(1);\n  }, []);\n\n  const handleRemoveSale = useCallback(() => {\n    setFilters((current) => {\n      const { onSale, ...rest } = current;\n      return rest;\n    });\n    setPage(1);\n  }, []);\n\n  const handleRemovePrice = useCallback(() => {\n    setFilters((current) => {\n      const next = { ...current };\n      delete next.minPrice;\n      delete next.maxPrice;\n      return next;\n    });\n    setPriceSliderValues({ min: 0, max: PRICE_SLIDER_MAX });\n    setPage(1);\n  }, []);\n\n  const handleRemoveTag = useCallback((tag: string) => {\n    setFilters((current) => {\n      if (!current.tags) return current;\n      const updated = current.tags.filter((item) => item !== tag);\n      const next = { ...current };\n      if (updated.length) {\n        next.tags = updated;\n      } else {\n        delete next.tags;\n      }\n      return next;\n    });\n    setPage(1);\n  }, []);\n\n  const handleBrandChange = useCallback((brand: string) => {\n    setFilters((current) => {\n      const selected = normalizeMultiSelect(current.brands, current.brand);\n      const nextSelected = selected.includes(brand)\n        ? selected.filter((item) => item !== brand)\n        : [...selected, brand];\n      const next = { ...current } as ProductFilters;\n      delete next.brand;\n      if (nextSelected.length) next.brands = nextSelected;\n      else delete next.brands;\n      return next;\n    });\n    setPage(1);\n  }, []);\n\n  const handleRemoveBrand = useCallback((brand: string) => {\n    setFilters((current) => {\n      const selected = normalizeMultiSelect(current.brands, current.brand);\n      const nextSelected = selected.filter((item) => item !== brand);\n      const next = { ...current } as ProductFilters;\n      delete next.brand;\n      if (nextSelected.length) next.brands = nextSelected;\n      else delete next.brands;\n      return next;\n    });\n    setPage(1);\n  }, []);\n\n  const handlePriceSliderChange = useCallback((handle: 'min' | 'max', rawValue: number) => {\n    setPriceSliderValues((current) => {\n      const next = handle === 'min'\n        ? { ...current, min: Math.min(rawValue, current.max - 1) }\n        : { ...current, max: Math.max(rawValue, current.min + 1) };\n\n      setFilters((currentFilters) => {\n        const nextFilters = { ...currentFilters };\n\n        if (next.min > 0) nextFilters.minPrice = next.min;\n        else delete nextFilters.minPrice;\n\n        if (next.max < PRICE_SLIDER_MAX) nextFilters.maxPrice = next.max;\n        else delete nextFilters.maxPrice;\n\n        return nextFilters;\n      });\n\n      return next;\n    });\n    setPage(1);\n  }, []);\n\n  const {\n    search: searchFilter,\n    category: categoryFilter,\n    categories: categoryFilters,\n    subCategory: subCategoryFilter,\n    inStock: inStockOnly,\n    onSale: onSaleOnly,\n    minPrice,\n    maxPrice,\n    tags,\n    newArrivals,\n    brand: brandFilter,\n    brands: brandFilters,\n  } = filters;\n\n  const selectedCategoryIds = useMemo(\n    () => normalizeMultiSelect(categoryFilters, categoryFilter),\n    [categoryFilter, categoryFilters]\n  );\n  const selectedBrands = useMemo(\n    () => normalizeMultiSelect(brandFilters, brandFilter),\n    [brandFilter, brandFilters]\n  );\n\n  const activeFilterChips = useMemo(() => {\n    const chips: { key: string; label: string; onRemove: () => void }[] = [];\n\n    if (searchFilter) {\n      chips.push({\n        key: 'search',\n        label: `Search: \"${searchFilter}\"`,\n        onRemove: handleRemoveSearch,\n      });\n    }\n\n    if (subCategoryFilter) {\n      let subName: string | undefined;\n      categories.forEach((cat) => {\n        const found = cat.categorySubCategories?.find((sc) => (sc._id ?? sc.id) === subCategoryFilter);\n        if (found) {\n          subName = found.name;\n        }\n      });\n      chips.push({\n        key: 'subcategory',\n        label: `Subcategory: ${subName ?? subCategoryFilter}`,\n        onRemove: handleRemoveSubCategory,\n      });\n    }\n\n    selectedCategoryIds.forEach((categoryId) => {\n      const category = categories.find((cat) => (cat._id ?? cat.id) === categoryId);\n      chips.push({\n        key: `category-${categoryId}`,\n        label: `Category: ${category?.name ?? categoryId}`,\n        onRemove: () => handleRemoveCategory(categoryId),\n      });\n    });\n\n    if (inStockOnly) {\n      chips.push({\n        key: 'stock',\n        label: 'In stock',\n        onRemove: handleRemoveInStock,\n      });\n    }\n\n    if (onSaleOnly) {\n      chips.push({\n        key: 'sale',\n        label: 'On sale',\n        onRemove: handleRemoveSale,\n      });\n    }\n\n    if (minPrice !== undefined || maxPrice !== undefined) {\n      const minLabel = minPrice !== undefined ? formatPrice(minPrice) : 'Any';\n      const maxLabel = maxPrice !== undefined ? formatPrice(maxPrice) : 'Any';\n      chips.push({\n        key: 'price',\n        label: `Price: ${minLabel} - ${maxLabel}`,\n        onRemove: handleRemovePrice,\n      });\n    }\n\n    if (tags?.length) {\n      tags.forEach((tag) => {\n        chips.push({\n          key: `tag-${tag}`,\n          label: `Tag: ${tag}`,\n          onRemove: () => handleRemoveTag(tag),\n        });\n      });\n    }\n\n    if (newArrivals) {\n      chips.push({\n        key: 'new-arrivals',\n        label: 'New arrivals',\n        onRemove: handleToggleNewArrivals,\n      });\n    }\n\n    selectedBrands.forEach((brand) => {\n      chips.push({\n        key: `brand-${brand}`,\n        label: `Brand: ${brand}`,\n        onRemove: () => handleRemoveBrand(brand),\n      });\n    });\n\n    return chips;\n  }, [\n    categories,\n    selectedCategoryIds,\n    subCategoryFilter,\n    handleRemoveCategory,\n    handleRemoveSubCategory,\n    handleRemoveInStock,\n    handleRemoveSale,\n    handleRemovePrice,\n    handleRemoveSearch,\n    handleRemoveTag,\n    handleRemoveBrand,\n    inStockOnly,\n    onSaleOnly,\n    maxPrice,\n    minPrice,\n    searchFilter,\n    tags,\n    newArrivals,\n    selectedBrands,\n  ]);\n\n  const hasActiveFilters = activeFilterChips.length > 0;\n\n  const toggleFilterSection = useCallback((section: string) => {\n    setExpandedFilterSections((prev) => ({\n      ...prev,\n      [section]: !prev[section],\n    }));\n  }, []);\n\n  const toggleMobileFilterSection = useCallback((section: string) => {\n    setMobileExpandedFilterSections((previous) => ({\n      ...previous,\n      [section]: !previous[section],\n    }));\n  }, []);\n\n  const renderFiltersPanel = (mobile = false) => {\n    const expandedSections = mobile ? mobileExpandedFilterSections : expandedFilterSections;\n    const toggleSection = mobile ? toggleMobileFilterSection : toggleFilterSection;\n\n    return (\n    <div className={mobile ? 'w-full' : 'lg:w-72'}>\n      <div className={mobile ? 'overflow-hidden bg-white' : 'overflow-hidden rounded-3xl border border-slate-100 bg-white'}>\n        <section className=\"border-b border-slate-100 px-6 pb-6 pt-7\">\n          <h3 className=\"font-serif text-[22px] italic text-hsecondary\">Filters</h3>\n          {mobile && (\n            <p className=\"mt-1 text-[15px] font-medium text-[#9AA9A1]\">Adjust the settings, then apply</p>\n          )}\n          <label\n            htmlFor=\"sidebar-product-search\"\n            className=\"mt-4 block text-[13px] font-medium text-[#9AA9A1]\"\n          >\n            Search Products\n          </label>\n          <form onSubmit={handleSearch} className=\"relative mt-3\">\n            <Search\n              className=\"pointer-events-none absolute left-3.5 top-1/2 size-4 -translate-y-1/2 text-[#9AA9A1]\"\n              strokeWidth={1.8}\n            />\n            <input\n              id=\"sidebar-product-search\"\n              type=\"search\"\n              value={searchQuery}\n              onChange={handleInputChange}\n              placeholder=\"Search...\"\n              disabled={isSearching}\n              className=\"h-11 w-full rounded-[14px] border border-slate-200 bg-white pl-10 pr-4 text-[14px] text-hsecondary outline-none transition placeholder:text-slate-300 focus:border-hsecondary/40 focus:ring-2 focus:ring-hsecondary/10 disabled:cursor-wait disabled:opacity-60\"\n            />\n          </form>\n        </section>\n\n        <section className=\"border-b border-slate-100 px-6 py-5\">\n          <button\n            type=\"button\"\n            onClick={() => toggleSection('category')}\n            className=\"flex w-full items-center justify-between text-left\"\n            aria-expanded={expandedSections.category}\n          >\n            <span className=\"flex items-center gap-2 font-serif text-[19px] italic text-hsecondary\">\n              Category\n              {selectedCategoryIds.length > 0 && (\n                <span className=\"flex min-w-5 items-center justify-center rounded-full bg-hsecondary px-1.5 py-0.5 font-sans text-[10px] font-semibold not-italic text-white\">\n                  {selectedCategoryIds.length}\n                </span>\n              )}\n            </span>\n            <ChevronDown className={`size-4 text-slate-500 transition-transform ${expandedSections.category ? 'rotate-180' : ''}`} />\n          </button>\n\n          {expandedSections.category && (\n            <div className=\"mt-4 space-y-3\">\n              {sortedCategories.map((category) => {\n                const categoryId = category._id ?? category.id ?? '';\n                const isCategoryActive = selectedCategoryIds.includes(categoryId);\n                const isExpanded = !!expandedCategories[categoryId];\n                const hasSubCategories = !!category.categorySubCategories?.length;\n\n                return (\n                  <div key={categoryId}>\n                    <button\n                      type=\"button\"\n                      onClick={() => {\n                        if (hasSubCategories) toggleCategoryExpand(categoryId);\n                        handleCategoryChange(categoryId);\n                      }}\n                      className=\"group flex w-full items-center gap-3 text-left\"\n                      aria-pressed={isCategoryActive}\n                    >\n                      <span className={`flex size-4 shrink-0 items-center justify-center rounded-[4px] border transition-colors ${isCategoryActive ? 'border-hsecondary bg-hsecondary text-white' : 'border-slate-300 bg-slate-50 group-hover:border-hsecondary/50'}`}>\n                        {isCategoryActive && <Check className=\"size-3\" strokeWidth={2.5} />}\n                      </span>\n                      <span className={`min-w-0 flex-1 text-[15px] leading-5 ${isCategoryActive ? 'font-semibold text-hsecondary' : 'font-medium text-[#7C9085]'}`}>\n                        {category.name}\n                      </span>\n                      {hasSubCategories && (\n                        <ChevronDown className={`size-3.5 shrink-0 text-slate-400 transition-transform ${isExpanded ? 'rotate-180' : ''}`} />\n                      )}\n                    </button>\n\n                    {hasSubCategories && isExpanded && (\n                      <div className=\"ml-7 mt-3 space-y-2 border-l border-slate-100 pl-3\">\n                        {category.categorySubCategories?.map((sub) => {\n                          const subId = sub._id ?? sub.id ?? '';\n                          const isSubActive = subCategoryFilter === subId;\n                          return (\n                            <button\n                              type=\"button\"\n                              key={subId}\n                              onClick={() => handleSubCategoryChange(categoryId, subId)}\n                              className={`block w-full text-left text-[13px] leading-5 transition-colors ${isSubActive ? 'font-semibold text-hsecondary' : 'text-[#7C9085] hover:text-hsecondary'}`}\n                            >\n                              {sub.name}\n                            </button>\n                          );\n                        })}\n                      </div>\n                    )}\n                  </div>\n                );\n              })}\n            </div>\n          )}\n        </section>\n\n        <section className=\"border-b border-slate-100 px-6 py-5\">\n          <button\n            type=\"button\"\n            onClick={() => toggleSection('brand')}\n            className=\"flex w-full items-center justify-between text-left\"\n            aria-expanded={expandedSections.brand}\n          >\n            <span className=\"flex items-center gap-2 font-serif text-[19px] italic text-hsecondary\">\n              Brand\n              {selectedBrands.length > 0 && (\n                <span className=\"flex min-w-5 items-center justify-center rounded-full bg-hsecondary px-1.5 py-0.5 font-sans text-[10px] font-semibold not-italic text-white\">\n                  {selectedBrands.length}\n                </span>\n              )}\n            </span>\n            <ChevronDown className={`size-4 text-slate-500 transition-transform ${expandedSections.brand ? 'rotate-180' : ''}`} />\n          </button>\n\n          {expandedSections.brand && (\n            <div className=\"mt-4 space-y-3\">\n              {availableBrands.length === 0 ? (\n                <p className=\"text-sm text-[#7C9085]\">No brands available</p>\n              ) : availableBrands.map((brand) => {\n                const isSelected = selectedBrands.includes(brand);\n                return (\n                  <button\n                    type=\"button\"\n                    key={brand}\n                    onClick={() => handleBrandChange(brand)}\n                    className=\"group flex w-full items-center gap-3 text-left\"\n                    aria-pressed={isSelected}\n                  >\n                    <span className={`flex size-4 shrink-0 items-center justify-center rounded-[4px] border transition-colors ${isSelected ? 'border-hsecondary bg-hsecondary text-white' : 'border-slate-300 bg-slate-50 group-hover:border-hsecondary/50'}`}>\n                      {isSelected && <Check className=\"size-3\" strokeWidth={2.5} />}\n                    </span>\n                    <span className={`text-[15px] leading-5 ${isSelected ? 'font-semibold text-hsecondary' : 'font-medium text-[#7C9085]'}`}>\n                      {brand}\n                    </span>\n                  </button>\n                );\n              })}\n            </div>\n          )}\n        </section>\n\n        {/* Availability filter is temporarily hidden. Keep the implementation here\n            so it can be restored without rebuilding its stock/sale behavior.\n        <section className=\"border-b border-slate-100 px-6 py-5\">\n          <button\n            type=\"button\"\n            onClick={() => toggleFilterSection('availability')}\n            className=\"flex w-full items-center justify-between text-left\"\n            aria-expanded={expandedFilterSections.availability}\n          >\n            <span className=\"font-serif text-[19px] italic text-hsecondary\">Availability</span>\n            <ChevronDown className={`size-4 text-slate-500 transition-transform ${expandedFilterSections.availability ? 'rotate-180' : ''}`} />\n          </button>\n\n          {expandedFilterSections.availability && (\n            <div className=\"mt-4 space-y-3\">\n              {[\n                { label: 'In Stock', selected: !!inStockOnly, onClick: handleToggleStock },\n                { label: 'On Sale', selected: !!onSaleOnly, onClick: handleToggleSale },\n              ].map((option) => (\n                <button\n                  type=\"button\"\n                  key={option.label}\n                  onClick={option.onClick}\n                  className=\"group flex w-full items-center gap-3 text-left\"\n                  aria-pressed={option.selected}\n                >\n                  <span className={`flex size-4 shrink-0 items-center justify-center rounded-[4px] border transition-colors ${option.selected ? 'border-hsecondary bg-hsecondary text-white' : 'border-slate-300 bg-slate-50 group-hover:border-hsecondary/50'}`}>\n                    {option.selected && <Check className=\"size-3\" strokeWidth={2.5} />}\n                  </span>\n                  <span className={`text-[15px] leading-5 ${option.selected ? 'font-semibold text-hsecondary' : 'font-medium text-[#7C9085]'}`}>\n                    {option.label}\n                  </span>\n                </button>\n              ))}\n            </div>\n          )}\n        </section>\n        */}\n\n        <section className=\"px-6 py-5\">\n          <button\n            type=\"button\"\n            onClick={() => toggleSection('price')}\n            className=\"flex w-full items-center justify-between text-left\"\n            aria-expanded={expandedSections.price}\n          >\n            <span className=\"font-serif text-[19px] italic text-hsecondary\">Price Range</span>\n            <ChevronDown className={`size-4 text-slate-500 transition-transform ${expandedSections.price ? 'rotate-180' : ''}`} />\n          </button>\n\n          {expandedSections.price && (\n            <div className=\"mt-5\">\n              <div className=\"relative h-4\">\n                <div className=\"absolute inset-x-0 top-1/2 h-2 -translate-y-1/2 rounded-full bg-slate-200\" />\n                <div\n                  className=\"absolute top-1/2 h-2 -translate-y-1/2 rounded-full bg-slate-950\"\n                  style={{\n                    left: `${(priceSliderValues.min / PRICE_SLIDER_MAX) * 100}%`,\n                    right: `${100 - (priceSliderValues.max / PRICE_SLIDER_MAX) * 100}%`,\n                  }}\n                />\n                <input\n                  type=\"range\"\n                  min={0}\n                  max={PRICE_SLIDER_MAX}\n                  step={5}\n                  value={priceSliderValues.min}\n                  onChange={(event) => handlePriceSliderChange('min', Number(event.target.value))}\n                  aria-label=\"Minimum price\"\n                  className=\"hp-price-range absolute inset-0 w-full\"\n                />\n                <input\n                  type=\"range\"\n                  min={0}\n                  max={PRICE_SLIDER_MAX}\n                  step={5}\n                  value={priceSliderValues.max}\n                  onChange={(event) => handlePriceSliderChange('max', Number(event.target.value))}\n                  aria-label=\"Maximum price\"\n                  className=\"hp-price-range absolute inset-0 w-full\"\n                />\n              </div>\n              <div className=\"mt-4 flex items-center justify-between text-[13px] font-medium text-[#9AA9A1]\">\n                <span>${priceSliderValues.min}</span>\n                <span>${priceSliderValues.max}{priceSliderValues.max === PRICE_SLIDER_MAX ? '+' : ''}</span>\n              </div>\n            </div>\n          )}\n        </section>\n      </div>\n    </div>\n    );\n  };\n\n  const allProductsCount = useMemo(\n    () => categories.reduce((sum, category) => sum + (category.productCount ?? 0), 0),\n    [categories]\n  );\n\n  const formatItemCount = (count: number) => `${count} ${count === 1 ? 'Item' : 'Items'}`;\n\n  return (\n    <div className=\"min-h-screen \">\n      {/* Header Section */}\n      <section className=\"relative overflow-hidden bg-white pb-12 pt-8 md:pt-16\">\n        {/* Decorative Background Elements */}\n        <div className=\"absolute inset-0 pointer-events-none overflow-hidden\">\n          <div className=\"absolute top-0 left-1/2 -translate-x-1/2 w-[1200px] h-[600px] bg-hprimary/5 rounded-[50%] blur-3xl -translate-y-1/2\" />\n          <div className=\"absolute top-0 right-0 w-[600px] h-[600px] bg-hsecondary/5 rounded-full blur-3xl -translate-y-1/3 translate-x-1/3\" />\n        </div>\n\n        <div className=\"container mx-auto px-4 relative z-1\">\n          <motion.div\n            initial={{ opacity: 0, y: 24 }}\n            animate={{ opacity: 1, y: 0 }}\n            className=\"max-w-4xl mx-auto space-y-8 text-center\"\n          >\n            {/* Badge */}\n            <div className=\"flex justify-center\">\n              <span className=\"inline-flex items-center gap-2 rounded-full border border-hprimary/20 bg-hprimary/5 px-4 py-1.5 text-xs font-bold uppercase tracking-widest text-hprimary shadow-xs\">\n                <Sparkles className=\"h-3.5 w-3.5\" />\n                Complete Pharmacy Shop\n              </span>\n            </div>\n\n            {/* Main Title */}\n            <div className=\"space-y-4\">\n              <h1 className=\"text-4xl md:text-6xl font-semibold text-slate-900 tracking-tight leading-[1.1]\">\n                Medical Supplies & <br className=\"hidden md:block\" />\n                <span className=\"text-hsecondary/80 italic\">\n                  Wellness Products\n                </span>\n              </h1>\n              <p className=\"text-lg md:text-xl text-slate-600 max-w-2xl mx-auto leading-relaxed\">\n                Expertly curated healthcare essentials. From professional medical supplies to daily vitamins, we have everything you need to stay healthy.\n              </p>\n            </div>\n\n            {/* Search Bar */}\n            <form\n              onSubmit={handleSearch}\n              className=\"relative mx-auto max-w-[672px]\"\n            >\n              <div className=\"relative w-full\">\n                <div className=\"absolute left-6 top-1/2 flex -translate-y-1/2 items-center justify-center\">\n                  <Search className=\"size-5 text-[#9AA9A1]\" strokeWidth={1.8} />\n                </div>\n                <input\n                  type=\"search\"\n                  placeholder={isMobile ? \"Search...\" : \"Search products or brands...\"}\n                  value={searchQuery}\n                  onChange={handleInputChange}\n                  onKeyDown={handleKeyDown}\n                  className=\"h-16 w-full rounded-full border border-slate-200 bg-white pl-14 pr-16 text-[17px] font-medium text-hsecondary shadow-[0_12px_28px_rgba(31,41,55,0.06)] outline-none transition placeholder:font-medium placeholder:text-[#ADB8B2] focus:border-hsecondary/40 focus:ring-2 focus:ring-hsecondary/10\"\n                  disabled={isSearching}\n                />\n                <AnimatePresence>\n                  {searchQuery && (\n                    <motion.button\n                      initial={{ opacity: 0, scale: 0.8, x: -10 }}\n                      animate={{ opacity: 1, scale: 1, x: 0 }}\n                      exit={{ opacity: 0, scale: 0.8, x: -10 }}\n                      type=\"submit\"\n                      className=\"absolute right-3 top-1/2 -translate-y-1/2 rounded-full bg-hprimary p-2.5 text-white shadow-sm transition-colors hover:bg-hprimary/90\"\n                      title=\"Search\"\n                    >\n                      <ArrowRight className=\"size-5\" />\n                    </motion.button>\n                  )}\n                </AnimatePresence>\n              </div>\n            </form>\n          </motion.div>\n        </div>\n      </section>\n\n      {/* Shop by Category Section */}\n      <section className=\"bg-white pb-7 pt-11 md:pt-12\">\n        <div className=\"container mx-auto max-w-[1600px] px-4\">\n          <div className=\"mb-6 flex items-center justify-between md:mb-7\">\n            <h2 className=\"font-serif text-[26px] font-normal italic leading-tight text-hsecondary md:text-[29px]\">\n              Shop by Category\n            </h2>\n            <div className=\"hidden items-center gap-2 lg:flex\" aria-label=\"Category carousel controls\">\n              <button\n                type=\"button\"\n                onClick={() => scrollCategories(-1)}\n                disabled={!categoryScrollState.canScrollLeft}\n                aria-label=\"Scroll categories left\"\n                className=\"flex size-10 items-center justify-center rounded-full border border-slate-200 bg-white text-hsecondary transition-colors hover:border-hsecondary/30 hover:bg-slate-50 disabled:cursor-default disabled:opacity-40\"\n              >\n                <ChevronLeft className=\"size-5\" strokeWidth={1.8} />\n              </button>\n              <button\n                type=\"button\"\n                onClick={() => scrollCategories(1)}\n                disabled={!categoryScrollState.canScrollRight}\n                aria-label=\"Scroll categories right\"\n                className=\"flex size-10 items-center justify-center rounded-full border border-slate-200 bg-white text-hsecondary transition-colors hover:border-hsecondary/30 hover:bg-slate-50 disabled:cursor-default disabled:opacity-40\"\n              >\n                <ChevronRight className=\"size-5\" strokeWidth={1.8} />\n              </button>\n            </div>\n          </div>\n\n          <div\n            ref={categoryRailRef}\n            onScroll={updateCategoryScrollState}\n            className=\"flex snap-x snap-mandatory gap-3 overflow-x-auto pb-1 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\"\n          >\n            {/* All Products */}\n            <motion.button\n              type=\"button\"\n              onClick={handleClearCategory}\n              initial={{ opacity: 0, y: 20 }}\n              whileInView={{ opacity: 1, y: 0 }}\n              viewport={{ once: true }}\n              transition={{ duration: 0.35 }}\n              aria-pressed={selectedCategoryIds.length === 0}\n              className={`flex h-[104px] min-w-[104px] snap-start items-center justify-center rounded-[17px] border px-3 text-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-hsecondary/30 lg:h-[70px] lg:min-w-[173px] lg:justify-start lg:gap-3 lg:text-left ${selectedCategoryIds.length === 0\n                ? 'border-hsecondary bg-hsecondary text-white shadow-sm'\n                : 'border-slate-200 bg-white text-hsecondary hover:border-hsecondary/25 hover:bg-slate-50'\n                }`}\n            >\n              <span className={`hidden size-11 shrink-0 items-center justify-center rounded-[14px] lg:flex ${selectedCategoryIds.length === 0 ? 'bg-white/15' : 'bg-slate-100'}`}>\n                <ShoppingBag className=\"size-5\" strokeWidth={1.7} />\n              </span>\n              <div className=\"flex min-w-0 flex-col items-center lg:items-start\">\n                <span className=\"block text-[14px] font-semibold leading-[18px] lg:whitespace-nowrap lg:text-[15px] lg:leading-5\">All Products</span>\n                <span className={`block whitespace-nowrap text-[12px] leading-4 ${selectedCategoryIds.length === 0 ? 'text-white/65' : 'text-slate-400'}`}>\n                  {formatItemCount(allProductsCount)}\n                </span>\n              </div>\n            </motion.button>\n\n            {isLoadingCategories && categories.length === 0 && Array.from({ length: 7 }).map((_, index) => (\n              <div\n                key={`category-skeleton-${index}`}\n                className=\"h-[104px] w-[104px] shrink-0 animate-pulse rounded-[17px] border border-slate-200 bg-slate-50 lg:h-[70px] lg:w-[168px]\"\n              />\n            ))}\n\n            {categories.map((category, index) => {\n              const Icon = getCategoryIcon(category.name ?? '');\n              const categoryId = category._id ?? category.id ?? '';\n              const isSelected = selectedCategoryIds.includes(categoryId);\n\n              return (\n                <motion.button\n                  type=\"button\"\n                  key={categoryId}\n                  initial={{ opacity: 0, y: 20 }}\n                  whileInView={{ opacity: 1, y: 0 }}\n                  viewport={{ once: true }}\n                  transition={{ delay: Math.min(index * 0.035, 0.25), duration: 0.35 }}\n                  onClick={() => handleCategoryChange(categoryId)}\n                  aria-pressed={isSelected}\n                  className={`flex h-[104px] w-[104px] min-w-[104px] snap-start items-center justify-center rounded-[17px] border px-3 text-center transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-hsecondary/30 lg:h-[70px] lg:w-auto lg:min-w-max lg:justify-start lg:gap-3 lg:pr-5 lg:text-left ${isSelected\n                    ? 'border-hsecondary bg-hsecondary text-white shadow-sm'\n                    : 'border-slate-200 bg-white text-hsecondary hover:border-hsecondary/25 hover:bg-slate-50'\n                    }`}\n                >\n                  <span className={`hidden size-11 shrink-0 items-center justify-center rounded-[14px] lg:flex ${isSelected ? 'bg-white/15' : 'bg-slate-100'}`}>\n                    <Icon className=\"size-5\" strokeWidth={1.7} />\n                  </span>\n                  <div className=\"flex min-w-0 flex-col items-center lg:items-start\">\n                    <span className=\"line-clamp-3 text-[14px] font-semibold leading-[18px] lg:block lg:whitespace-nowrap lg:text-[15px] lg:leading-5\">{category.name}</span>\n                    <span className={`block whitespace-nowrap text-[12px] leading-4 ${isSelected ? 'text-white/65' : 'text-slate-400'}`}>\n                      {formatItemCount(category.productCount ?? 0)}\n                    </span>\n                  </div>\n                </motion.button>\n              );\n            })}\n          </div>\n        </div>\n      </section>\n\n      {/* Featured Product Section */}\n      {/* {featuredProduct && (\n        <section className=\"py-10 bg-white\">\n          <div className=\"container mx-auto px-4\">\n            <div className=\"flex items-center justify-between mb-6\">\n              <div className=\"flex items-center gap-2\">\n                <Sparkles className=\"size-5 text-hprimary\" />\n                <h2 className=\"text-2xl md:text-3xl text-hsecondary\">Featured Product</h2>\n              </div>\n            </div>\n            <motion.div\n              initial={{ opacity: 0, y: 16 }}\n              whileInView={{ opacity: 1, y: 0 }}\n              viewport={{ once: true }}\n              className=\"flex flex-col md:flex-row gap-6 bg-linear-to-br from-hprimary/5 to-hsecondary/5 rounded-3xl p-6 md:p-8 border border-hprimary/10 cursor-pointer hover:shadow-md transition-shadow\"\n              onClick={() => router.push(buildPath(`/products/${featuredProduct._id}`))}\n            >\n              <div className=\"w-full md:w-56 aspect-square shrink-0 rounded-2xl overflow-hidden bg-white\">\n                <Image\n                  src={featuredProduct.media?.[0]?.file || ''}\n                  alt={featuredProduct.name || 'Featured product'}\n                  width={224}\n                  height={224}\n                  className=\"w-full h-full object-cover\"\n                />\n              </div>\n              <div className=\"flex flex-col justify-center gap-3\">\n                <span className=\"inline-flex w-fit items-center gap-1.5 rounded-full bg-hprimary/10 px-3 py-1 text-xs font-semibold text-hprimary uppercase tracking-wide\">\n                  <Sparkles className=\"size-3\" /> Featured\n                </span>\n                <h3 className=\"text-xl md:text-2xl font-semibold text-gray-900\">{featuredProduct.name}</h3>\n                {featuredProduct.brand && (\n                  <p className=\"text-sm text-gray-500\">{featuredProduct.brand}</p>\n                )}\n                {featuredProduct.summary?.minPrice !== undefined && (\n                  <p className=\"text-lg font-bold text-hsecondary\">\n                    {featuredProduct.summary.minPrice === featuredProduct.summary.maxPrice\n                      ? `$${featuredProduct.summary.minPrice.toFixed(2)}`\n                      : `$${featuredProduct.summary.minPrice.toFixed(2)} – $${featuredProduct.summary.maxPrice?.toFixed(2)}`}\n                  </p>\n                )}\n                <button\n                  type=\"button\"\n                  className=\"mt-2 w-fit flex items-center gap-2 rounded-full bg-hprimary px-5 py-2.5 text-sm font-semibold text-white hover:bg-hprimary/90 transition-colors\"\n                  onClick={(e) => {\n                    e.stopPropagation();\n                    router.push(buildPath(`/products/${featuredProduct._id}`));\n                  }}\n                >\n                  Shop Now <ArrowRight className=\"size-4\" />\n                </button>\n              </div>\n            </motion.div>\n          </div>\n        </section>\n      )} */}\n\n      <div className=\"relative pb-16 mt-8\">\n        <div className=\"container mx-auto max-w-[1600px] px-4\">\n          <div className=\"flex flex-col gap-8 lg:flex-row\">\n            <aside className=\"hidden w-72 shrink-0 self-start lg:block\">\n              {renderFiltersPanel()}\n            </aside>\n\n            <main className=\"flex-1 space-y-6\">\n              <div className=\"rounded-[20px] border border-gray-100 bg-white p-3 lg:rounded-3xl lg:p-4\">\n                <div className=\"flex items-center justify-between gap-2 lg:gap-6\">\n                  <div className=\"hidden lg:block\">\n                    <h2 className=\"text-base font-medium text-gray-700\">\n                      {isLoading\n                        ? 'Loading products...'\n                        : `${displayedProducts.length} products found`}\n\n                    </h2>\n                  </div>\n                  <div className=\"flex min-w-0 flex-1 items-center gap-2 lg:flex-none lg:gap-3\">\n                    <button\n                      type=\"button\"\n                      onClick={() => setShowMobileFilters(true)}\n                      className=\"flex h-11 min-w-0 flex-1 items-center justify-center gap-2 rounded-[14px] border border-slate-200 bg-white px-3 text-sm font-medium text-hsecondary transition hover:border-hsecondary/30 hover:bg-slate-50 lg:hidden\"\n                    >\n                      <ListFilter className=\"size-4\" strokeWidth={1.7} />\n                      <span>Filters</span>\n                      {activeFilterChips.length > 0 && (\n                        <span className=\"flex size-5 items-center justify-center rounded-full bg-hsecondary text-[10px] font-semibold text-white\">\n                          {activeFilterChips.length}\n                        </span>\n                      )}\n                    </button>\n\n                    <div className=\"relative min-w-0 flex-1 lg:flex-none\">\n                      <select\n                        value={sortOption}\n                        onChange={(event) => {\n                          setSortOption(event.target.value as SortOption);\n                          setPage(1);\n                        }}\n                        className=\"h-11 w-full appearance-none rounded-[14px] border border-gray-200 bg-white py-2.5 pl-3.5 pr-8 text-sm font-medium text-hsecondary shadow-xs transition focus:border-hsecondary/40 focus:outline-hidden focus:ring-1 focus:ring-hsecondary/20 lg:min-w-36 lg:pr-9\"\n                      >\n                        <option value=\"featured\">Featured</option>\n                        <option value=\"price-low-high\">Price: low to high</option>\n                        <option value=\"price-high-low\">Price: high to low</option>\n                        <option value=\"newest\">Newest arrivals</option>\n                      </select>\n                      <ChevronDown className=\"pointer-events-none absolute right-3 top-1/2 -translate-y-1/2 h-4 w-4 text-gray-400\" />\n                    </div>\n                    <div className=\"flex shrink-0 items-center rounded-[14px] border border-slate-200 bg-white p-1 shadow-xs\" aria-label=\"Product view\">\n                      <button\n                        type=\"button\"\n                        onClick={() => setProductView('grid')}\n                        aria-label=\"Grid view\"\n                        aria-pressed={productView === 'grid'}\n                        className={`flex size-8 items-center justify-center rounded-[10px] transition-colors ${productView === 'grid' ? 'bg-slate-100 text-hsecondary shadow-xs' : 'text-slate-300 hover:text-hsecondary'}`}\n                      >\n                        <Grid className=\"size-4\" strokeWidth={1.8} />\n                      </button>\n                      <button\n                        type=\"button\"\n                        onClick={() => setProductView('list')}\n                        aria-label=\"Horizontal card view\"\n                        aria-pressed={productView === 'list'}\n                        className={`flex size-8 items-center justify-center rounded-[10px] transition-colors ${productView === 'list' ? 'bg-slate-100 text-hsecondary shadow-xs' : 'text-slate-300 hover:text-hsecondary'}`}\n                      >\n                        <List className=\"size-4\" strokeWidth={1.8} />\n                      </button>\n                    </div>\n                  </div>\n                </div>\n\n                {hasActiveFilters && (\n                  <div className=\"mt-6 flex flex-wrap items-center gap-2 border-t border-gray-100 pt-4\">\n                    {activeFilterChips.map((chip) => (\n                      <button\n                        key={chip.key}\n                        type=\"button\"\n                        onClick={chip.onRemove}\n                        className=\"group flex items-center gap-2 rounded-full bg-hprimary-50 px-3 py-1.5 text-sm font-medium text-hprimary-700 transition hover:bg-hprimary-100\"\n                      >\n                        {chip.label}\n                        <X className=\"h-4 w-4 text-hprimary-500 group-hover:text-hprimary-700\" />\n                      </button>\n                    ))}\n                    <motion.button\n                      whileHover={{ scale: 1.05 }}\n                      whileTap={{ scale: 0.95 }}\n                      type=\"button\"\n                      onClick={handleClearFilters}\n                      className=\"text-sm font-semibold text-hprimary hover:text-hprimary-600 transition-colors\"\n                    >\n                      Reset all\n                    </motion.button>\n                  </div>\n                )}\n              </div>\n\n              <div >\n\n                <div ref={productsStartRef} className=\"mt-6 scroll-mt-24\">\n                  {isLoading ? (\n                    <div className={productView === 'grid'\n                      ? 'grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-3 xl:grid-cols-4'\n                      : 'grid grid-cols-1 gap-4 xl:grid-cols-2'}>\n                      {Array.from({ length: 6 }).map((_, index) => (\n                        <ProductCardSkeleton key={index} layout={productView === 'grid' ? 'vertical' : 'horizontal'} />\n                      ))}\n                    </div>\n                  ) : displayedProducts.length > 0 ? (\n                    <div className={productView === 'grid'\n                      ? 'grid min-[300px]:grid-cols-2 gap-4 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-3 xl:grid-cols-4'\n                      : 'grid grid-cols-1 gap-4 xl:grid-cols-2'}>\n                      {displayedProducts.map((product) => {\n                        const defaultVariantId = (() => {\n                          if (sortOption === 'price-high-low') {\n                            const best = product.variants?.reduce((best, v) =>\n                              (v.finalPrice ?? 0) > (best.finalPrice ?? 0) ? v : best,\n                              product.variants[0]\n                            );\n                            return best ? ((best as any)._id || (best as any).id || null) : null;\n                          }\n                          // When a price filter is active, use the utility to find the best default variant\n                          // Priority: single in-range variant > cheapest in-stock in-range > cheapest overall\n                          if (filters.minPrice !== undefined || filters.maxPrice !== undefined) {\n                            const defaultVariant = findDefaultVariantForPriceRange(\n                              product,\n                              filters.minPrice,\n                              filters.maxPrice\n                            );\n                            return defaultVariant\n                              ? ((defaultVariant as any)._id || (defaultVariant as any).id || null)\n                              : null;\n                          }\n                          return undefined;\n                        })();\n\n                        return (\n                          <div key={product._id} className=\"h-full\">\n                            <ProductCard\n                              product={product}\n                              layout={productView === 'grid' ? 'vertical' : 'horizontal'}\n                              defaultVariantId={defaultVariantId}\n                              minPrice={filters.minPrice}\n                              maxPrice={filters.maxPrice}\n                              onClickProduct={(item) => {\n                                router.push(buildPath(`/products/${item._id}`));\n                              }}\n                            />\n                          </div>\n                        );\n                      })}\n                    </div>\n                  ) : (\n                    <EmptyState\n                      icon={Package}\n                      title=\"No products found\"\n                      description=\"Try adjusting your filters or search terms to uncover more results.\"\n                      actionLabel={hasActiveFilters ? 'Clear filters' : undefined}\n                      onAction={hasActiveFilters ? handleClearFilters : undefined}\n                    />\n                  )}\n                </div>\n\n                {pagination.totalPages > 1 && (\n                  <div className=\"mt-12 rounded-3xl border border-slate-100 bg-white px-4 py-4 shadow-[0_8px_30px_rgba(31,41,55,0.04)] sm:px-5\">\n                    <div className=\"flex flex-col items-center justify-between gap-4 md:flex-row\">\n                      <div className=\"text-center md:text-left\">\n                        <p className=\"text-sm font-medium text-[#7C9085]\">\n                          Showing{' '}\n                          <span className=\"font-semibold text-hsecondary\">\n                            {((page - 1) * pagination.limit) + 1}–{Math.min(page * pagination.limit, pagination.total)}\n                          </span>{' '}\n                          of <span className=\"font-semibold text-hsecondary\">{pagination.total}</span> products\n                        </p>\n                        <p className=\"mt-0.5 text-xs text-slate-400\">\n                          Page {page} of {pagination.totalPages}\n                        </p>\n                      </div>\n\n                      <nav className=\"flex max-w-full items-center gap-1.5\" aria-label=\"Product pagination\">\n                        <button\n                          type=\"button\"\n                          onClick={() => setPage(Math.max(1, page - 1))}\n                          disabled={page === 1}\n                          className=\"flex size-10 shrink-0 items-center justify-center rounded-full border border-slate-200 bg-white text-hsecondary transition hover:border-hsecondary/30 hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-30\"\n                          aria-label=\"Previous page\"\n                        >\n                          <ChevronLeft className=\"size-4\" strokeWidth={1.8} />\n                        </button>\n\n                        <div className=\"flex items-center gap-1\">\n                          {(() => {\n                            const pages: (number | 'ellipsis')[] = [];\n                            const totalPages = pagination.totalPages;\n\n                            if (totalPages <= 7) {\n                              for (let index = 1; index <= totalPages; index++) pages.push(index);\n                            } else {\n                              pages.push(1);\n                              if (page > 3) pages.push('ellipsis');\n\n                              const start = Math.max(2, page - 1);\n                              const end = Math.min(totalPages - 1, page + 1);\n                              for (let index = start; index <= end; index++) pages.push(index);\n\n                              if (page < totalPages - 2) pages.push('ellipsis');\n                              pages.push(totalPages);\n                            }\n\n                            return pages.map((pageNumber, index) => {\n                              if (pageNumber === 'ellipsis') {\n                                return (\n                                  <span\n                                    key={`ellipsis-${index}`}\n                                    className=\"hidden size-8 items-center justify-center text-sm tracking-widest text-slate-300 sm:flex\"\n                                    aria-hidden=\"true\"\n                                  >\n                                    ···\n                                  </span>\n                                );\n                              }\n\n                              const isActive = pageNumber === page;\n                              return (\n                                <button\n                                  type=\"button\"\n                                  key={pageNumber}\n                                  onClick={() => setPage(pageNumber)}\n                                  aria-label={`Page ${pageNumber}`}\n                                  aria-current={isActive ? 'page' : undefined}\n                                  className={`${!isActive && pageNumber !== 1 && pageNumber !== totalPages ? 'hidden sm:flex' : 'flex'} size-10 items-center justify-center rounded-full text-sm font-semibold transition ${isActive\n                                    ? 'bg-hsecondary text-white shadow-sm'\n                                    : 'border border-transparent text-[#7C9085] hover:border-slate-200 hover:bg-slate-50 hover:text-hsecondary'\n                                    }`}\n                                >\n                                  {pageNumber}\n                                </button>\n                              );\n                            });\n                          })()}\n                        </div>\n\n                        <button\n                          type=\"button\"\n                          onClick={() => setPage(Math.min(pagination.totalPages, page + 1))}\n                          disabled={page === pagination.totalPages}\n                          className=\"flex size-10 shrink-0 items-center justify-center rounded-full border border-slate-200 bg-white text-hsecondary transition hover:border-hsecondary/30 hover:bg-slate-50 disabled:cursor-not-allowed disabled:opacity-30\"\n                          aria-label=\"Next page\"\n                        >\n                          <ChevronRight className=\"size-4\" strokeWidth={1.8} />\n                        </button>\n                      </nav>\n                    </div>\n                  </div>\n                )}\n              </div>\n            </main>\n          </div>\n        </div>\n      </div>\n\n      <AnimatePresence>\n        {showMobileFilters && (\n          <motion.div\n            className=\"fixed inset-0 z-[100] lg:hidden\"\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n          >\n            <button\n              type=\"button\"\n              className=\"absolute inset-0 cursor-default bg-slate-950/45 backdrop-blur-[1px]\"\n              onClick={() => setShowMobileFilters(false)}\n              aria-label=\"Close filters\"\n            />\n            <motion.section\n              role=\"dialog\"\n              aria-modal=\"true\"\n              aria-label=\"Product filters\"\n              initial={{ y: '100%' }}\n              animate={{ y: 0 }}\n              exit={{ y: '100%' }}\n              transition={{ type: 'spring', damping: 30, stiffness: 320 }}\n              className=\"absolute inset-x-0 bottom-0 mx-auto flex max-h-[90dvh] max-w-xl flex-col overflow-hidden rounded-t-[28px] bg-white shadow-2xl md:bottom-5 md:rounded-[28px]\"\n            >\n              <div className=\"relative flex h-10 shrink-0 items-center justify-center\">\n                <span className=\"h-1.5 w-10 rounded-full bg-slate-200\" aria-hidden=\"true\" />\n                <button\n                  type=\"button\"\n                  onClick={() => setShowMobileFilters(false)}\n                  className=\"absolute right-4 top-3 flex size-8 items-center justify-center rounded-full text-slate-500 transition hover:bg-slate-100 hover:text-hsecondary\"\n                  aria-label=\"Close filters\"\n                >\n                  <X className=\"size-4\" />\n                </button>\n              </div>\n\n              <div className=\"min-h-0 flex-1 overflow-x-hidden overflow-y-auto overscroll-contain [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">\n                {renderFiltersPanel(true)}\n              </div>\n\n              <div className=\"flex shrink-0 items-center gap-3 border-t border-slate-100 bg-white px-5 py-4\">\n                <button\n                  type=\"button\"\n                  onClick={handleClearFilters}\n                  className=\"h-12 rounded-full border border-slate-200 bg-white px-6 text-sm font-medium text-hsecondary transition hover:border-hsecondary/30 hover:bg-slate-50\"\n                >\n                  Reset\n                </button>\n                <button\n                  type=\"button\"\n                  onClick={() => setShowMobileFilters(false)}\n                  className=\"h-12 flex-1 rounded-full bg-hsecondary px-6 font-serif text-[17px] font-medium italic text-white shadow-sm transition hover:bg-hsecondary/90\"\n                >\n                  Apply Filters\n                </button>\n              </div>\n            </motion.section>\n          </motion.div>\n        )}\n      </AnimatePresence>\n    </div>\n  );\n}\n","'use client';\n\nimport React from 'react';\nimport dynamic from 'next/dynamic';\n\nconst MotionDiv = dynamic(() => import('framer-motion').then((mod) => mod.motion.div), {\n  ssr: false,\n});\n\ninterface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n  variant?: 'primary' | 'secondary'| 'ghost' | 'outline-solid';\n  size?: 'sm' | 'md' | 'lg';\n  isLoading?: boolean;\n  children: React.ReactNode;\n}\n\nexport function Button({\n  variant = 'primary',\n  size = 'md',\n  isLoading = false,\n  disabled,\n  className = '',\n  children,\n  ...props\n}: ButtonProps) {\n  const baseStyles = 'font-medium rounded-full transition-all duration-200 inline-flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed focus:outline-hidden focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-hprimary-500 hover:cursor-pointer';\n  \n  const variants = {\n    primary: 'bg-[#0E172B] text-white hover:bg-[#0E172B]/80 shadow-lg shadow-[#0E172B]/30 hover:shadow-xl hover:shadow-[#0E172B]/40',\n    secondary: 'bg-hsecondary-600 text-white hover:bg-hsecondary-700 shadow-lg shadow-secondary-500/30 hover:shadow-xl hover:shadow-secondary-500/40',\n    'outline-solid': 'border-2 border-hprimary-600 text-hprimary-600 hover:bg-hprimary-50',\n    ghost: 'text-gray-700 hover:bg-gray-100',\n  };\n  \n  const sizes = {\n    sm: 'px-4 py-2 text-sm',\n    md: 'px-6 py-3 text-base',\n    lg: 'px-8 py-4 text-lg',\n  };\n\n  return (\n    <MotionDiv\n      whileHover={{ scale: 1.02 }}\n      whileTap={{ scale: 0.98 }}\n      className=\"inline-block\"\n    >\n      <button\n        className={`${baseStyles} ${variants[variant]} ${sizes[size]} ${className}`}\n        disabled={disabled || isLoading}\n        aria-disabled={disabled || isLoading}\n        aria-busy={isLoading}\n        {...props}\n      >\n        {isLoading ? (\n          <>\n            <svg className=\"animate-spin h-5 w-5\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n              <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n              <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n            </svg>\n            Loading...\n          </>\n        ) : (\n          children\n        )}\n      </button>\n    </MotionDiv>\n  );\n}\n\n","'use client';\n\nimport { PLACEHOLDER_IMAGE_SRC } from '@/lib/constants/assets';\n\nimport React, { useEffect, useState, useMemo } from 'react';\nimport { motion } from 'framer-motion';\nimport {\n  Check,\n  Heart,\n  Package,\n  Shield,\n  Sparkles,\n  Truck,\n  ChevronLeft,\n  RotateCcw\n} from 'lucide-react';\nimport Link from 'next/link';\nimport Image from 'next/image';\nimport { Button } from '@/components/ui/Button';\nimport { Badge } from '@/components/ui/Badge';\nimport { ProductCard } from '@/components/ProductCard';\nimport { useProduct } from '@/hooks/useProducts';\nimport { useCart } from '@/providers/CartProvider';\nimport { useAuth } from '@/providers/AuthProvider';\nimport { formatDate } from '@/lib/utils/format';\nimport { useNotification } from '@/providers/NotificationProvider';\nimport { useRouter } from 'next/navigation';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { useWishlist } from '@/providers/WishlistProvider';\nimport { ProductsApi, ProductVariant, ProductVariantInventoryStatusEnum } from '@/lib/Apis';\nimport { getDeviceId } from '@/lib/utils/deviceId';\nimport { getPersonalizationSessionStartedAt } from '@/lib/utils/personalizationSession';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { Category } from '@/lib/types';\n// import { useProductReviews } from '@/hooks/useReviews';\n// import { ProductReviewsSection } from '@/components/ProductReviewsSection';\nimport { NotifyWhenInStockButton } from '@/components/NotifyWhenInStockButton';\nimport { ProductCardSkeleton } from '@/components/ui/Skeleton';\n\nconst safeFormatDate = (date?: Date | string, format: 'long' | 'short' = 'long'): string => {\n  if (!date) return 'N/A';\n  try {\n    const dateObj = typeof date === 'string' ? new Date(date) : date;\n    return formatDate(dateObj, format);\n  } catch (error) {\n    console.error('Error formatting date:', error);\n    return 'N/A';\n  }\n};\n\ninterface ProductDetailScreenProps {\n  productId: string;\n}\n\nexport function ProductDetailScreen({ productId }: ProductDetailScreenProps) {\n  // Hooks and state at the top level\n  const router = useRouter();\n  const { buildPath } = useBasePath();\n  const { product: productData, isLoading } = useProduct(productId);\n  const { addToCart } = useCart();\n  const { isAuthenticated } = useAuth();\n  const notification = useNotification();\n  // Reviews are temporarily hidden.\n  // const { reviews, isLoading: reviewsLoading } = useProductReviews(productId);\n\n  // State declarations\n  const [selectedVariant, setSelectedVariant] = useState<ProductVariant | null>(null);\n  const [quantity, setQuantity] = useState(1);\n  const [isAddingToCart, setIsAddingToCart] = useState(false);\n  const [isFavorited, setIsFavorited] = useState(false);\n  const [relatedProducts, setRelatedProducts] = useState<any[]>([]);\n  const [isLoadingRelated, setIsLoadingRelated] = useState(false);\n  const [initialProductData, setInitialProductData] = useState<any>(null);\n  const [activeImageIndex, setActiveImageIndex] = useState(0);\n  const [activeTab, setActiveTab] = useState<\n    'details' | 'ingredients' | 'specifications'\n    // | 'reviews'\n  >('details');\n  const [hasUserSelectedVariant, setHasUserSelectedVariant] = useState(false);\n\n\n  useEffect(() => {\n    setActiveImageIndex(0);\n  }, [selectedVariant]);\n\n  const product = useMemo(() => {\n    if (initialProductData && !productData) {\n      return initialProductData;\n    }\n\n    if (!productData) return null;\n\n    if (productData.variants?.length && selectedVariant) {\n      return {\n        ...productData,\n        price: selectedVariant.finalPrice,\n        inStock: selectedVariant.isActive,\n        sku: selectedVariant.sku || productData.sku,\n        variantId: selectedVariant._id,\n        variantName: selectedVariant.name\n      };\n    }\n\n    return productData;\n  }, [productData, selectedVariant, initialProductData]);\n\n  // Reviews are temporarily hidden.\n  // const reviewStats = useMemo(() => {\n  //   if (!reviews || reviews.length === 0) {\n  //     return {\n  //       averageRating: product?.rating || 0,\n  //       reviewCount: 0,\n  //     };\n  //   }\n  //\n  //   const totalRating = reviews.reduce((sum, review) => sum + (review.rating || 0), 0);\n  //   const averageRating = totalRating / reviews.length;\n  //\n  //   return {\n  //     averageRating: Math.round(averageRating * 10) / 10,\n  //     reviewCount: reviews.length,\n  //   };\n  // }, [reviews, product?.rating]);\n\n  const getVariantImages = () => {\n    if (hasUserSelectedVariant && selectedVariant?.media?.length) {\n      return selectedVariant.media.map((media: any) => ({\n        src: media.file,\n        width: 800,\n        height: 1000,\n        alt: product?.name || 'Product image',\n        ...media,\n        url: media.file,\n      }));\n    }\n\n    // Show product images by default (before user selects a variant)\n    if (product?.media?.length) {\n      return product.media.map((media: any) => ({\n        src: media.file,\n        width: 800,\n        height: 1000,\n        alt: product?.name || 'Product image',\n        ...media,\n        url: media.file,\n      }));\n    }\n\n    return [];\n  };\n\n  const currentVariant = selectedVariant || product?.variants?.[0] || product;\n  const variantImages = getVariantImages();\n\n  // Use only the selected variant's prices for discount calculation\n  const variantPrice = selectedVariant?.finalPrice || currentVariant?.finalPrice || product?.price || 0;\n  const variantComparePrice = selectedVariant?.retailPrice ||\n    (currentVariant && 'retailPrice' in currentVariant ? currentVariant.retailPrice : null) ||\n    product?.compareAtPrice;\n\n  // Only show discount if we have both prices and the compare price is higher\n  const discount = variantComparePrice && variantPrice && variantComparePrice > variantPrice\n    ? Math.round(((variantComparePrice - variantPrice) / variantComparePrice) * 100)\n    : 0;\n  const lastUpdatedLabel = safeFormatDate(\n    (currentVariant && 'updatedAt' in currentVariant && currentVariant.updatedAt)\n      ? currentVariant.updatedAt\n      : product?.updatedAt\n  );\n  const variantSku = currentVariant?.sku || product?.sku || 'N/A';\n  // const variantInStock = currentVariant && 'inStock' in currentVariant\n  //   ? currentVariant.inStock\n  //   : product?.inStock;\n\n  const variantInStock = currentVariant?.inventoryCount > 0;\n\n\n  useEffect(() => {\n    if (typeof window === 'undefined') return;\n\n    const searchParams = new URLSearchParams(window.location.search);\n    const productParam = searchParams.get('product');\n\n    if (productParam) {\n      try {\n        const decodedProduct = JSON.parse(decodeURIComponent(productParam));\n        setInitialProductData(decodedProduct);\n      } catch (error) {\n        console.error('Failed to parse product data from URL', error);\n      }\n    }\n  }, []);\n\n\n\n  useEffect(() => {\n    if (product?.variants?.length > 0) {\n      const requestedVariantId = typeof window !== 'undefined'\n        ? new URLSearchParams(window.location.search).get('variant')\n        : null;\n      const requestedVariant = requestedVariantId\n        ? product.variants.find((variant: any) => String(variant._id || variant.id) === requestedVariantId)\n        : undefined;\n\n      // Prefer first in-stock variant\n      const inStockVariant = product.variants.find((v: any) => (v.inventoryCount ?? 0) > 0);\n      const newVariant = requestedVariant || inStockVariant || product.variants[0];\n      setHasUserSelectedVariant(!!requestedVariant);\n      setSelectedVariant(newVariant);\n    }\n  }, [product?.variants]);\n\n  const hasFetchedRelated = React.useRef<string | null>(null);\n  useEffect(() => {\n    if (!product?._id || hasFetchedRelated.current === product._id) return;\n    hasFetchedRelated.current = product._id;\n\n    const fetchRelated = async () => {\n      setIsLoadingRelated(true);\n      try {\n        const response = await new ProductsApi(AXIOS_CONFIG).getRelatedProducts(product._id, 4);\n        const lightProducts = response.data || [];\n\n        // Fetch full details for each related product to get description, variants, etc.\n        const fullProducts = await Promise.all(\n          lightProducts.map(async (lightProduct: any) => {\n            try {\n              const fullResponse = await new ProductsApi(AXIOS_CONFIG).getSingleProduct(lightProduct._id || lightProduct.id);\n              return fullResponse.data;\n            } catch (error) {\n              console.error(`Failed to fetch full details for product ${lightProduct._id}`, error);\n              return lightProduct; // Fallback to light data\n            }\n          })\n        );\n\n        setRelatedProducts(fullProducts);\n      } catch (error: any) {\n        console.error('Failed to fetch related products', error);\n      } finally {\n        setIsLoadingRelated(false);\n      }\n    };\n    fetchRelated();\n  }, [product?._id]);\n\n  // Track product view for personalized recommendations\n  const hasTrackedView = React.useRef<string | null>(null);\n  useEffect(() => {\n    if (!productId || hasTrackedView.current === productId) return;\n    hasTrackedView.current = productId;\n\n    const trackView = async () => {\n      try {\n        const deviceId = getDeviceId();\n        const personalizationSessionStartedAt = getPersonalizationSessionStartedAt();\n        await new ProductsApi(AXIOS_CONFIG).trackProductView(productId, deviceId, {\n          headers: personalizationSessionStartedAt\n            ? { 'x-personalization-session-started-at': personalizationSessionStartedAt }\n            : undefined,\n        });\n      } catch (error) {\n        // Fire-and-forget - don't block UX on tracking errors\n        console.debug('Failed to track product view', error);\n      }\n    };\n    trackView();\n  }, [productId]);\n\n  const handleVariantSelect = async (variant: ProductVariant) => {\n    setSelectedVariant(variant);\n    setHasUserSelectedVariant(true);\n    // Reset to first image of the selected variant\n    setActiveImageIndex(0);\n  };\n\n  const handleAddToCart = async () => {\n    if (!product || !selectedVariant) return;\n\n    setIsAddingToCart(true);\n    try {\n      await addToCart(\n        product._id,\n        quantity,\n        selectedVariant._id\n      );\n    } catch (error) {\n      console.error('Failed to add to cart', error);\n    } finally {\n      setIsAddingToCart(false);\n    }\n  };\n\n  const { addToWishlist, removeFromWishlist, isInWishlist } = useWishlist();\n\n  // Initialize isFavorited based on whether the product is in the wishlist\n  useEffect(() => {\n    if (product) {\n      setIsFavorited(isInWishlist(product._id));\n    }\n  }, [product, isInWishlist]);\n\n  const handleToggleFavorite = async () => {\n    if (!product) return;\n    if (!isAuthenticated) {\n      notification.error(\n        'Sign-in required',\n        'Please sign in to add items to your favorites.'\n      );\n      router.push(buildPath(`/login?redirect=${encodeURIComponent(window.location.pathname + window.location.search)}`));\n      return;\n    }\n\n    try {\n      if (isFavorited) {\n        await removeFromWishlist(product._id);\n      } else {\n        await addToWishlist(product);\n      }\n      // Update the local state after successful API call\n      setIsFavorited(!isFavorited);\n    } catch (error) {\n      console.error('Error updating wishlist:', error);\n      notification.error(\n        'Could not update favorites',\n        'We could not update your favorites. Please try again.'\n      );\n    }\n  };\n\n  if (isLoading) {\n    return (\n      <div className=\"min-h-screen\">\n        <section className=\"py-6 sm:py-12\">\n          <div className=\"relative pb-10 sm:pb-20 pt-4 sm:pt-8\">\n            <div className=\"container mx-auto px-4\">\n              {/* Top grid — matches lg:grid-cols-[50fr_50fr] */}\n              <div className=\"grid gap-6 sm:gap-10 lg:grid-cols-[minmax(0,50fr)_minmax(0,50fr)]\">\n\n                {/* Left: main image + thumbnails */}\n                <div className=\"space-y-6 sm:space-y-10\">\n                  <div className=\"h-[280px] sm:h-[420px] md:h-[560px] animate-pulse rounded-2xl sm:rounded-3xl bg-slate-200\" />\n                  <div className=\"grid grid-cols-4 sm:grid-cols-6 md:grid-cols-8 gap-1 sm:gap-2\">\n                    {Array.from({ length: 6 }).map((_, i) => (\n                      <div key={i} className=\"aspect-square animate-pulse rounded-lg bg-slate-200\" />\n                    ))}\n                  </div>\n                </div>\n\n                {/* Right: product info */}\n                <div className=\"space-y-4\">\n                  {/* Brand pill */}\n                  <div className=\"h-6 w-20 animate-pulse rounded-full bg-slate-200\" />\n                  {/* Title */}\n                  <div className=\"space-y-2\">\n                    <div className=\"h-8 sm:h-10 w-3/4 animate-pulse rounded-full bg-slate-200\" />\n                    <div className=\"h-8 sm:h-10 w-1/2 animate-pulse rounded-full bg-slate-200\" />\n                  </div>\n                  {/* Variant name */}\n                  <div className=\"h-4 w-1/3 animate-pulse rounded-full bg-slate-200\" />\n                  {/* Price row */}\n                  <div className=\"flex items-center gap-3\">\n                    <div className=\"h-8 w-24 animate-pulse rounded-full bg-slate-200\" />\n                    <div className=\"h-6 w-16 animate-pulse rounded-full bg-slate-200\" />\n                  </div>\n                  {/* Divider */}\n                  <div className=\"h-px w-full bg-slate-200\" />\n                  {/* Variant selector label */}\n                  <div className=\"h-4 w-28 animate-pulse rounded-full bg-slate-200\" />\n                  {/* Variant cards */}\n                  <div className=\"flex flex-wrap gap-3\">\n                    {Array.from({ length: 3 }).map((_, i) => (\n                      <div key={i} className=\"h-14 w-36 animate-pulse rounded-xl bg-slate-200\" />\n                    ))}\n                  </div>\n                  {/* Stock indicator */}\n                  <div className=\"h-4 w-40 animate-pulse rounded-full bg-slate-200\" />\n                  {/* Action row: quantity + add to cart + heart */}\n                  <div className=\"flex items-center gap-3\">\n                    <div className=\"h-12 w-28 animate-pulse rounded-full bg-slate-200\" />\n                    <div className=\"h-12 flex-1 animate-pulse rounded-full bg-slate-200\" />\n                    <div className=\"h-12 w-12 animate-pulse rounded-full bg-slate-200\" />\n                  </div>\n                </div>\n              </div>\n\n              {/* Tabs skeleton */}\n              <div className=\"mt-10 sm:mt-16 mb-10 sm:mb-16\">\n                <div className=\"flex items-center gap-2 border-b border-slate-100 pb-1 mb-6 sm:mb-8\">\n                  {Array.from({ length: 3 }).map((_, i) => (\n                    <div key={i} className={`h-9 animate-pulse rounded-full bg-slate-200 ${i === 0 ? 'w-36' : i === 1 ? 'w-32' : 'w-28'}`} />\n                  ))}\n                </div>\n                <div className=\"rounded-2xl sm:rounded-[24px] bg-white p-4 sm:p-8 space-y-4\">\n                  <div className=\"h-5 w-40 animate-pulse rounded-full bg-slate-200\" />\n                  <div className=\"h-4 w-full animate-pulse rounded-full bg-slate-200\" />\n                  <div className=\"h-4 w-5/6 animate-pulse rounded-full bg-slate-200\" />\n                  <div className=\"h-4 w-4/6 animate-pulse rounded-full bg-slate-200\" />\n                  <div className=\"h-4 w-full animate-pulse rounded-full bg-slate-200\" />\n                  <div className=\"h-4 w-3/4 animate-pulse rounded-full bg-slate-200\" />\n                </div>\n              </div>\n            </div>\n          </div>\n        </section>\n      </div>\n    );\n  }\n\n  if (!product || product.isActive === false) {\n    return (\n      <div className=\"min-h-screen bg-transparent max-w-fit mx-auto\">\n        <div className=\"container mx-auto px-4 py-16\">\n          <div className=\"rounded-3xl bg-white p-10 text-center shadow-xs\">\n            <Sparkles className=\"mx-auto h-10 w-10 text-hprimary-500\" />\n            <h1 className=\"mt-6 text-2xl font-semibold text-gray-900\">Product not found</h1>\n            <p className=\"mt-2 text-gray-600\">\n              It may have been removed or is temporarily unavailable. Discover other pharmacy\n              essentials in our catalogue.\n            </p>\n            <div className=\"mt-6\">\n              <Link href=\"/shop\" className=\"inline-block\">\n                <Button>Browse products</Button>\n              </Link>\n            </div>\n          </div>\n        </div>\n      </div>\n    );\n  }\n\n\n\n\n  return (\n    <div className=\"min-h-screen overflow-x-hidden\">\n      {/* Breadcrumb */}\n      {/* <div className=\"bg-gray-50 border-b border-gray-200 py-3 sm:py-4\">\n        <div className=\"max-w-[1400px] mx-auto px-4 sm:px-8 md:px-12\">\n          <button\n            onClick={() => router.push(buildPath('/shop'))}\n            className=\"flex items-center gap-2 text-[13px] text-hmuted hover:text-hprimary transition-colors\"\n          >\n            <ChevronLeft className=\"size-4\" />\n            Back to Shop\n          </button>\n        </div>\n      </div> */}\n\n      <section className=\"py-6 sm:py-12\">\n        <div className=\"relative pb-10 sm:pb-20 pt-4 sm:pt-8\">\n          <div className=\"container mx-auto px-4\">\n            <div className=\"grid gap-6 sm:gap-10 lg:grid-cols-[minmax(0,50fr)_minmax(0,50fr)]\">\n              <div className=\"space-y-6 sm:space-y-10\">\n                <section className=\"rounded-3xl \">\n                  <div className=\"space-y-6\">\n                    <motion.div\n                      key={selectedVariant?._id || 'default'}\n                      initial={{ opacity: 0.4, scale: 0.98 }}\n                      animate={{ opacity: 1, scale: 1 }}\n                      transition={{ duration: 0.35 }}\n                      className=\"relative overflow-hidden rounded-2xl sm:rounded-3xl bg-white h-[280px] sm:h-[420px] md:h-[560px]\"\n                    >\n                      {variantImages.length > 0 && variantImages[activeImageIndex] ? (\n                        <Image\n                          src={variantImages[activeImageIndex].src || variantImages[activeImageIndex].url || variantImages[activeImageIndex].file}\n                          alt={currentVariant.name || product.name}\n                          fill\n                          priority\n                          sizes=\"(max-width: 1024px) 100vw, 800px\"\n                          className=\"object-contain\"\n                        />\n                      ) : product?.media?.[0]?.file ? (\n                        <Image\n                          src={product.media[0].file}\n                          alt={product.name}\n                          fill\n                          priority\n                          sizes=\"(max-width: 1024px) 100vw, 800px\"\n                          className=\"object-contain\"\n                        />\n                      ) : null}\n\n                      <div className=\"absolute top-3 left-3 sm:top-6 sm:left-6 flex flex-col gap-2 sm:gap-3\">\n                        {discount > 0 && (\n                          <div className=\"bg-hsecondary text-white rounded-full px-4 py-2\">\n                            <span className=\"font-bold text-[12px] uppercase tracking-wide\">\n                              Save {discount}%\n                            </span>\n                          </div>\n                        )}\n                        {/* {product.bestseller && (\n                          <div className=\"bg-hsecondary text-white rounded-full px-4 py-2\">\n                            <span className=\"font-semibold text-[11px] uppercase tracking-wide\">\n                              Bestseller\n                            </span>\n                          </div>\n                        )}\n                        {product.newArrival && (\n                          <div className=\"bg-hprimary text-white rounded-full px-4 py-2\">\n                            <span className=\"font-semibold text-[11px] uppercase tracking-wide\">\n                              New Arrival\n                            </span>\n                          </div>\n                        )} */}\n                      </div>\n                    </motion.div>\n\n                    {/* Variant Photos Below Main Photo */}\n                    {variantImages.length > 0 && (\n                      <div className=\"grid grid-cols-4 sm:grid-cols-6 md:grid-cols-8 gap-1 sm:gap-2\">\n                        {variantImages.map((image: { src: string; alt?: string }, index: number) => (\n                          <button\n                            key={image.src + index}\n                            type=\"button\"\n                            onClick={() => setActiveImageIndex(index)}\n                            className={`relative aspect-square overflow-hidden rounded-lg border-2 transition-all ${activeImageIndex === index\n                              ? 'border-hprimary-50 ring-2 ring-hprimary-80 ring-offset-2 shadow-md'\n                              : 'border-slate-200 hover:border-hprimary-50'\n                              }`}\n                          >\n                            <Image\n                              src={image?.src}\n                              alt={image.alt || `Product image ${index + 1}`}\n                              className=\"h-full w-full object-cover object-center\"\n                              width={80}\n                              height={80}\n                              unoptimized={true}\n                            />\n                          </button>\n                        ))}\n                      </div>\n                    )}\n                  </div>\n                </section>\n              </div>\n\n\n              <aside className=\"lg:sticky lg:top-24 min-w-0\">\n                <div>\n                  {/* Brand */}\n                  {product.brand && (\n                    <p className=\"text-[11px] text-hmuted uppercase tracking-widest font-medium mb-3 break-words border rounded-full border-hmuted/30 inline-block px-2 py-1\">\n                      {product.brand}\n                    </p>\n                  )}\n\n                  {/* Title */}\n                  <h1 className=\"text-xl sm:text-4xl font-medium text-hsecondary tracking-[-0.5px] sm:tracking-[-1.5px] mb-4 break-words max-w-full sm:max-w-sm\">\n                    {product.name}\n                  </h1>\n\n                  {/* Selected variant */}\n                  {selectedVariant && (\n                    <p className=\"text-sm text-hmuted mb-4\">\n                      {selectedVariant.name}\n                    </p>\n                  )}\n\n                  {/* Price */}\n                  <div className=\"flex flex-wrap items-center gap-2 sm:gap-3 mb-4\">\n                    <span className=\"text-2xl text-hsecondary font-medium\">\n                      ${variantPrice.toFixed(2)}\n                    </span>\n                    {variantComparePrice && variantComparePrice > variantPrice && (\n                      <span className=\"text-[18px] text-hmuted line-through\">\n                        ${variantComparePrice.toFixed(2)}\n                      </span>\n                    )}\n                  </div>\n                  <div className=\"border-b border-gray-200 mb-6\" />\n\n                  {/* Variant Selector with Images */}\n                  {product?.variants && product.variants.length > 0 && (\n                    <div className=\"mb-6\">\n                      <h3 className=\"font-semibold text-[14px] text-hsecondary mb-3\">\n                        Select Variant\n                      </h3>\n                      <div className=\"flex flex-wrap gap-3\">\n                        {product.variants.map((variant: ProductVariant) => {\n                          const isSelected = selectedVariant?._id === variant._id;\n                          const variantImage = variant.media?.[0]?.file\n                            || product.media?.[0]?.file\n                            || product.images?.[0]\n                            || PLACEHOLDER_IMAGE_SRC;\n                          return (\n                            <button\n                              key={variant._id}\n                              type=\"button\"\n                              onClick={() => handleVariantSelect(variant)}\n                              className={`flex items-start gap-3 px-4 py-2.5 rounded-xl border-2 transition-all ${isSelected\n                                ? 'border-hprimary bg-hprimary-5'\n                                : 'border-gray-200 hover:border-hprimary-50'\n                                }`}\n                            >\n                              <div className={`relative h-12 w-12 shrink-0 overflow-hidden rounded-full border-2 ${isSelected ? 'border-hprimary' : 'border-slate-200'}`}>\n                                <Image\n                                  src={variantImage}\n                                  alt={variant.name || 'Variant image'}\n                                  fill\n                                  className=\"object-cover\"\n                                  sizes=\"48px\"\n                                />\n                              </div>\n                              <div className=\"flex-1 min-w-0\">\n                                <p className={`text-start text-sm font-medium break-words ${isSelected ? 'text-hsecondary' : 'text-slate-900'}`}>\n                                  {variant.name}\n                                </p>\n                                {variant.sku && (\n                                  <p className=\"text-start text-xs text-slate-500 mt-0.5 break-all\">SKU: {variant.sku}</p>\n                                )}\n                              </div>\n                              {isSelected && (\n                                <Check className=\"h-5 w-5 text-hsecondary shrink-0\" />\n                              )}\n                            </button>\n                          );\n                        })}\n                      </div>\n                    </div>\n                  )}\n\n                  {/* Stock level indicator */}\n                  {product.showStock && selectedVariant && (\n                    <div className=\"mb-4\">\n                      {selectedVariant.inventoryStatus === ProductVariantInventoryStatusEnum.OUTOFSTOCK ? (\n                        <span className=\"inline-flex items-center gap-1.5 text-[12px] font-medium text-gray-500\">\n                          <span className=\"w-2 h-2 rounded-full bg-gray-400 shrink-0\" />\n                          Out of Stock\n                        </span>\n                      ) : selectedVariant.inventoryStatus === ProductVariantInventoryStatusEnum.LOWSTOCK ? (\n                        <span className=\"inline-flex items-center gap-1.5 text-[12px] font-semibold text-amber-600\">\n                          <span className=\"w-2 h-2 rounded-full bg-amber-500 shrink-0\" />\n                          Only {selectedVariant.inventoryCount} left in stock — order soon\n                        </span>\n                      ) : (\n                        <span className=\"inline-flex items-center gap-1.5 text-[12px] font-medium text-green-700\">\n                          <span className=\"w-2 h-2 rounded-full bg-green-500 shrink-0\" />\n                          {selectedVariant.inventoryCount} in stock\n                        </span>\n                      )}\n                    </div>\n                  )}\n\n                  {/* Quantity + Add to Cart + Heart - single row */}\n                  <div className=\"flex items-center gap-2 sm:gap-3 mb-2\">\n                    {/* Quantity picker */}\n                    <div className=\"flex items-center gap-1.5 sm:gap-3 border-2 border-gray-200 rounded-full px-2.5 sm:px-5 py-2.5 sm:py-3 shrink-0\">\n                      <button\n                        type=\"button\"\n                        onClick={() => setQuantity((current) => Math.max(1, current - 1))}\n                        className=\"font-bold text-[16px] text-hsecondary hover:text-hprimary transition-colors leading-none\"\n                        aria-label=\"Decrease quantity\"\n                      >\n                        −\n                      </button>\n                      <span className=\"font-semibold text-[15px] text-hsecondary min-w-5 text-center\">\n                        {quantity}\n                      </span>\n                      <button\n                        type=\"button\"\n                        onClick={() => {\n                          const maxStock = selectedVariant?.inventoryCount || product.summary?.totalInventory || 999;\n                          if (quantity >= maxStock) {\n                            notification.error(\n                              'Maximum quantity reached',\n                              product.showStock\n                                ? `Sorry, only ${maxStock} units of this item are available.`\n                                : 'Sorry, you\\'ve reached the maximum available quantity.'\n                            );\n                            return;\n                          }\n                          setQuantity(quantity + 1);\n                        }}\n                        className=\"font-bold text-[16px] text-hsecondary hover:text-hprimary transition-colors leading-none\"\n                        aria-label=\"Increase quantity\"\n                      >\n                        +\n                      </button>\n                    </div>\n\n                    {/* Add to Cart / Notify */}\n                    <div className=\"min-w-0 flex-1\">\n                      {selectedVariant?.inventoryStatus === ProductVariantInventoryStatusEnum.OUTOFSTOCK ? (\n                        <NotifyWhenInStockButton\n                          productId={productId}\n                          variantId={selectedVariant._id || selectedVariant.id}\n                          size=\"sm\"\n                          className=\"whitespace-nowrap\"\n                        />\n                      ) : (\n                        <button\n                          className=\"w-full min-w-0 font-medium text-[11px] min-[380px]:text-[12px] sm:text-[14px] px-2.5 sm:px-6 py-3 sm:py-3.5 rounded-full transition-all duration-300 flex items-center justify-center gap-2 bg-hsecondary text-white hover:bg-hsecondary/80 hover:shadow-lg disabled:opacity-50 disabled:cursor-not-allowed whitespace-nowrap\"\n                          onClick={handleAddToCart}\n                          disabled={!selectedVariant || isAddingToCart}\n                        >\n                          {isAddingToCart ? (\n                            <>\n                              <svg className=\"animate-spin h-4 w-4 shrink-0\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" aria-hidden=\"true\">\n                                <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n                                <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n                              </svg>\n                              <span className=\"hidden min-[360px]:inline\">Adding...</span>\n                            </>\n                          ) : !selectedVariant ? (\n                            <>\n                              <span className=\"sm:hidden\">Select</span>\n                              <span className=\"hidden sm:inline\">Select a variant</span>\n                            </>\n                          ) : (\n                            <>\n                              <span className=\"sm:hidden\">Add to cart</span>\n                              <span className=\"hidden sm:inline\">Add to Cart{variantPrice ? ` · $${variantPrice.toFixed(2)}` : ''}</span>\n                            </>\n                          )}\n                        </button>\n                      )}\n                    </div>\n\n                    {/* Heart */}\n                    <button\n                      className=\"shrink-0 p-3 sm:p-3.5 rounded-full border-2 border-gray-200 hover:bg-gray-50 transition-all flex items-center justify-center\"\n                      onClick={handleToggleFavorite}\n                      aria-label={isFavorited ? 'Remove from favorites' : 'Add to favorites'}\n                    >\n                      <Heart className={`h-4 w-4 ${isFavorited ? 'fill-red-500 text-red-500' : 'text-hmuted'}`} />\n                    </button>\n                  </div>\n\n                  {product.showStock && quantity >= (selectedVariant?.inventoryCount || product.summary?.totalInventory || 999) && (\n                    <p className=\"text-[11px] text-hprimary font-medium mb-4\">\n                      Maximum available reached\n                    </p>\n                  )}\n                </div>\n              </aside>\n            </div>\n\n\n            <div className=\"mb-10 sm:mb-16 mt-10\">\n              <div className=\"flex items-center mb-6 sm:mb-8 border-b border-hsecondary/10 overflow-x-auto scrollbar-hide\">\n                {([\n                  { key: 'details', label: 'Product Details' },\n                  ...(product.ingredients?.length > 0 ? [{ key: 'ingredients', label: 'Ingredients' }] : []),\n                  { key: 'specifications', label: 'Specifications' },\n                  // Reviews are temporarily hidden.\n                  // { key: 'reviews', label: `Reviews (${reviewStats.reviewCount})` },\n                ] as const).map(({ key, label }: any) => (\n                  <button\n                    key={key}\n                    onClick={() => setActiveTab(key)}\n                    className={`font-medium text-[12px] sm:text-[14px] px-3 sm:px-6 py-3 sm:py-4 transition-all whitespace-nowrap shrink-0 ${activeTab === key\n                      ? 'text-hprimary border-b-2 border-hprimary -mb-0.5'\n                      : 'text-hmuted hover:text-hprimary'\n                      }`}\n                  >\n                    {label}\n                  </button>\n                ))}\n              </div>\n\n              <div className=\"rounded-2xl sm:rounded-[24px] p-4 sm:p-8\">\n                {activeTab === 'details' && (\n                  <div>\n                    <h3 className=\"font-semibold text-hsecondary mb-4\">\n                      Product Description\n                    </h3>\n                    <div\n                      className=\"text-[14px] text-hmuted leading-[1.8] mb-4 max-w-full overflow-hidden break-words\"\n                      dangerouslySetInnerHTML={{ __html: product.description }}\n                    />\n                  </div>\n                )}\n\n                {activeTab === 'ingredients' && (\n                  <div>\n                    <h3 className=\"font-semibold text-hsecondary mb-4\">\n                      Ingredients\n                    </h3>\n                    <div className=\"flex flex-wrap gap-2\">\n                      {product.ingredients.map((ingredient: string, i: number) => (\n                        <span\n                          key={i}\n                          className=\"text-[13px] text-hmuted bg-slate-50 border border-slate-200 rounded-full px-3 py-1\"\n                        >\n                          {ingredient}\n                        </span>\n                      ))}\n                    </div>\n                  </div>\n                )}\n\n                {activeTab === 'specifications' && (\n                  <div className=\"space-y-4\">\n                    <h3 className=\"font-semibold text-hsecondary mb-4\">\n                      Specifications\n                    </h3>\n                    {product.sku && (\n                      <div className=\"flex flex-wrap justify-between gap-1 py-2 border-b border-gray-100 text-[14px]\">\n                        <span className=\"text-hmuted\">SKU</span>\n                        <span className=\"font-medium text-hsecondary\">{product.sku}</span>\n                      </div>\n                    )}\n                    {product.brand && (\n                      <div className=\"flex flex-wrap justify-between gap-1 py-2 border-b border-gray-100 text-[14px]\">\n                        <span className=\"text-hmuted\">Brand</span>\n                        <span className=\"font-medium text-hsecondary\">{product.brand}</span>\n                      </div>\n                    )}\n                    {product.categoryIds?.[0]?.name && (\n                      <div className=\"flex flex-wrap justify-between gap-1 py-2 border-b border-gray-100 text-[14px]\">\n                        <span className=\"text-hmuted\">Category</span>\n                        <span className=\"font-medium text-hsecondary\">{product.categoryIds[0].name}</span>\n                      </div>\n                    )}\n                    {selectedVariant && (\n                      <>\n                        {selectedVariant.sku && (\n                          <div className=\"flex flex-wrap justify-between gap-1 py-2 border-b border-gray-100 text-[14px]\">\n                            <span className=\"text-hmuted\">Variant SKU</span>\n                            <span className=\"font-medium text-hsecondary\">{selectedVariant.sku}</span>\n                          </div>\n                        )}\n                        {product.showStock && (\n                          <div className=\"flex flex-wrap justify-between gap-1 py-2 border-b border-gray-100 text-[14px]\">\n                            <span className=\"text-hmuted\">Availability</span>\n                            <span className=\"font-medium text-hsecondary\">\n                              {selectedVariant.inventoryCount > 0 ? `${selectedVariant.inventoryCount} in stock` : 'Out of stock'}\n                            </span>\n                          </div>\n                        )}\n                      </>\n                    )}\n                  </div>\n                )}\n\n                {/* Reviews are temporarily hidden.\n                {activeTab === 'reviews' && (\n                  <ProductReviewsSection productId={productId} />\n                )}\n                */}\n              </div>\n            </div>\n\n\n            {/* Related Products */}\n            {(isLoadingRelated || relatedProducts.length > 0) && (\n              <div>\n                <h2 className=\"font-semibold text-hsecondary mb-6 sm:mb-8 text-xl sm:text-2xl\">\n                  You May Also Like\n                </h2>\n                  <div className=\"flex flex-wrap justify-center gap-4\">\n                  {isLoadingRelated\n                    ? Array.from({ length: 4 }).map((_, i) => (\n                        <div key={i} className=\"w-[calc(50%-8px)] md:w-[calc(33.333%-11px)] lg:w-[calc(25%-12px)] xl:w-[calc(20%-13px)]\">\n                          <ProductCardSkeleton />\n                        </div>\n                      ))\n                    : relatedProducts.map(relatedProduct => (\n                      <div key={relatedProduct._id} className=\"w-[calc(50%-8px)] md:w-[calc(33.333%-11px)] lg:w-[calc(25%-12px)] xl:w-[calc(20%-13px)]\">\n                        <ProductCard\n                          product={relatedProduct}\n                          onClickProduct={(item) => {\n                            router.push(buildPath(`/products/${item._id || item.id}`));\n                          }}\n                        />\n                      </div>\n                    ))\n                  }\n                </div>\n              </div>\n            )}\n\n          </div>\n        </div>\n      </section>\n    </div>\n  );\n}\n","'use client';\n\nimport { PLACEHOLDER_IMAGE_SRC } from '@/lib/constants/assets';\n\nimport React, { useState } from 'react';\nimport { motion } from 'framer-motion';\nimport { Minus, Plus, Trash2, Package, Heart } from 'lucide-react';\n\nimport { formatPrice } from '@/lib/utils/format';\nimport { useCart } from '@/providers/CartProvider';\nimport { useNotification } from '@/providers/NotificationProvider';\nimport Image from 'next/image';\nimport { CartItemPopulated } from '@/lib/Apis';\nimport { useProduct } from '@/hooks/useProducts';\nimport { useRouter } from 'next/navigation';\nimport { useBasePath } from '@/providers/BasePathProvider';\n\n\ninterface CartItemProps {\n  item: CartItemPopulated;\n}\n\nexport function CartItem({ item }: CartItemProps) {\n  const { updateQuantity, removeFromCart, saveForLater } = useCart();\n  const notification = useNotification();\n  const router = useRouter();\n  const { buildPath } = useBasePath();\n  const [isRemoving, setIsRemoving] = useState(false);\n  const [isSaving, setIsSaving] = useState(false);\n\n  // Fallback Logic:\n  // If the backend doesn't populate 'product' on the cart item, we can try to find a productId\n  // and fetch the product details to get the media.\n  // We check various locations where productId might be hidden.\n  const productId =\n    (item as any).productId ||\n    (item as any).product?._id ||\n    (item as any).product?.id ||\n    (item.productVariantData as any).productId ||\n    (item.productVariantData as any).product?._id ||\n    (item.productVariantData as any).product?.id;\n\n  const { product } = useProduct(productId);\n\n  const handleUpdateQuantity = (newQuantity: number) => {\n    if (newQuantity < 1) return;\n    updateQuantity(item.productVariantId, newQuantity);\n  };\n\n  const handleRemove = async () => {\n    setIsRemoving(true);\n    try {\n      await removeFromCart(item.productVariantId);\n    } finally {\n      setIsRemoving(false);\n    }\n  };\n\n  const handleSaveForLater = async () => {\n    setIsSaving(true);\n    try {\n      await saveForLater(item);\n    } finally {\n      setIsSaving(false);\n    }\n  };\n\n  const itemTotal = item.productVariantData.finalPrice * item.quantity;\n  const unitPrice = item.productVariantData.finalPrice;\n\n\n  return (\n    <motion.div\n      layout\n      initial={{ opacity: 0, y: 20 }}\n      animate={{ opacity: 1, y: 0 }}\n      exit={{ opacity: 0, x: -100 }}\n      className=\"bg-white border-2 border-gray-100 rounded-[24px] p-4 md:p-6 hover:border-hsecondary/30 transition-all duration-300\"\n    >\n\n\n      <div className=\"flex gap-3 md:gap-4\">\n        <div className=\"w-20 h-20 md:w-28 md:h-28 rounded-[16px] overflow-hidden bg-gray-50 shrink-0\">\n          <Image\n            src={(item as any).product?.media?.[0]?.file || product?.media?.[0]?.file || item.productVariantData.media?.[0]?.file || PLACEHOLDER_IMAGE_SRC}\n            alt={(item as any).product?.name || product?.name || item.productVariantData.name}\n            className=\"w-full h-full object-cover\"\n            height={112}\n            width={112}\n          />\n        </div>\n\n        {/* Product Info */}\n        <div className=\"flex-1 min-w-0\">\n          <div className=\"flex items-start justify-between gap-4 mb-3\">\n            <div className=\"flex-1 min-w-0\">\n              <h3\n                className=\"font-semibold text-[#2B4B7C] mb-0.5 cursor-pointer hover:underline\"\n                onClick={() => productId && router.push(buildPath(`/products/${productId}`))}\n              >\n                {(item as any).product?.name || product?.name || item.productVariantData.name}\n              </h3>\n              <p className=\"text-[12px] text-[#676c80] mb-2\">{item.productVariantData.name}</p>\n              <div className=\"flex items-center gap-2\">\n                  {item.productVariantData.inventoryCount === 0 ? (\n                    <span className=\"text-[11px] text-red-500 font-medium\">\n                      Out of Stock\n                    </span>\n                  ) : item.productVariantData.inventoryCount <= 10 ? (\n                    <span className=\"text-[11px] text-hprimary font-medium flex items-center gap-1\">\n                      <Package className=\"size-3\" />\n                      Only {item.productVariantData.inventoryCount} left in stock\n                    </span>\n                  ) : (\n                    <span className=\"text-[11px] text-green-600 font-medium flex items-center gap-1\">\n                      <Package className=\"size-3\" />\n                      In Stock\n                    </span>\n                  )}\n              </div>\n            </div>\n \n            {/* Action Buttons - Top Right */}\n            <div className=\"flex items-center gap-1\">\n              <button\n                onClick={handleSaveForLater}\n                disabled={isSaving}\n                className={`p-2 rounded-full transition-colors group ${isSaving ? 'bg-hprimary/10 cursor-not-allowed' : 'hover:bg-hprimary/10'}`}\n                aria-label=\"Move to wishlist\"\n                title=\"Move to wishlist\"\n              >\n                {isSaving ? (\n                  <span className=\"inline-block h-5 w-5 animate-spin rounded-full border-2 border-hprimary border-t-transparent\" />\n                ) : (\n                  <Heart className=\"size-5 text-[#676c80] group-hover:text-hprimary group-hover:fill-hprimary/20 transition-colors\" />\n                )}\n              </button>\n              <button\n                onClick={handleRemove}\n                disabled={isRemoving}\n                className={`p-2 rounded-full transition-colors group ${isRemoving ? 'bg-red-50 cursor-not-allowed' : 'hover:bg-red-50'}`}\n                aria-label=\"Remove item\"\n                title=\"Remove item\"\n              >\n                {isRemoving ? (\n                  <span className=\"inline-block h-5 w-5 animate-spin rounded-full border-2 border-red-500 border-t-transparent\" />\n                ) : (\n                  <Trash2 className=\"size-5 text-[#676c80] group-hover:text-red-500 transition-colors\" />\n                )}\n              </button>\n            </div>\n          </div>\n\n          {/* Quantity and Price */}\n          <div className=\"flex flex-col sm:flex-row sm:items-center justify-between gap-4 mt-auto\">\n            {/* Quantity Controls */}\n            <div className=\"flex flex-col gap-1.5\">\n              <div className=\"flex items-center gap-3 rounded-full px-3 py-1.5 md:px-4 md:py-2 w-fit relative bg-gray-50\">\n                <button\n                  onClick={() => handleUpdateQuantity(item.quantity - 1)}\n                  disabled={item.quantity <= 1}\n                  className=\"p-1 rounded-full transition-all hover:bg-white\"\n                  aria-label=\"Decrease quantity\"\n                >\n                  <Minus className=\"size-3 md:size-4 text-[#2B4B7C]\" />\n                </button>\n                <span className=\"font-semibold text-[13px] md:text-[14px] text-[#2B4B7C] min-w-[20px] text-center\">\n                  {item.quantity}\n                </span>\n                <button\n                  onClick={() => {\n                    const maxStock = item.productVariantData.inventoryCount || 999;\n                    if (item.quantity >= maxStock) {\n                      notification.error(\n                        'Maximum Stock Reached',\n                        `Sorry, only ${maxStock} units of this item are available.`\n                      );\n                      return;\n                    }\n                    handleUpdateQuantity(item.quantity + 1);\n                  }}\n                  className=\"p-1 rounded-full transition-all hover:bg-white\"\n                  aria-label=\"Increase quantity\"\n                >\n                  <Plus className=\"size-3 md:size-4 text-[#2B4B7C]\" />\n                </button>\n              </div>\n              {item.quantity >= (item.productVariantData.inventoryCount || 999) && (\n                <span className=\"text-[10px] text-hprimary font-medium px-2\">\n                  Maximum available reached\n                </span>\n              )}\n            </div>\n\n            {/* Price */}\n            <div className=\"text-left sm:text-right\">\n              <p className=\"font-bold text-[16px] md:text-[18px] text-hsecondary\">\n                {formatPrice(itemTotal)}\n              </p>\n              <p className=\"text-[10px] md:text-[11px] text-[#676c80]\">\n                {formatPrice(unitPrice)} each\n              </p>\n            </div>\n          </div>\n        </div>\n\n      </div>\n\n    </motion.div>\n  );\n}\n\n","'use client';\n\nimport { PLACEHOLDER_IMAGE_SRC } from '@/lib/constants/assets';\nimport React, { useState } from 'react';\nimport { motion } from 'framer-motion';\nimport { Trash2, Heart, AlertCircle } from 'lucide-react';\nimport { formatPrice } from '@/lib/utils/format';\nimport { useCart } from '@/providers/CartProvider';\nimport { useWishlist } from '@/providers/WishlistProvider';\nimport { useNotification } from '@/providers/NotificationProvider';\nimport Image from 'next/image';\nimport { CartItemPopulated } from '@/lib/Apis';\nimport { useProduct } from '@/hooks/useProducts';\n\ninterface OutOfStockCartItemProps {\n    item: CartItemPopulated;\n}\n\nexport function OutOfStockCartItem({ item }: OutOfStockCartItemProps) {\n    const { removeFromCart } = useCart();\n    const { addToWishlist } = useWishlist();\n    const notification = useNotification();\n    const [isRemoving, setIsRemoving] = useState(false);\n    const [isMoving, setIsMoving] = useState(false);\n\n    // Fallback logic for media\n    const productId =\n        (item as any).productId ||\n        (item as any).product?._id ||\n        (item as any).product?.id ||\n        (item.productVariantData as any).productId ||\n        (item.productVariantData as any).product?._id ||\n        (item.productVariantData as any).product?.id;\n\n    const { product } = useProduct(productId);\n\n    const handleRemove = async () => {\n        setIsRemoving(true);\n        try {\n            await removeFromCart(item.productVariantId);\n        } finally {\n            setIsRemoving(false);\n        }\n    };\n\n    const handleMoveToWishlist = async () => {\n        setIsMoving(true);\n        try {\n            // Note: We need a Product object for addToWishlist. \n            // We'll construct a partial one if needed, but the API might only need the ID.\n            // Based on our research, it seems the API takes a productId. \n            // We'll try to find it in the data or fallback to variantId if they are the same in some contexts.\n            const productId = (item.productVariantData as any).productId || item.productVariantId;\n\n            await addToWishlist({\n                _id: productId,\n                name: item.productVariantData.name,\n            } as any);\n\n            await removeFromCart(item.productVariantId);\n\n            notification.success(\n                'Moved to wishlist',\n                `${item.productVariantData.name} has been moved to your wishlist.`\n            );\n        } catch (error) {\n            console.error('Error moving to wishlist:', error);\n            // removeFromCart is already handled by error UI in provider if it fails\n        } finally {\n            setIsMoving(false);\n        }\n    };\n\n    return (\n        <motion.div\n            layout\n            initial={{ opacity: 0, scale: 0.95 }}\n            animate={{ opacity: 1, scale: 1 }}\n            exit={{ opacity: 0, x: -20 }}\n            className=\"bg-gray-50/50 border-2 border-dashed border-gray-200 rounded-[24px] p-4 md:p-6 opacity-75 grayscale-[0.5]\"\n        >\n            <div className=\"flex gap-4\">\n                <div className=\"w-20 h-20 md:w-24 md:h-24 rounded-[16px] overflow-hidden bg-gray-100 shrink-0 relative\">\n                    <Image\n                        src={(item as any).product?.media?.[0]?.file || product?.media?.[0]?.file || item.productVariantData.media?.[0]?.file || PLACEHOLDER_IMAGE_SRC}\n                        alt={(item as any).product?.name || product?.name || item.productVariantData.name}\n                        className=\"w-full h-full object-cover opacity-50\"\n                        height={96}\n                        width={96}\n                    />\n                    <div className=\"absolute inset-0 flex items-center justify-center\">\n                        <div className=\"bg-white/80 backdrop-blur-sm px-2 py-1 rounded text-[10px] font-bold text-red-600 border border-red-200\">\n                            OUT OF STOCK\n                        </div>\n                    </div>\n                </div>\n\n                <div className=\"flex-1 min-w-0\">\n                    <div className=\"flex items-start justify-between gap-4\">\n                        <div className=\"flex-1 min-w-0\">\n                            <h3 className=\"font-semibold text-gray-500 line-through\">\n                                {(item as any).product?.name || product?.name || item.productVariantData.name}\n                            </h3>\n                            <p className=\"text-[12px] text-gray-400 mb-1\">{item.productVariantData.name}</p>\n                            <div className=\"flex items-center gap-2 text-red-500 mb-3\">\n                                <AlertCircle className=\"size-3\" />\n                                <span className=\"text-[11px] font-medium\">Currently unavailable</span>\n                            </div>\n                        </div>\n\n                        <div className=\"flex gap-2\">\n                            <button\n                                onClick={handleMoveToWishlist}\n                                disabled={isMoving || isRemoving}\n                                className=\"p-2 rounded-full bg-white border border-gray-200 hover:border-hprimary hover:text-hprimary transition-all group\"\n                                title=\"Move to wishlist\"\n                            >\n                                {isMoving ? (\n                                    <span className=\"inline-block h-4 w-4 animate-spin rounded-full border-2 border-hprimary border-t-transparent\" />\n                                ) : (\n                                    <Heart className=\"size-4 text-gray-400 group-hover:text-hprimary transition-colors\" />\n                                )}\n                            </button>\n                            <button\n                                onClick={handleRemove}\n                                disabled={isRemoving || isMoving}\n                                className=\"p-2 rounded-full bg-white border border-gray-200 hover:border-red-200 hover:text-red-500 transition-all group\"\n                                title=\"Remove item\"\n                            >\n                                {isRemoving ? (\n                                    <span className=\"inline-block h-4 w-4 animate-spin rounded-full border-2 border-red-500 border-t-transparent\" />\n                                ) : (\n                                    <Trash2 className=\"size-4 text-gray-400 group-hover:text-red-500 transition-colors\" />\n                                )}\n                            </button>\n                        </div>\n                    </div>\n\n                    <div className=\"flex items-center justify-between\">\n                        <p className=\"text-sm font-medium text-gray-400\">\n                            {formatPrice(item.productVariantData.finalPrice)}\n                        </p>\n                        <span className=\"text-[11px] text-gray-400 italic\">\n                            Saved in cart but out of stock\n                        </span>\n                    </div>\n                </div>\n            </div>\n        </motion.div>\n    );\n}\n","import React, { useState, useEffect } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { usePersonalizedProducts } from '@/hooks/usePersonalizedProducts';\nimport { Product } from '@/lib/Apis';\nimport { ProductCard } from '@/components/ProductCard';\nimport { Skeleton } from '@/components/ui/Skeleton';\nimport { ArrowDown, Check } from 'lucide-react';\nimport { ProductFilters } from '@/lib/types';\n\ninterface RecommendedProductsSectionProps {\n    title?: string;\n    subtitle?: string;\n    initialLimit?: number;\n    increment?: number;\n    filters?: ProductFilters;\n    className?: string;\n}\n\nexport function RecommendedProductsSection({\n    title = \"You may also like\",\n    subtitle = \"Popular products selected for you\",\n    initialLimit = 5,\n    increment = 5,\n    filters,\n    className = \"\",\n}: RecommendedProductsSectionProps) {\n    const router = useRouter();\n    const { buildPath } = useBasePath();\n    const [limit, setLimit] = useState(initialLimit);\n    const [hasMore, setHasMore] = useState(true);\n\n    const {\n        products,\n        isLoading\n    } = usePersonalizedProducts({\n        limit,\n        filters,\n        personalizedRatio: 70,\n    });\n\n    // Determine if we've reached the end of the available products\n    useEffect(() => {\n        if (!isLoading && products.length < limit) {\n            setHasMore(false);\n        } else {\n            setHasMore(true);\n        }\n    }, [products.length, limit, isLoading]);\n\n    const handleLoadMore = () => {\n        setLimit((prev) => prev + increment);\n    };\n\n    if (!isLoading && products.length === 0) {\n        return null; // Don't show section if no recommendations at all\n    }\n\n    return (\n        <div className={`max-w-[1400px] mx-auto px-4 md:px-8 pb-20 ${className}`}>\n            <div className=\"pt-16 border-t border-gray-100\">\n                <div className=\"mb-8\">\n                    <h2 className=\"text-2xl font-bold text-hsecondary\">{title}</h2>\n                    {subtitle && <p className=\"text-hmuted mt-1\">{subtitle}</p>}\n                </div>\n\n                {isLoading && products.length === 0 ? (\n                    <div className=\"grid grid-cols-2 gap-4 md:gap-6 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5\">\n                        {[...Array(initialLimit)].map((_, index) => (\n                            <div\n                                key={index}\n                                className=\"aspect-[4/5] animate-pulse rounded-2xl border border-slate-200 bg-slate-50\"\n                            />\n                        ))}\n                    </div>\n                ) : (\n                    <>\n                    <div className=\"grid min-[300px]:grid-cols-2 gap-4 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5\">\n                            {products.map((product) => (\n                                <ProductCard\n                                    key={product._id || product.id}\n                                    product={product as Product}\n                                    onClickProduct={(p) => router.push(buildPath(`/products/${p._id}`))}\n                                />\n                            ))}\n\n                            {/* Show skeletons for loading more items */}\n                            {isLoading && products.length > 0 && (\n                                [...Array(increment)].map((_, index) => (\n                                    <div\n                                        key={`loading-more-${index}`}\n                                        className=\"aspect-[4/5] animate-pulse rounded-2xl border border-slate-200 bg-slate-50\"\n                                    />\n                                ))\n                            )}\n                        </div>\n\n                        <div className=\"flex justify-center\">\n                            {hasMore ? (\n                                <button\n                                    onClick={handleLoadMore}\n                                    disabled={isLoading}\n                                    className=\"group px-8 py-3 bg-white border border-gray-200 hover:border-hprimary hover:text-hprimary text-gray-700 font-medium rounded-xl transition-all shadow-sm hover:shadow-md flex items-center gap-2\"\n                                >\n                                    {isLoading ? 'Loading...' : 'Show more products'}\n                                    {!isLoading && <ArrowDown className=\"h-4 w-4 group-hover:translate-y-1 transition-transform\" />}\n                                </button>\n                            ) :null}\n                        </div>\n                    </>\n                )}\n            </div>\n        </div>\n    );\n}\n","'use client';\n\nimport React, { useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { X } from 'lucide-react';\n\ninterface ModalProps {\n  isOpen: boolean;\n  onClose: () => void;\n  title?: string;\n  children: React.ReactNode;\n  size?: 'sm' | 'md' | 'lg' | 'xl';\n}\n\nexport function Modal({ isOpen, onClose, title, children, size = 'md' }: ModalProps) {\n  useEffect(() => {\n    if (typeof window === 'undefined') return;\n\n    if (isOpen) {\n      document.body.style.overflow = 'hidden';\n    } else {\n      document.body.style.overflow = 'unset';\n    }\n    return () => {\n      document.body.style.overflow = 'unset';\n    };\n  }, [isOpen]);\n\n  const sizes = {\n    sm: 'max-w-md',\n    md: 'max-w-lg',\n    lg: 'max-w-2xl',\n    xl: 'max-w-4xl',\n  };\n\n  if (typeof window === 'undefined') return null;\n\n  return createPortal(\n    <AnimatePresence>\n      {isOpen && (\n        <>\n          {/* Backdrop */}\n          <motion.div\n            initial={{ opacity: 0 }}\n            animate={{ opacity: 1 }}\n            exit={{ opacity: 0 }}\n            className=\"fixed inset-0 bg-black/50 backdrop-blur-xs z-9998\"\n          />\n\n          {/* Container — click outside closes */}\n          <div\n            className=\"fixed inset-0 z-9999 flex items-center justify-center p-4\"\n            onClick={onClose}\n          >\n            <motion.div\n              initial={{ opacity: 0, scale: 0.95, y: 20 }}\n              animate={{ opacity: 1, scale: 1, y: 0 }}\n              exit={{ opacity: 0, scale: 0.95, y: 20 }}\n              onClick={(e) => e.stopPropagation()}\n              className={`bg-white rounded-2xl shadow-2xl w-full ${sizes[size]} max-h-[90vh] overflow-hidden flex flex-col`}\n            >\n              {/* Header */}\n              {title && (\n                <div className=\"flex items-center justify-between p-6 border-b border-gray-200\">\n                  <h2 className=\"text-2xl font-bold text-gray-900\">{title}</h2>\n                  <button\n                    onClick={onClose}\n                    className=\"p-2 hover:bg-gray-100 rounded-lg transition-colors\"\n                  >\n                    <X className=\"w-5 h-5\" />\n                  </button>\n                </div>\n              )}\n\n              {/* Content */}\n              <div className=\"flex-1 overflow-y-auto p-6\">\n                {children}\n              </div>\n            </motion.div>\n          </div>\n        </>\n      )}\n    </AnimatePresence>,\n    document.body\n  );\n}\n","'use client';\n\nimport React, { useState, useMemo } from 'react';\nimport { motion } from 'framer-motion';\nimport {\n  ArrowRight,\n  BadgePercent,\n  CheckCircle2,\n  HeartPulse,\n  ShieldCheck,\n  ShoppingBag,\n  AlertCircle,\n} from 'lucide-react';\nimport { CartItem } from '@/components/CartItem';\nimport { OutOfStockCartItem } from '@/components/OutOfStockCartItem';\nimport { Button } from '@/components/ui/Button';\nimport { useCart } from '@/providers/CartProvider';\nimport { Skeleton } from '@/components/ui/Skeleton';\nimport { formatPrice } from '@/lib/utils/format';\nimport { useRouter } from 'next/navigation';\nimport { CartItemPopulated } from '@/lib/Apis';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { useAuth } from '@/providers/AuthProvider';\nimport { useNotification } from '@/providers/NotificationProvider';\nimport { usePersonalizedProducts } from '@/hooks/usePersonalizedProducts';\nimport { ProductCard } from '@/components/ProductCard';\nimport { RecommendedProductsSection } from '@/components/RecommendedProductsSection';\nimport { Product } from '@/lib/Apis';\nimport { Modal } from '@/components/ui/Modal';\nimport { ProductVariantInventoryStatusEnum, ProductVariantPopulatedInventoryStatusEnum } from '@/lib/Apis/models';\nimport Image from 'next/image';\nimport { PLACEHOLDER_IMAGE_SRC } from '@/lib/constants/assets';\n\n\nfunction CartItemSkeleton() {\n  return (\n    <div className=\"flex gap-4 p-4 bg-white rounded-2xl border border-gray-100\">\n      <Skeleton className=\"h-24 w-24 rounded-xl flex-shrink-0\" />\n      <div className=\"flex-1 space-y-3 py-1\">\n        <Skeleton className=\"h-5 w-3/4\" />\n        <Skeleton className=\"h-4 w-1/3\" />\n        <div className=\"flex items-center justify-between pt-1\">\n          <Skeleton className=\"h-8 w-28 rounded-full\" />\n          <Skeleton className=\"h-6 w-16\" />\n        </div>\n      </div>\n    </div>\n  );\n}\n\nfunction CartScreenSkeleton() {\n  return (\n    <div className=\"min-h-screen bg-white\">\n      <div className=\"max-w-[1400px] mx-auto px-4 md:px-12\">\n        <div className=\"py-8\">\n          <div className=\"mb-8 md:mb-12 space-y-2\">\n            <Skeleton className=\"h-9 w-52\" />\n            <Skeleton className=\"h-5 w-32\" />\n          </div>\n          <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-8\">\n            {/* Items column */}\n            <div className=\"space-y-4 lg:col-span-2\">\n              <CartItemSkeleton />\n              <CartItemSkeleton />\n              <CartItemSkeleton />\n            </div>\n            {/* Summary column */}\n            <div className=\"lg:col-span-1\">\n              <div className=\"rounded-[24px] border-2 border-gray-100 p-6 md:p-8 space-y-5\">\n                <Skeleton className=\"h-6 w-36\" />\n                <div className=\"space-y-3\">\n                  <div className=\"flex justify-between\">\n                    <Skeleton className=\"h-4 w-28\" />\n                    <Skeleton className=\"h-4 w-16\" />\n                  </div>\n                  <div className=\"flex justify-between\">\n                    <Skeleton className=\"h-4 w-20\" />\n                    <Skeleton className=\"h-4 w-24\" />\n                  </div>\n                  <div className=\"border-t border-gray-100 pt-4 flex justify-between\">\n                    <Skeleton className=\"h-6 w-16\" />\n                    <Skeleton className=\"h-7 w-20\" />\n                  </div>\n                </div>\n                <Skeleton className=\"h-12 w-full rounded-full\" />\n                <Skeleton className=\"h-12 w-full rounded-full\" />\n              </div>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport function CartScreen() {\n  const router = useRouter();\n  const { cart, isLoading, isFetching, updateQuantity, removeFromCart, isLoading: cartIsLoading } = useCart();\n  const { buildPath } = useBasePath();\n  const { isAuthenticated, user } = useAuth();\n  const notification = useNotification();\n\n  const [showQuantityModal, setShowQuantityModal] = useState(false);\n  const [quantityAdjustItems, setQuantityAdjustItems] = useState<any[]>([]);\n\n  // Stock issues: items where quantity exceeds inventory (but not out of stock)\n  const stockIssues = useMemo(() => {\n    if (!cart?.cartBody?.items) return [];\n    return cart.cartBody.items.filter(item => {\n      const v = item.productVariantData;\n      const inventoryCount = typeof v.inventoryCount === 'number' ? v.inventoryCount : 0;\n      // Check if inventoryStatus is OUT_OF_STOCK or quantity exceeds inventory\n      if (v.inventoryStatus === ProductVariantPopulatedInventoryStatusEnum.OUTOFSTOCK) return true;\n      if (inventoryCount > 0 && inventoryCount < item.quantity) return true;\n      return false;\n    });\n  }, [cart]);\n\n  if (isFetching) {\n    return <CartScreenSkeleton />;\n  }\n\n  if (!cart || cart.cartBody.items.length === 0) {\n    return (\n      <div className=\"bg-white\">\n        <div className=\"min-h-screen bg-white max-w-6xl mx-auto\">\n          <div className=\"container mx-auto px-4 py-8\">\n\n            <div className=\"flex flex-col items-center justify-center py-20\">\n              <motion.div\n                initial={{ opacity: 0, y: 24 }}\n                animate={{ opacity: 1, y: 0 }}\n                className=\"text-center space-y-6 max-w-md\"\n              >\n                <div className=\"flex justify-center\">\n                  <div className=\"rounded-full bg-gray-100 p-6\">\n                    <ShoppingBag className=\"h-12 w-12 text-hsecondary\" />\n                  </div>\n                </div>\n\n                <div className=\"space-y-2\">\n                  <h2 className=\"text-2xl font-bold text-hsecondary\">\n                    Your cart is empty\n                  </h2>\n                  <p className=\"text-hmuted\">\n                    Start adding products to your cart to see them here.\n                  </p>\n                </div>\n\n                <div className=\"flex flex-wrap gap-3 justify-center\">\n                  <button\n                    type=\"button\"\n                    onClick={() => router.push(buildPath('/shop'))}\n                    className=\"rounded-xl border-2 border-hprimary bg-hsecondary text-white px-6 py-3 text-sm font-medium transition-colors flex items-center justify-center gap-2 hover:opacity-80\"\n                  >\n                    Discover products\n                    <ArrowRight className=\"h-5 w-5\" />\n                  </button>\n                </div>\n\n                <div className=\"mt-8 space-y-3 pt-6 border-t border-gray-200\">\n                  <div className=\"flex items-start gap-3 text-sm text-slate-600\">\n                    <CheckCircle2 className=\"h-5 w-5 text-hsecondary shrink-0 mt-0.5\" />\n                    <span>Secure checkout process</span>\n                  </div>\n                </div>\n              </motion.div>\n            </div>\n          </div>\n        </div>\n\n        {/* Recommended Section - Even when cart is empty */}\n        <RecommendedProductsSection\n          title=\"Recommended for you\"\n          subtitle=\"\"\n          initialLimit={4}\n          className=\"border-t border-gray-100 pt-12 mt-12\"\n        />\n      </div>\n    );\n  }\n\n  const inStockItems = cart.cartBody.items.filter(item => (item.productVariantData.inventoryCount ?? 0) > 0);\n  const outOfStockItems = cart.cartBody.items.filter(item => (item.productVariantData.inventoryCount ?? 0) === 0);\n\n  const subtotal = Math.round(inStockItems.reduce((total, item) => total + item.productVariantData.finalPrice * item.quantity, 0) * 100) / 100;\n  const shipping = 0;\n  const tax = 0;\n  const total = subtotal + shipping + tax;\n  const itemCount = inStockItems.length;\n\n  const handleSubmit = async (e?: React.FormEvent<HTMLFormElement> | React.MouseEvent) => {\n    const quantityIssues = stockIssues.filter(item => {\n      const v = item.productVariantData;\n      const maxQty = typeof v.inventoryCount === 'number' ? v.inventoryCount : 0;\n      return maxQty > 0 && v.inventoryStatus !== ProductVariantPopulatedInventoryStatusEnum.OUTOFSTOCK;\n    });\n\n    if (quantityIssues.length > 0) {\n      setQuantityAdjustItems(quantityIssues);\n      setShowQuantityModal(true);\n      return;\n    }\n\n    router.push(buildPath('/checkout'));\n  };\n\n\n  return (\n    <div className=\"min-h-screen bg-white\">\n      <div className=\"max-w-[1400px] mx-auto px-4 md:px-12\">\n        <div className=\"py-8\">\n          {/* Header */}\n          <div className=\"mb-8 md:mb-12\">\n            <h1 className=\"font-semibold text-hsecondary tracking-[-1px] md:tracking-[-2px] mb-2 text-3xl md:text-4xl\">\n              Shopping Cart\n            </h1>\n            <p className=\"text-[14px] md:text-[16px] text-hmuted\">\n              {itemCount} {itemCount === 1 ? 'item' : 'items'} in your cart\n            </p>\n          </div>\n          <div className=\"grid grid-cols-1 lg:grid-cols-3 gap-8\">\n            {/* Shopping Cart Section */}\n            <motion.section\n              initial={{ opacity: 0, y: 24 }}\n              animate={{ opacity: 1, y: 0 }}\n              className=\"space-y-6 lg:col-span-2\"\n            >\n              <div className=\"space-y-4\">\n                {/* Stock Issues Banner - shows items with quantity issues (not out of stock) */}\n                {stockIssues.filter(item => {\n                  const v = item.productVariantData;\n                  const maxQty = typeof v.inventoryCount === 'number' ? v.inventoryCount : 0;\n                  return maxQty > 0 && v.inventoryStatus !== ProductVariantPopulatedInventoryStatusEnum.OUTOFSTOCK;\n                }).length > 0 && (\n                    <div className=\"border-2 border-amber-300 bg-amber-50 rounded-[24px] overflow-hidden\">\n                      {/* Header */}\n                      <div className=\"flex items-start gap-3 px-6 pt-6 pb-4 border-b border-amber-200\">\n                        <div className=\"w-9 h-9 rounded-full bg-amber-100 flex items-center justify-center shrink-0\">\n                          <AlertCircle className=\"w-5 h-5 text-amber-600\" />\n                        </div>\n                        <div>\n                          <p className=\"font-semibold text-amber-800 text-base leading-tight\">\n                            Some items exceed available quantity\n                          </p>\n                          <p className=\"text-amber-700 text-sm mt-0.5\">\n                            Adjust the quantity or remove items below to proceed to checkout.\n                          </p>\n                        </div>\n                      </div>\n\n                      {/* Item rows */}\n                      <div className=\"px-6 py-4 space-y-3\">\n                        {stockIssues\n                          .filter(item => {\n                            const v = item.productVariantData;\n                            const maxQty = typeof v.inventoryCount === 'number' ? v.inventoryCount : 0;\n                            return maxQty > 0 && v.inventoryStatus !== ProductVariantPopulatedInventoryStatusEnum.OUTOFSTOCK;\n                          })\n                          .map(item => {\n                            const v = item.productVariantData;\n                            const maxQty = typeof v.inventoryCount === 'number' ? v.inventoryCount : 0;\n\n                            return (\n                              <div\n                                key={item.productVariantId}\n                                className=\"flex items-center gap-3 bg-white border border-amber-200 rounded-2xl p-3\"\n                              >\n                                {/* Thumbnail */}\n                                <div className=\"w-12 h-12 rounded-xl overflow-hidden bg-gray-50 shrink-0 border border-amber-100\">\n                                  <Image\n                                    src={v.media?.[0]?.file || PLACEHOLDER_IMAGE_SRC}\n                                    alt={v.name}\n                                    width={48}\n                                    height={48}\n                                    className=\"w-full h-full object-cover\"\n                                  />\n                                </div>\n\n                                {/* Name + availability */}\n                                <div className=\"flex-1 min-w-0\">\n                                  <p className=\"text-sm font-semibold text-gray-900 truncate\">{v.name}</p>\n                                  <p className=\"text-xs font-medium text-amber-600 mt-0.5\">\n                                    Only {maxQty} available — you have {item.quantity}\n                                  </p>\n                                </div>\n\n                                {/* Controls - Only Reduce to button, no decrement */}\n                                <div className=\"flex items-center gap-2 shrink-0\">\n                                  <button\n                                    type=\"button\"\n                                    onClick={() => {\n                                      // Directly reduce to available quantity\n                                      updateQuantity(item.productVariantId, maxQty);\n                                    }}\n                                    disabled={cartIsLoading || item.quantity === maxQty}\n                                    className=\"text-xs font-semibold text-amber-600 border border-amber-200 bg-amber-50 rounded-full px-2.5 py-1.5 hover:bg-amber-100 transition-colors disabled:opacity-50\"\n                                  >\n                                    Reduce to {maxQty}\n                                  </button>\n                                  <button\n                                    type=\"button\"\n                                    onClick={() => removeFromCart(item.productVariantId)}\n                                    disabled={cartIsLoading}\n                                    className=\"text-xs font-semibold text-red-500 border border-red-200 bg-white rounded-full px-2.5 py-1.5 hover:bg-red-50 transition-colors disabled:opacity-50\"\n                                  >\n                                    Remove\n                                  </button>\n                                </div>\n                              </div>\n                            );\n                          })}\n                      </div>\n                    </div>\n                  )}\n\n                <div className=\"space-y-4\">\n                  {inStockItems.length > 0 ? (\n                    inStockItems.map((item: CartItemPopulated) => (\n                      <CartItem key={item.productVariantId} item={item} />\n                    ))\n                  ) : outOfStockItems.length > 0 ? (\n                    <div className=\"bg-hprimary/5 border border-hprimary/20 rounded-[24px] p-6 text-center\">\n                      <p className=\"text-hsecondary font-medium\">All items in your cart are currently out of stock.</p>\n                      <p className=\"text-sm text-hmuted mt-1\">Move them to your wishlist or remove them to continue shopping.</p>\n                    </div>\n                  ) : null}\n                </div>\n\n                {outOfStockItems.length > 0 && (\n                  <div className=\"mt-12 pt-8 border-t border-gray-100\">\n                    <div className=\"flex items-center gap-3 mb-6\">\n                      <h2 className=\"text-xl font-bold text-[#2B4B7C]\">Recently Unavailable</h2>\n                      <span className=\"bg-red-50 text-red-600 text-[11px] font-bold px-2 py-0.5 rounded-full border border-red-100 uppercase tracking-wider\">\n                        {outOfStockItems.length} {outOfStockItems.length === 1 ? 'Item' : 'Items'}\n                      </span>\n                    </div>\n                    <p className=\"text-sm text-hmuted mb-6\">\n                      These items are out of stock and have been removed from your total. You can move them to your wishlist to buy later.\n                    </p>\n                    <div className=\"space-y-4 opacity-75\">\n                      {outOfStockItems.map((item: CartItemPopulated) => (\n                        <OutOfStockCartItem key={item.productVariantId} item={item} />\n                      ))}\n                    </div>\n                  </div>\n                )}\n              </div>\n            </motion.section>\n\n            {/* Order Summary Section */}\n            <motion.aside\n              initial={{ opacity: 0, y: 24 }}\n              animate={{ opacity: 1, y: 0 }}\n              transition={{ delay: 0.1 }}\n              className=\"lg:sticky lg:top-24 h-fit lg:col-span-1\"\n            >\n              <div className=\"bg-hsecondary/[0.03] md:bg-linear-to-br md:from-hsecondary/10 md:to-hsecondary/10 rounded-[24px] p-6 md:p-8 border-2 border-hsecondary/10 md:border-hsecondary/20 lg:sticky lg:top-24\">\n                <h2 className=\"font-semibold text-hsecondary mb-6\">Order Summary</h2>\n\n                <div className=\"space-y-4 mb-6\">\n                  <div className=\"flex items-center justify-between\">\n                    <span className=\"text-[14px] text-hmuted\">Subtotal ({itemCount} {itemCount === 1 ? 'item' : 'items'})</span>\n                    <span className=\"font-semibold text-[14px] text-hsecondary\">{formatPrice(subtotal)}</span>\n                  </div>\n                  <div className=\"flex items-center justify-between text-sm\">\n                    <span className=\"text-gray-600\">Shipping</span>\n                    <span className=\"font-semibold text-green-600\">\n                      Will be calculated at checkout\n                    </span>\n                  </div>\n                  <div className=\"border-t border-gray-200 pt-4 mt-4\">\n                    <div className=\"flex items-center justify-between\">\n                      <span className=\"text-lg font-bold text-hsecondary\">Total</span>\n                      <span className=\"text-2xl font-bold text-hprimary\">{formatPrice(total)}</span>\n                    </div>\n                  </div>\n                </div>\n\n                <div className=\"space-y-3\">\n                  <button\n                    type=\"submit\"\n                    onClick={handleSubmit}\n                    className=\"w-full rounded-full border-2 border-hsecondary bg-hsecondary hover:bg-hsecondary/80 text-white px-4 py-3 text-sm font-medium transition-colors flex items-center justify-center gap-2\"\n                  >\n                    Proceed to Checkout\n                    <ArrowRight className=\"h-5 w-5\" />\n                  </button>\n                  <button\n                    type=\"button\"\n                    onClick={() => router.push(buildPath('/shop'))}\n                    className=\"w-full rounded-full border-2 border-muted bg-white px-4 py-3 text-sm font-medium text-slate-700 hover:bg-gray-50 transition-colors\"\n                  >\n                    Continue Shopping\n                  </button>\n                </div>\n\n                <div className=\"mt-6 space-y-3 pt-6 border-t border-gray-200\">\n                  <div className=\"flex items-start gap-3 text-sm text-slate-600\">\n                    <CheckCircle2 className=\"h-5 w-5 text-hmuted shrink-0 mt-0.5\" />\n                    <span>Secure checkout process</span>\n                  </div>\n                </div>\n              </div>\n\n              {/* <div className=\"rounded-3xl border border-hprimary-100 bg-hprimary-50/70 p-6 text-sm text-hprimary-700 shadow-xs\">\n                <p className=\"font-semibold uppercase tracking-[0.3em]\">Need help?</p>\n                <p className=\"mt-2 leading-relaxed\">\n                  Chat with a pharmacist to optimize your regimen or discuss substitutions before you\n                  check out.\n                </p>\n              </div> */}\n            </motion.aside>\n          </div>\n\n          {/* Recommended Section - Bottom of populated cart */}\n          <RecommendedProductsSection\n            title=\"Recommended for you\"\n            subtitle=\"\"\n            initialLimit={4}\n            className=\" pt-12 mt-12\"\n          />\n        </div>\n      </div>\n\n      {/* Quantity Adjustment Modal */}\n      <Modal\n        isOpen={showQuantityModal}\n        onClose={() => setShowQuantityModal(false)}\n        title=\"Adjust Quantity\"\n        size=\"lg\"\n      >\n        <div className=\"space-y-4\">\n          <p className=\"text-gray-600\">\n            The following items exceed the available quantity. Please adjust the quantity to continue:\n          </p>\n          <div className=\"space-y-3 max-h-[60vh] overflow-y-auto\">\n            {quantityAdjustItems.map(item => {\n              const v = item.productVariantData;\n              const maxQty = typeof v.inventoryCount === 'number' ? v.inventoryCount : 0;\n\n              return (\n                <div\n                  key={item.productVariantId}\n                  className=\"flex items-center gap-4 bg-gray-50 border border-gray-200 rounded-xl p-3\"\n                >\n                  {/* Thumbnail */}\n                  <div className=\"w-14 h-14 rounded-lg overflow-hidden bg-gray-100 shrink-0\">\n                    <Image\n                      src={v.media?.[0]?.file || PLACEHOLDER_IMAGE_SRC}\n                      alt={v.name}\n                      width={56}\n                      height={56}\n                      className=\"w-full h-full object-cover\"\n                    />\n                  </div>\n\n                  {/* Name and availability */}\n                  <div className=\"flex-1 min-w-0\">\n                    <p className=\"text-sm font-semibold text-gray-900 truncate\">{v.name}</p>\n                    <p className=\"text-xs text-amber-600 font-medium mt-0.5\">\n                      Only {maxQty} available — you have {item.quantity}\n                    </p>\n                  </div>\n\n                  {/* Quantity controls - Only Reduce to button, no increment/decrement */}\n                  <div className=\"flex items-center gap-2 shrink-0\">\n                    <button\n                      type=\"button\"\n                      onClick={() => {\n                        // Directly reduce to available quantity\n                        updateQuantity(item.productVariantId, maxQty);\n                      }}\n                      disabled={cartIsLoading || item.quantity === maxQty}\n                      className=\"text-xs font-semibold text-amber-600 border border-amber-200 bg-amber-50 rounded-full px-2.5 py-1.5 hover:bg-amber-100 transition-colors disabled:opacity-50\"\n                    >\n                      Reduce to {maxQty}\n                    </button>\n                  </div>\n                </div>\n              );\n            })}\n          </div>\n          <div className=\"flex justify-end pt-4 border-t border-gray-200\">\n            <button\n              type=\"button\"\n              onClick={() => setShowQuantityModal(false)}\n              className=\"px-6 py-2.5 rounded-full bg-hsecondary text-white font-medium hover:shadow-lg transition-all\"\n            >\n              Done\n            </button>\n          </div>\n        </div>\n      </Modal>\n    </div>\n  );\n}\n","import React, { forwardRef } from 'react';\n\ninterface InputProps extends React.InputHTMLAttributes<HTMLInputElement> {\n  label?: string | React.ReactNode;\n  error?: string;\n  helperText?: string;\n}\n\nexport const Input = forwardRef<HTMLInputElement, InputProps & { rightElement?: React.ReactNode; leftElement?: React.ReactNode }>(\n  ({ label, error, helperText, className = '', rightElement, leftElement, ...props }, ref) => {\n    return (\n      <div className=\"w-full\">\n        {label && (\n          <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n            {label}\n          </label>\n        )}\n        <div className=\"relative\">\n          {leftElement && (\n            <div className=\"absolute inset-y-0 left-0 flex items-center pl-3 pointer-events-none\">\n              {leftElement}\n            </div>\n          )}\n          <input\n            ref={ref}\n            className={`\n              w-full px-4 py-3 rounded-lg border-2 border-[#E5E7EB] transition-all duration-200\n              ${leftElement ? 'pl-10' : ''}\n              ${rightElement ? 'pr-12' : ''}\n              ${error\n                ? 'border-red-500 focus:border-red-600 focus:ring-red-500/20'\n                : 'border-gray-200 focus:border-hprimary-500 focus:ring-hprimary-500/20'\n              }\n              focus:outline-hidden focus:ring-4\n              placeholder:text-gray-400\n              disabled:bg-gray-50 disabled:cursor-not-allowed\n              ${className}\n            `}\n            {...props}\n          />\n          {rightElement && (\n            <div className=\"absolute inset-y-0 right-0 flex items-center pr-3\">\n              {rightElement}\n            </div>\n          )}\n        </div>\n        {error && (\n          <p className=\"mt-2 text-sm text-red-600\">{error}</p>\n        )}\n        {helperText && !error && (\n          <p className=\"mt-2 text-sm text-gray-500\">{helperText}</p>\n        )}\n      </div>\n    );\n  }\n);\n\nInput.displayName = 'Input';\n\n","'use client';\n\nimport { useMemo } from 'react';\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { Address, AddressesApi, CreateAddressDto, UpdateAddressDto } from '@/lib/Apis';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { useAuth } from '@/providers/AuthProvider';\n\ninterface UseAddressesReturn {\n  addresses: Address[];\n  defaultAddress: Address | null;\n  isLoading: boolean;\n  error: Error | null;\n  refresh: () => Promise<void>;\n  addAddress: (payload: CreateAddressDto) => Promise<Address>;\n  updateAddress: (id: string, payload: UpdateAddressDto) => Promise<Address>;\n  removeAddress: (id: string) => Promise<void>;\n  markAsDefault: (id: string) => Promise<Address>;\n}\n\nexport function useAddresses(): UseAddressesReturn {\n  const queryClient = useQueryClient();\n  const { isAuthenticated } = useAuth();\n\n  const { data: addresses = [], isLoading, error, refetch } = useQuery({\n    queryKey: ['addresses'],\n    queryFn: async () => {\n      const response = await new AddressesApi(AXIOS_CONFIG).getMyAddresses();\n      return response.data || [];\n    },\n    staleTime: 5 * 60 * 1000, // 5 minutes\n    enabled: isAuthenticated,\n  });\n\n  const sortedAddresses = useMemo(() => {\n    return [...addresses].sort((a, b) => {\n      if (a.isDefault === b.isDefault) {\n        const dateA = a.updatedAt || '';\n        const dateB = b.updatedAt || '';\n        return dateB.toString().localeCompare(dateA.toString());\n      }\n      return a.isDefault ? -1 : 1;\n    });\n  }, [addresses]);\n\n  const defaultAddress = useMemo(\n    () => sortedAddresses.find((address) => address.isDefault) || null,\n    [sortedAddresses]\n  );\n\n  const addMutation = useMutation({\n    mutationFn: async (payload: CreateAddressDto) => {\n      const response = await new AddressesApi(AXIOS_CONFIG).createAddressForUser(payload);\n      return response.data;\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['addresses'] });\n    },\n  });\n\n  const updateMutation = useMutation({\n    mutationFn: async ({ id, payload }: { id: string; payload: UpdateAddressDto }) => {\n      const response = await new AddressesApi(AXIOS_CONFIG).updateUserAddress(payload, id);\n      return response.data;\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['addresses'] });\n    },\n  });\n\n  const removeMutation = useMutation({\n    mutationFn: async (id: string) => {\n      await new AddressesApi(AXIOS_CONFIG).deleteUserAddress(id);\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['addresses'] });\n    },\n  });\n\n  const markAsDefaultMutation = useMutation({\n    mutationFn: async (id: string) => {\n      const response = await new AddressesApi(AXIOS_CONFIG).updateDefaultAddress(id);\n      return response.data;\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['addresses'] });\n    },\n  });\n\n  const refresh = async () => {\n    await refetch();\n  };\n\n  const addAddress = async (payload: CreateAddressDto) => {\n    return addMutation.mutateAsync(payload);\n  };\n\n  const updateAddress = async (id: string, payload: UpdateAddressDto) => {\n    return updateMutation.mutateAsync({ id, payload });\n  };\n\n  const removeAddress = async (id: string) => {\n    const addressToDelete = addresses.find(a => a.id === id);\n    const wasDefault = addressToDelete?.isDefault;\n    \n    await removeMutation.mutateAsync(id);\n    \n    if (wasDefault && addresses.length > 1) {\n      const remainingAddresses = addresses.filter(a => a.id !== id);\n      if (remainingAddresses.length > 0) {\n        await markAsDefaultMutation.mutateAsync(remainingAddresses[0].id);\n      }\n    }\n  };\n\n  const markAsDefault = async (id: string) => {\n    return markAsDefaultMutation.mutateAsync(id);\n  };\n\n  return {\n    addresses: sortedAddresses,\n    defaultAddress,\n    isLoading,\n    error: error as Error | null,\n    refresh,\n    addAddress,\n    updateAddress,\n    removeAddress,\n    markAsDefault,\n  };\n}\n","'use client';\n\nimport { useMemo } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { StoreCapabilitiesDto, StoresApi } from '@/lib/Apis';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { getCurrentConfig } from '@/lib/api-adapter/config';\n\ninterface UseStoreCapabilitiesReturn {\n    capabilities: StoreCapabilitiesDto | null;\n    isLoading: boolean;\n    error: Error | null;\n    refresh: () => Promise<void>;\n    // Computed convenience properties\n    showCardPayment: boolean;\n    showCashPayment: boolean;\n    showShippoDelivery: boolean;\n    showCustomDelivery: boolean;\n}\n\nexport function useStoreCapabilities(): UseStoreCapabilitiesReturn {\n    const config = getCurrentConfig();\n    const storeId = config?.storeId;\n\n    const { data: capabilities, isLoading, error, refetch } = useQuery({\n        queryKey: ['storeCapabilities', storeId],\n        queryFn: async () => {\n            if (!storeId) {\n                throw new Error('Store ID not configured');\n            }\n            const api = new StoresApi(AXIOS_CONFIG);\n            const response = await api.getStoreCapabilities(storeId);\n            return response.data;\n        },\n        staleTime: 10 * 60 * 1000, // 10 minutes - store capabilities rarely change\n        enabled: !!storeId,\n    });\n\n    const refresh = async () => {\n        await refetch();\n    };\n\n    // Computed convenience properties based on the logic from the API guide\n    const showCardPayment = Boolean(capabilities?.hasStripeKey && capabilities?.cardPaymentEnabled);\n    const showCashPayment = Boolean(capabilities?.cashPaymentEnabled);\n    const showShippoDelivery = Boolean(capabilities?.hasShippoConnected && capabilities?.shippoDeliveryEnabled);\n    const showCustomDelivery = Boolean(capabilities?.customDeliveryEnabled);\n\n    return {\n        capabilities: capabilities || null,\n        isLoading,\n        error: error as Error | null,\n        refresh,\n        showCardPayment,\n        showCashPayment,\n        showShippoDelivery,\n        showCustomDelivery,\n    };\n}\n","import { z } from 'zod';\n\n// ZIP code validation regex - supports:\n// 5 digits (e.g., 10001)\n// 9 digits (e.g., 100016789)\n// 5-4 format (e.g., 10001-6789)\nexport const zipRegex = /^(\\d{5}|\\d{9}|\\d{5}-\\d{4})$/;\n\n// Phone validation regex - requires international calling code:\n// +41 123 4567890, +1 555-123-4567, +44 20 7946 0958\n// Must start with + followed by country code and at least 10 digits\nexport const phoneRegex = /^\\+[0-9\\s\\-().]{9,20}$/;\n\nexport const addressSchema = z.object({\n  name: z.string().min(2, 'Full name is required').max(100, 'Full name must be at most 100 characters'),\n  street1: z.string().min(5, 'Address is required').max(200, 'Address must be at most 200 characters'),\n  street2: z.string().max(200, 'Address must be at most 200 characters').optional(),\n  city: z.string().min(2, 'City is required').max(100, 'City must be at most 100 characters'),\n  state: z.string().min(2, 'State is required').max(100, 'State must be at most 100 characters'),\n  zip: z.string()\n    .min(1, 'ZIP code is required')\n    .max(20, 'ZIP code must be at most 20 characters')\n    .refine(val => zipRegex.test(val), {\n      message: 'Please enter a valid ZIP code (e.g., 10001 or 10001-6789)',\n    }),\n  country: z.string().min(2, 'Country is required').max(100, 'Country must be at most 100 characters'),\n  phone: z.string()\n    .min(1, 'Phone number is required')\n    .refine(val => phoneRegex.test(val), {\n      message: 'Invalid phone number. Include international calling code (e.g., +1 or +41)',\n    }),\n});\n\nexport type AddressFormData = z.infer<typeof addressSchema>;","export const US_STATES = [\n  { abbr: 'AL', name: 'Alabama' },\n  { abbr: 'AK', name: 'Alaska' },\n  { abbr: 'AZ', name: 'Arizona' },\n  { abbr: 'AR', name: 'Arkansas' },\n  { abbr: 'CA', name: 'California' },\n  { abbr: 'CO', name: 'Colorado' },\n  { abbr: 'CT', name: 'Connecticut' },\n  { abbr: 'DE', name: 'Delaware' },\n  { abbr: 'FL', name: 'Florida' },\n  { abbr: 'GA', name: 'Georgia' },\n  { abbr: 'HI', name: 'Hawaii' },\n  { abbr: 'ID', name: 'Idaho' },\n  { abbr: 'IL', name: 'Illinois' },\n  { abbr: 'IN', name: 'Indiana' },\n  { abbr: 'IA', name: 'Iowa' },\n  { abbr: 'KS', name: 'Kansas' },\n  { abbr: 'KY', name: 'Kentucky' },\n  { abbr: 'LA', name: 'Louisiana' },\n  { abbr: 'ME', name: 'Maine' },\n  { abbr: 'MD', name: 'Maryland' },\n  { abbr: 'MA', name: 'Massachusetts' },\n  { abbr: 'MI', name: 'Michigan' },\n  { abbr: 'MN', name: 'Minnesota' },\n  { abbr: 'MS', name: 'Mississippi' },\n  { abbr: 'MO', name: 'Missouri' },\n  { abbr: 'MT', name: 'Montana' },\n  { abbr: 'NE', name: 'Nebraska' },\n  { abbr: 'NV', name: 'Nevada' },\n  { abbr: 'NH', name: 'New Hampshire' },\n  { abbr: 'NJ', name: 'New Jersey' },\n  { abbr: 'NM', name: 'New Mexico' },\n  { abbr: 'NY', name: 'New York' },\n  { abbr: 'NC', name: 'North Carolina' },\n  { abbr: 'ND', name: 'North Dakota' },\n  { abbr: 'OH', name: 'Ohio' },\n  { abbr: 'OK', name: 'Oklahoma' },\n  { abbr: 'OR', name: 'Oregon' },\n  { abbr: 'PA', name: 'Pennsylvania' },\n  { abbr: 'RI', name: 'Rhode Island' },\n  { abbr: 'SC', name: 'South Carolina' },\n  { abbr: 'SD', name: 'South Dakota' },\n  { abbr: 'TN', name: 'Tennessee' },\n  { abbr: 'TX', name: 'Texas' },\n  { abbr: 'UT', name: 'Utah' },\n  { abbr: 'VT', name: 'Vermont' },\n  { abbr: 'VA', name: 'Virginia' },\n  { abbr: 'WA', name: 'Washington' },\n  { abbr: 'WV', name: 'West Virginia' },\n  { abbr: 'WI', name: 'Wisconsin' },\n  { abbr: 'WY', name: 'Wyoming' },\n  { abbr: 'DC', name: 'District of Columbia' },\n];\n","import React, { useState, useEffect } from 'react';\nimport { useForm, Controller } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { AlertCircle } from 'lucide-react';\nimport { Button } from '@/components/ui/Button';\nimport { Input } from '@/components/ui/Input';\nimport { Modal } from '@/components/ui/Modal';\nimport { addressSchema, type AddressFormData } from '@/lib/validations/address';\nimport { AddressesApi } from '@/lib/Apis/apis/addresses-api';\nimport { Address } from '@/lib/Apis';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { useNotification } from '@/providers/NotificationProvider';\nimport { formatPhoneNumber } from '@/lib/utils/format';\nimport { US_STATES } from '@/lib/constants/us-states';\n\ninterface AddressFormModalProps {\n  isOpen: boolean;\n  onClose: () => void;\n  onAddressAdded?: (address: any) => void;\n  onAddressUpdated?: (address: any) => void;\n  initialAddress?: Address | null;\n}\n\nexport function AddressFormModal({ isOpen, onClose, onAddressAdded, onAddressUpdated, initialAddress }: AddressFormModalProps) {\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [submitError, setSubmitError] = useState<string | null>(null);\n  const notification = useNotification();\n\n  const {\n    register,\n    handleSubmit,\n    control,\n    reset,\n    formState: { errors }\n  } = useForm<AddressFormData>({\n    resolver: zodResolver(addressSchema),\n    defaultValues: {\n      name: initialAddress?.name || '',\n      phone: initialAddress?.phone || '',\n      street1: initialAddress?.street1 || '',\n      street2: initialAddress?.street2 || '',\n      city: initialAddress?.city || '',\n      state: initialAddress?.state || '',\n      zip: initialAddress?.zip || '',\n      country: initialAddress?.country || 'United States',\n    }\n  });\n\n  // Reset form when switching between create/edit\n  useEffect(() => {\n    reset({\n      name: initialAddress?.name || '',\n      phone: initialAddress?.phone || '',\n      street1: initialAddress?.street1 || '',\n      street2: initialAddress?.street2 || '',\n      city: initialAddress?.city || '',\n      state: initialAddress?.state || '',\n      zip: initialAddress?.zip || '',\n      country: initialAddress?.country || 'United States',\n    });\n  }, [initialAddress, reset]);\n\n  const onSubmit = async (data: AddressFormData) => {\n    setIsSubmitting(true);\n    setSubmitError(null);\n    try {\n      const api = new AddressesApi(AXIOS_CONFIG);\n      if (initialAddress?.id) {\n        const response = await api.updateUserAddress({\n          name: data.name,\n          street1: data.street1,\n          street2: data.street2,\n          city: data.city,\n          state: data.state,\n          zip: data.zip,\n          country: data.country,\n          phone: data.phone?.replace(/[^\\d+]/g, ''), // Strip formatting chars except + for backend\n        }, initialAddress.id);\n        notification.success(\n          'Address updated',\n          'Your address has been updated successfully.'\n        );\n        reset();\n        onClose();\n        if (onAddressUpdated) onAddressUpdated(response.data);\n      } else {\n        const response = await api.createAddressForUser({\n          name: data.name,\n          street1: data.street1,\n          street2: data.street2,\n          city: data.city,\n          state: data.state,\n          zip: data.zip,\n          country: data.country,\n          phone: data.phone?.replace(/[^\\d+]/g, ''), // Strip formatting chars except + for backend\n        });\n        if (response.status === 201) {\n          notification.success(\n            'Address added',\n            'Your new address has been saved to your account.'\n          );\n          reset();\n          onClose();\n          if (onAddressAdded) onAddressAdded(response.data);\n        } else {\n          setSubmitError('We could not save this address. Please try again.');\n        }\n      }\n    } catch (error: any) {\n      setSubmitError(error?.response?.data?.message || 'Something went wrong while saving your address. Please try again.');\n    } finally {\n      setIsSubmitting(false);\n    }\n  };\n\n  return (\n    <Modal\n      isOpen={isOpen}\n      onClose={onClose}\n      title={initialAddress ? 'Edit Address' : 'Add New Address'}\n      size=\"lg\"\n    >\n      <form onSubmit={handleSubmit(onSubmit)} className=\"space-y-6\">\n        <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n          <Input\n            label={<><span className=\"text-gray-700\">Full name</span><span className=\"text-red-500 px-1\">*</span></>}\n            placeholder=\"John Doe\"\n            {...register('name')}\n            maxLength={100}\n            error={errors.name?.message}\n          />\n          <Controller\n            name=\"phone\"\n            control={control}\n            render={({ field: { onChange, value } }) => (\n              <Input\n                label={<><span className=\"text-gray-700\">Phone number</span><span className=\"text-red-500 px-1\">*</span></>}\n                placeholder=\"+1 415 555 0100\"\n                value={value}\n                onChange={(e) => {\n                  const formatted = formatPhoneNumber(e.target.value);\n                  onChange(formatted);\n                }}\n                error={errors.phone?.message}\n              />\n            )}\n          />\n          <div className=\"md:col-span-2\">\n            <Input\n              label={<><span className=\"text-gray-700\">Address line 1</span><span className=\"text-red-500 px-1\">*</span></>}\n              placeholder=\"123 Main St\"\n              {...register('street1')}\n              maxLength={200}\n              error={errors.street1?.message}\n            />\n          </div>\n          <div className=\"md:col-span-2\">\n            <Input\n              label=\"Address line 2 (optional)\"\n              placeholder=\"Apt 4B\"\n              {...register('street2')}\n              maxLength={200}\n            />\n          </div>\n          <Input\n            label={<><span className=\"text-gray-700\">City</span><span className=\"text-red-500 px-1\">*</span></>}\n            placeholder=\"New York\"\n            {...register('city')}\n            maxLength={100}\n            error={errors.city?.message}\n          />\n          <div>\n            <label className=\"block text-sm font-medium text-gray-700 mb-2\">\n              <span className=\"text-gray-700\">State</span><span className=\"text-red-500 px-1\">*</span>\n            </label>\n            <select\n              {...register('state')}\n              className={`w-full px-4 py-3 rounded-lg border-2 transition-all duration-200 focus:outline-hidden focus:ring-4 text-sm bg-white ${errors.state ? 'border-red-500 focus:border-red-600 focus:ring-red-500/20' : 'border-gray-200 focus:border-hprimary-500 focus:ring-hprimary-500/20'}`}\n            >\n              <option value=\"\">Select state</option>\n              {US_STATES.map(s => (\n                <option key={s.abbr} value={s.abbr}>{s.name}</option>\n              ))}\n            </select>\n            {errors.state && <p className=\"mt-2 text-sm text-red-600\">{errors.state.message}</p>}\n          </div>\n          <Input\n            label={<><span className=\"text-gray-700\">ZIP code</span><span className=\"text-red-500 px-1\">*</span></>}\n            placeholder=\"10001\"\n            {...register('zip')}\n            maxLength={20}\n            error={errors.zip?.message}\n          />\n          <Input\n            label={<><span className=\"text-gray-700\">Country</span></>}\n            {...register('country')}\n            disabled\n            className=\"bg-gray-50 text-gray-500 cursor-not-allowed\"\n          />\n        </div>\n        {submitError && (\n          <div className=\"flex items-start gap-3 p-4 bg-red-50 border border-red-200 rounded-xl\">\n            <AlertCircle className=\"w-4 h-4 text-red-500 px-1 shrink-0 mt-0.5\" />\n            <p className=\"text-sm text-red-700\">{submitError}</p>\n          </div>\n        )}\n        <div className=\"flex justify-end gap-4\">\n          <button\n            type=\"button\"\n            onClick={onClose}\n            className='flex flex-row items-center gap-2 px-6 py-2 border border-slate-200 rounded-xl text-slate-700 hover:opacity-80 transition-colors text-hsecondary text-sm'\n          >\n            Cancel\n          </button>\n          <button type=\"submit\" disabled={isSubmitting} className='flex flex-row items-center gap-2 px-6 py-2 border border-slate-200 rounded-xl text-slate-700 hover:opacity-80 transition-colors bg-hsecondary text-white text-sm'>\n            {isSubmitting ? initialAddress?.id ? 'Updating Address...' : 'Adding Address...' : initialAddress?.id ? 'Update Address' : 'Add Address'}\n          </button>\n        </div>\n      </form>\n    </Modal>\n  );\n}\n","'use client';\n\nimport React from 'react';\nimport { motion } from 'framer-motion';\nimport { Check, Truck, CreditCard, ClipboardCheck } from 'lucide-react';\n\nexport type CheckoutStep = 'shipping' | 'payment' | 'review';\n\ninterface StepConfig {\n  id: CheckoutStep;\n  label: string;\n  icon: React.ReactNode;\n}\n\nconst STEPS: StepConfig[] = [\n  { id: 'shipping', label: 'Shipping', icon: <Truck className=\"w-5 h-5\" /> },\n  { id: 'payment', label: 'Payment', icon: <CreditCard className=\"w-5 h-5\" /> },\n  { id: 'review', label: 'Review', icon: <ClipboardCheck className=\"w-5 h-5\" /> },\n];\n\ninterface CheckoutStepperProps {\n  currentStep: CheckoutStep;\n  onStepClick?: (step: CheckoutStep) => void;\n  completedSteps?: CheckoutStep[];\n}\n\nexport function CheckoutStepper({\n  currentStep,\n  onStepClick,\n  completedSteps = []\n}: CheckoutStepperProps) {\n  const currentIndex = STEPS.findIndex(s => s.id === currentStep);\n\n  const isStepCompleted = (stepId: CheckoutStep) => completedSteps.includes(stepId);\n\n  const isStepAccessible = (stepId: CheckoutStep) => {\n    const stepIndex = STEPS.findIndex(s => s.id === stepId);\n    return stepIndex <= currentIndex || isStepCompleted(stepId);\n  };\n\n  return (\n    <div className=\"w-full\">\n      <div className=\"flex items-center justify-between relative\">\n        {STEPS.map((step, index) => {\n          const isActive = step.id === currentStep;\n          const isCompleted = isStepCompleted(step.id);\n          const isAccessible = isStepAccessible(step.id);\n\n          return (\n            <React.Fragment key={step.id}>\n              <div className=\"flex flex-col items-center relative\">\n                <motion.button\n                  type=\"button\"\n                  onClick={() => isAccessible && onStepClick?.(step.id)}\n                  disabled={!isAccessible}\n                  className={`\n                    relative flex items-center justify-center w-12 h-12 rounded-full \n                    border-2 transition-all duration-300\n                    ${isActive\n                      ? 'border-hsecondary-500 bg-hsecondary-500 text-white shadow-lg'\n                      : isCompleted\n                        ? 'border-hsecondary-500 bg-hsecondary-500 text-white'\n                        : isAccessible\n                          ? 'border-gray-200 bg-white text-hsecondary-500 hover:border-hsecondary-500/50'\n                          : 'border-gray-200 bg-gray-50 text-gray-400 cursor-not-allowed'\n                    }\n                  `}\n                  whileHover={isAccessible ? { scale: 1.05 } : {}}\n                  whileTap={isAccessible ? { scale: 0.95 } : {}}\n                  initial={false}\n                  animate={{\n                    scale: isActive ? 1.1 : 1,\n                  }}\n                >\n                  {isCompleted ? (\n                    <motion.div\n                      initial={{ scale: 0 }}\n                      animate={{ scale: 1 }}\n                      transition={{ type: 'spring', stiffness: 500, damping: 30 }}\n                    >\n                      <Check className=\"w-5 h-5\" />\n                    </motion.div>\n                  ) : (\n                    step.icon\n                  )}\n\n                  {isActive && (\n                    <motion.div\n                      layoutId=\"activeStepRing\"\n                      className=\"absolute inset-0 rounded-full border-2 border-hsecondary-500/30\"\n                      initial={false}\n                      transition={{ type: 'spring', stiffness: 500, damping: 30 }}\n                      style={{ margin: -4 }}\n                    />\n                  )}\n                </motion.button>\n\n                <motion.span\n                  className={`\n                    mt-2 text-xs font-medium transition-colors duration-300\n                    ${isActive\n                      ? 'text-hsecondary-500'\n                      : isCompleted\n                        ? 'text-hsecondary-500'\n                        : 'text-gray-500'\n                    }\n                  `}\n                  animate={{ opacity: 1 }}\n                >\n                  {step.label}\n                </motion.span>\n              </div>\n\n              {index < STEPS.length - 1 && (\n                <div className=\"flex-1 mx-2 sm:mx-4 relative\">\n                  <div className=\"h-0.5 bg-gray-100 rounded-full w-full\">\n                    <motion.div\n                      className=\"h-full bg-hsecondary-500 rounded-full\"\n                      initial={{ width: '0%' }}\n                      animate={{\n                        width: index < currentIndex || isCompleted ? '100%' : '0%'\n                      }}\n                      transition={{ duration: 0.5, ease: 'easeInOut' }}\n                    />\n                  </div>\n                </div>\n              )}\n            </React.Fragment>\n          );\n        })}\n      </div>\n    </div>\n  );\n}\n\nexport { STEPS };\n","import { z } from 'zod';\n\nexport const couponCodeSchema = z.object({\n  code: z\n    .string()\n    .min(2, 'Coupon code must be at least 2 characters')\n    .max(50, 'Coupon code must not exceed 50 characters')\n    .toUpperCase(),\n});\n\nexport type CouponCodeFormData = z.infer<typeof couponCodeSchema>;\n","'use client';\n\nimport { useDiscountsContext } from '@/providers/DiscountProvider';\n\nexport function useDiscounts() {\n  return useDiscountsContext();\n}\n","'use client';\n\nimport React, { useState, useRef, useCallback } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { motion } from 'framer-motion';\nimport { Loader2, X, Check, Gift, Tag, AlertCircle } from 'lucide-react';\n\nimport { Button } from '@/components/ui/Button';\nimport { Input } from '@/components/ui/Input';\nimport { couponCodeSchema, type CouponCodeFormData } from '@/lib/validations/discount';\nimport { useDiscounts } from '@/hooks/useDiscounts';\nimport { formatDiscountDisplay } from '@/lib/utils/discount';\nimport { CartItemPopulated } from '@/lib/Apis/models';\n\ninterface CouponCodeInputProps {\n  onApplyCoupon?: (code: string) => void;\n  onRemoveCoupon?: () => void;\n  userId?: string;\n  cartItems?: CartItemPopulated[];\n  className?: string;\n}\n\nexport function CouponCodeInput({\n  onApplyCoupon,\n  onRemoveCoupon,\n  userId,\n  cartItems,\n  className = '',\n}: CouponCodeInputProps) {\n  const {\n    appliedCoupon,\n    couponError,\n    isValidatingCoupon,\n    validateAndApplyCoupon,\n    removeCoupon,\n  } = useDiscounts();\n\n  const [localError, setLocalError] = useState<string | null>(null);\n  const [isFocused, setIsFocused] = useState(false);\n  const inputRef = useRef<HTMLInputElement>(null);\n\n  const {\n    register,\n    handleSubmit,\n    reset,\n    watch,\n    setValue,\n    formState: { errors, isSubmitting },\n  } = useForm<CouponCodeFormData>({\n    resolver: zodResolver(couponCodeSchema),\n  });\n\n  const couponCodeValue = watch('code');\n  const errorMessage =\n    errors.code?.message || localError || couponError || null;\n\n  const triggerShake = () => {\n    if (!inputRef.current) return;\n    inputRef.current.classList.add('animate-shake');\n    setTimeout(() => {\n      inputRef.current?.classList.remove('animate-shake');\n    }, 400);\n  };\n\n  const onSubmit = useCallback(\n    async (data: CouponCodeFormData) => {\n      setLocalError(null);\n      const result = await validateAndApplyCoupon(data.code, userId, cartItems);\n\n      if (!result.success) {\n        setLocalError(result.error || 'Invalid coupon code');\n        triggerShake();\n        return;\n      }\n\n      reset();\n      onApplyCoupon?.(data.code);\n      inputRef.current?.blur();\n    },\n    [onApplyCoupon, reset, userId, validateAndApplyCoupon]\n  );\n\n  const handleRemove = () => {\n    removeCoupon();\n    onRemoveCoupon?.();\n    reset();\n    setLocalError(null);\n  };\n\n\n  if (appliedCoupon) {\n    return (\n      <div\n        className={`relative rounded-xl border border-emerald-200 bg-gradient-to-r from-emerald-50 to-green-50 p-4 shadow-sm ${className}`}\n      >\n        <div className=\"flex items-center justify-between\">\n          <div className=\"flex items-center gap-3\">\n            <div className=\"flex h-10 w-10 items-center justify-center rounded-full bg-emerald-100\">\n              <Check className=\"h-5 w-5 text-emerald-600\" />\n            </div>\n            <div>\n              <p className=\"text-sm font-semibold text-emerald-900\">\n                Coupon Applied\n              </p>\n              <p className=\"text-sm font-medium text-emerald-700\">\n                {appliedCoupon.code} • {formatDiscountDisplay(appliedCoupon)}\n              </p>\n            </div>\n          </div>\n\n          <button\n            onClick={handleRemove}\n            aria-label=\"Remove coupon\"\n            className=\"group flex h-8 w-8 items-center justify-center rounded-lg border border-emerald-200 bg-white transition hover:border-red-300 hover:bg-red-50\"\n          >\n            <X className=\"h-4 w-4 text-emerald-600 group-hover:text-red-600\" />\n          </button>\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className={`space-y-4 ${className}`}>\n      <div className=\"flex items-center gap-2\">\n        <Gift className=\"h-5 w-5 text-slate-500\" />\n        <label\n          htmlFor=\"coupon-code\"\n          className=\"text-sm font-semibold text-slate-700\"\n        >\n          Have a coupon code?\n        </label>\n      </div>\n\n      <div className=\"flex gap-3\">\n        <div className=\"relative flex-1\">\n          <div className=\"pointer-events-none absolute inset-y-0 left-0 flex items-center pl-4\">\n            <Tag\n              className={`h-5 w-5 transition-colors ${isFocused ? 'text-slate-400' : 'text-slate-400'\n                }`}\n            />\n          </div>\n\n          <Input\n            id=\"coupon-code\"\n            {...register('code', {\n              onChange: (e: React.ChangeEvent<HTMLInputElement>) => {\n                const upperCaseValue = e.target.value.toUpperCase();\n                setValue('code', upperCaseValue);\n              },\n            })}\n            placeholder=\"Enter code (e.g. SAVE10)\"\n            maxLength={50}\n            disabled={isValidatingCoupon || isSubmitting}\n            aria-invalid={!!errorMessage}\n            className={`pl-4 h-11 rounded-lg transition-all shadow-sm ${errorMessage\n              ? 'border-red-400 bg-red-50 focus:border-red-500 focus:ring-red-500/20'\n              : 'border-slate-200 bg-white hover:border-slate-300'\n              }`}\n            onFocus={() => setIsFocused(true)}\n            onBlur={() => setIsFocused(false)}\n          />\n        </div>\n\n        <motion.button\n          whileHover={{ scale: 1.02, backgroundColor: '#05c47e' }}\n          whileTap={{ scale: 0.98 }}\n          type=\"button\"\n          onClick={handleSubmit(onSubmit)}\n          disabled={!couponCodeValue || isValidatingCoupon || isSubmitting}\n          className={`h-11 px-5 rounded-lg disabled:bg-slate-300 disabled:text-white text-white transition-all duration-200 ${isValidatingCoupon ? 'opacity-50' : ''}`}\n          style={{\n            backgroundColor: '#04AA6D',\n          }}\n        >\n          {isValidatingCoupon ? (\n            <>\n              <div className='flex items-center gap-2'>\n                <Loader2 className=\"mr-2 h-4 w-4 animate-spin\" />\n                Checking\n              </div>\n            </>\n          ) : (\n            'Apply'\n          )}\n        </motion.button>\n      </div>\n      {/* </div> */}\n\n      {errorMessage && (\n        <div\n          role=\"alert\"\n          className=\"flex items-start gap-2 rounded-lg border border-red-200 bg-red-50 p-3\"\n        >\n          <AlertCircle className=\"mt-0.5 h-4 w-4 shrink-0 text-red-500\" />\n          <p className=\"text-sm text-red-700\">{errorMessage}</p>\n        </div>\n      )}\n    </div>\n  );\n}\n","'use client';\n\nimport React from 'react';\nimport { Modal } from './Modal';\nimport { Button } from './Button';\nimport { AlertTriangle } from 'lucide-react';\n\ninterface ConfirmModalProps {\n    isOpen: boolean;\n    onClose: () => void;\n    onConfirm: () => void;\n    title: string;\n    message: string;\n    confirmText?: string;\n    cancelText?: string;\n    variant?: 'danger' | 'warning' | 'info';\n    isLoading?: boolean;\n}\n\nexport function ConfirmModal({\n    isOpen,\n    onClose,\n    onConfirm,\n    title,\n    message,\n    confirmText = 'Confirm',\n    cancelText = 'Cancel',\n    variant = 'danger',\n    isLoading = false,\n}: ConfirmModalProps) {\n    const handleConfirm = () => {\n        onConfirm();\n    };\n\n    const variantStyles = {\n        danger: {\n            icon: 'text-red-600 bg-red-100',\n            button: 'secondary' as const,\n        },\n        warning: {\n            icon: 'text-amber-600 bg-amber-100',\n            button: 'primary' as const,\n        },\n        info: {\n            icon: 'text-hsecondary bg-blue-100',\n            button: 'primary' as const,\n        },\n    };\n\n    const style = variantStyles[variant];\n\n    return (\n        <Modal isOpen={isOpen} onClose={onClose} size=\"sm\">\n            <div className=\"flex flex-col items-center text-center\">\n                {/* Icon */}\n                <div className={`w-12 h-12 rounded-full ${style.icon} flex items-center justify-center mb-4`}>\n                    <AlertTriangle className=\"w-6 h-6\" />\n                </div>\n\n                {/* Title */}\n                <h3 className=\"text-xl font-semibold text-hsecondary mb-2\">{title}</h3>\n\n                {/* Message */}\n                <p className=\"text-hmuted mb-6\">{message}</p>\n\n                {/* Actions */}\n                <div className=\"flex gap-3 w-full justify-center\">\n                    <button\n                        className='px-6 py-2 border border-slate-200 rounded-full text-slate-700 hover:bg-slate-100 transition-colors'\n                        onClick={onClose}\n                    >\n                        {cancelText}\n                    </button>\n                    <button\n                        className='px-6 py-2 border border-red-600 rounded-full text-red-600 hover:bg-red-100 transition-colors bg-red-50'\n                        onClick={handleConfirm}\n                    >\n                        {confirmText}\n                    </button>\n                </div>\n            </div>\n        </Modal>\n    );\n}\n","'use client';\n\nimport { PLACEHOLDER_IMAGE_SRC } from '@/lib/constants/assets';\n\nimport React, { useState, useEffect, useMemo, useRef, forwardRef, useImperativeHandle } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { z } from 'zod';\nimport {\n  CreditCard,\n  Lock,\n  MapPin,\n  PackageCheck,\n  Plus,\n  ShieldCheck,\n  Truck,\n  Check,\n  AlertCircle,\n  ArrowLeft,\n  ArrowRight,\n  ClipboardCheck,\n} from 'lucide-react';\nimport { Button } from '@/components/ui/Button';\nimport { Input } from '@/components/ui/Input';\nimport { useCart } from '@/providers/CartProvider';\nimport { useStore } from '@/context/StoreContext';\nimport { useAuth } from '@/providers/AuthProvider';\nimport { OrdersApi } from '@/lib/Apis/apis/orders-api';\nimport { ShippingApi } from '@/lib/Apis/apis/shipping-api';\nimport { ProductVariantPopulatedInventoryStatusEnum, GuestAddressDto } from '@/lib/Apis/models';\nimport { useAddresses } from '@/hooks/useAddresses';\nimport { useStoreCapabilities } from '@/hooks/useStoreCapabilities';\nimport { formatPrice, formatPhoneNumber } from '@/lib/utils/format';\nimport { calculateDiscountForCartItems, isProductEligibleForDiscount } from '@/lib/utils/discount';\nimport { useRouter } from 'next/navigation';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { Card } from '@/components/ui/Card';\nimport { AddressFormModal } from '@/components/AddressFormModal';\nimport { Edit3, Trash2, MoreVertical, Star, Loader2 } from 'lucide-react';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { CheckoutStepper, CheckoutStep } from '@/components/ui/CheckoutStepper';\n\nimport { addressSchema } from '@/lib/validations/address';\nimport { US_STATES } from '@/lib/constants/us-states';\nimport Image from 'next/image';\nimport { useNotification } from '@/providers/NotificationProvider';\nimport { CouponCodeInput } from '@/components/CouponCodeInput';\nimport { useDiscounts } from '@/hooks/useDiscounts';\nimport { ConfirmModal } from '@/components/ui/ConfirmModal';\nimport { Modal } from '@/components/ui/Modal';\nimport { useProduct } from '@/hooks/useProducts';\nimport { loadStripe } from '@stripe/stripe-js';\nimport { Elements, CardNumberElement, CardExpiryElement, CardCvcElement, useStripe, useElements } from '@stripe/react-stripe-js';\n\nfunction CheckoutItem({ item, isDiscounted }: { item: any; isDiscounted?: boolean }) {\n  // Fallback Logic:\n  // If the backend doesn't populate 'product' on the cart item, we can try to find a productId\n  // and fetch the product details to get the media.\n  const productId =\n    item.productId ||\n    item.product?._id ||\n    item.product?.id ||\n    item.productVariantData?.productId ||\n    item.productVariantData?.product?._id ||\n    item.productVariantData?.product?.id;\n\n  const { product } = useProduct(productId);\n\n  return (\n    <div className=\"flex gap-3\">\n      <div className=\"w-16 h-16 rounded-xl overflow-hidden bg-white shrink-0\">\n        <Image\n          src={item.productVariantData?.media?.[0]?.file || item.product?.media?.[0]?.file || product?.media?.[0]?.file || PLACEHOLDER_IMAGE_SRC}\n          alt={item.productVariantData?.name}\n          className=\"w-full h-full object-cover\"\n          height={200}\n          width={200}\n        />\n      </div>\n      <div className=\"flex-1 min-w-0\">\n        <p className=\"font-medium text-[12px] text-[#2B4B7C] mb-0.5\">\n          {item?.product?.name || product?.name || item?.productVariantData?.name}\n        </p>\n        {(item?.product?.name || product?.name) && (\n          <p className=\"text-[11px] text-[#676c80] mb-0.5\">\n            {item?.productVariantData?.name}\n          </p>\n        )}\n        <p className=\"text-[11px] text-[#676c80]\">\n          {item?.productVariantData?.brand} • Qty: {item.quantity}\n        </p>\n        <div className=\"flex items-center gap-2 mt-1\">\n          <p className=\"font-semibold text-[12px] text-hsecondary\">\n            {formatPrice(item.productVariantData.finalPrice * item.quantity)}\n          </p>\n          {isDiscounted && (\n            <span className=\"text-[10px] font-semibold text-emerald-600 bg-emerald-50 border border-emerald-200 rounded-full px-2 py-0.5 leading-none\">\n              Discounted\n            </span>\n          )}\n        </div>\n      </div>\n    </div>\n  );\n}\n\nconst relaxedAddressSchema = z.object({\n  name: z.string().optional(),\n  street1: z.string().optional(),\n  street2: z.string().optional(),\n  city: z.string().optional(),\n  state: z.string().optional(),\n  zip: z.string().optional(),\n  country: z.string().optional(),\n  phone: z.string().optional(),\n});\n\nconst checkoutSchema = z.object({\n  shipping: relaxedAddressSchema,\n  billing: relaxedAddressSchema,\n  sameAsShipping: z.boolean().default(true),\n});\n\ntype CheckoutFormData = z.infer<typeof checkoutSchema>;\n\n\n\nconst PAYMENT_METHODS_CONFIG = [\n  {\n    id: 'Card',\n    label: 'Card',\n    value: 'Card',\n    icon: <CreditCard className=\"w-5 h-5\" />,\n    description: 'Pay securely with your credit or debit card',\n    className: 'border-blue-500 hover:bg-blue-50',\n    activeClass: 'bg-blue-50 border-blue-500 text-blue-700',\n    requiresStripe: true,\n  },\n  {\n    id: 'Cash',\n    label: 'Cash',\n    value: 'Cash',\n    icon: <PackageCheck className=\"w-5 h-5\" />,\n    description: 'Pay with cash on delivery or at pickup',\n    className: 'border-amber-500 hover:bg-amber-50',\n    activeClass: 'bg-amber-50 border-amber-500 text-amber-700',\n    requiresStripe: false,\n  },\n];\n\nconst SHIPPO_DELIVERY_NAME = 'Shipping Delivery';\nconst SHIPPING_ALTERNATIVE_MESSAGE = 'Please use Shipping instead of Local Delivery to continue checkout.';\n\ninterface CardSectionHandle {\n  createPaymentMethod: () => Promise<{ id: string } | { error: string }>;\n}\n\nconst CardSection = forwardRef<CardSectionHandle, {\n  onCardChange: (complete: boolean, errorMessage?: string) => void;\n}>(function CardSection({ onCardChange }, ref) {\n  const stripe = useStripe();\n  const elements = useElements();\n\n  const [numberComplete, setNumberComplete] = useState(false);\n  const [expiryComplete, setExpiryComplete] = useState(false);\n  const [cvcComplete, setCvcComplete] = useState(false);\n  const [cardErrorMessage, setCardErrorMessage] = useState<string | undefined>(undefined);\n\n  // Report combined completeness from a single effect rather than inline in each\n  // element's onChange. Browser autofill fills all three Stripe fields and fires\n  // their onChange events before React re-renders, so an inline handler reading\n  // the sibling fields' state would see stale `false` values and never mark the\n  // card complete — leaving \"Preview order\" greyed out until the user manually\n  // retypes a field. Deriving from state here always sees the latest values.\n  useEffect(() => {\n    onCardChange(numberComplete && expiryComplete && cvcComplete, cardErrorMessage);\n  }, [numberComplete, expiryComplete, cvcComplete, cardErrorMessage, onCardChange]);\n\n  const elementStyle = {\n    style: {\n      base: {\n        fontSize: '16px',\n        color: '#2B4B7C',\n        fontFamily: 'inherit',\n        '::placeholder': { color: '#9ca3af' },\n      },\n      invalid: { color: '#ef4444' },\n    },\n  };\n\n  useImperativeHandle(ref, () => ({\n    createPaymentMethod: async () => {\n      if (!stripe || !elements) {\n        return { error: 'Payment processing is not ready. Please try again.' };\n      }\n      const cardNumberElement = elements.getElement(CardNumberElement);\n      if (!cardNumberElement) {\n        return { error: 'Card element not found. Please try again.' };\n      }\n      const { paymentMethod, error } = await stripe.createPaymentMethod({\n        type: 'card',\n        card: cardNumberElement,\n      });\n      if (error) {\n        return { error: error.message || 'Card validation failed.' };\n      }\n      return { id: paymentMethod!.id };\n    },\n  }));\n\n  return (\n    <div className=\"space-y-4\">\n      <div className=\"space-y-1.5\">\n        <label className=\"text-sm font-medium text-gray-600\">Card Number</label>\n        <div className=\"border border-gray-200 rounded-xl px-4 py-3.5 bg-white focus-within:border-blue-400 transition-colors\">\n          <CardNumberElement\n            options={{ ...elementStyle, showIcon: true }}\n            onChange={(e) => {\n              setNumberComplete(e.complete);\n              setCardErrorMessage(e.error?.message);\n            }}\n          />\n        </div>\n      </div>\n      <div className=\"grid grid-cols-2 gap-4\">\n        <div className=\"space-y-1.5\">\n          <label className=\"text-sm font-medium text-gray-600\">Expiry Date</label>\n          <div className=\"border border-gray-200 rounded-xl px-4 py-3.5 bg-white focus-within:border-blue-400 transition-colors\">\n            <CardExpiryElement\n              options={elementStyle}\n              onChange={(e) => {\n                setExpiryComplete(e.complete);\n                setCardErrorMessage(e.error?.message);\n              }}\n            />\n          </div>\n        </div>\n        <div className=\"space-y-1.5\">\n          <label className=\"text-sm font-medium text-gray-600\">CVC</label>\n          <div className=\"border border-gray-200 rounded-xl px-4 py-3.5 bg-white focus-within:border-blue-400 transition-colors\">\n            <CardCvcElement\n              options={elementStyle}\n              onChange={(e) => {\n                setCvcComplete(e.complete);\n                setCardErrorMessage(e.error?.message);\n              }}\n            />\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n});\n\ninterface GuestInfo {\n  firstname: string;\n  lastname: string;\n  email: string;\n}\n\ninterface GuestAddress {\n  street1: string;\n  street2?: string;\n  city: string;\n  state: string;\n  zip: string;\n  country: string;\n  name: string;\n  phone: string;\n}\n\nexport function CheckoutScreen() {\n  const router = useRouter();\n  const { cart, clearCart, updateQuantity, removeFromCart, refreshCart, isLoading: cartIsLoading, isFetching: cartIsFetching } = useCart();\n  const { setCartOpen } = useStore();\n  const { isAuthenticated, user, loginWithSession } = useAuth();\n  const [guestInfo, setGuestInfo] = useState<GuestInfo>({ firstname: '', lastname: '', email: '' });\n  const [guestDeliveryAddress, setGuestDeliveryAddress] = useState<GuestAddress>({ street1: '', city: '', state: '', zip: '', country: 'US', name: '', phone: '' });\n  const [guestInfoError, setGuestInfoError] = useState<string | null>(null);\n  const [guestAddressError, setGuestAddressError] = useState<string | null>(null);\n  const [guestAddressValidated, setGuestAddressValidated] = useState(false);\n  const [customDeliveryAddressError, setCustomDeliveryAddressError] = useState<string | null>(null);\n  const [isCustomDeliveryValidating, setIsCustomDeliveryValidating] = useState(false);\n  const [guestAddressValidating, setGuestAddressValidating] = useState(false);\n  const { buildPath } = useBasePath();\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [isDelivery, setIsDelivery] = useState<boolean | 'custom' | null>(null); // Start with no selection\n  const [hasSetDefaultDelivery, setHasSetDefaultDelivery] = useState(false);\n  const [paymentMethod, setPaymentMethod] = useState<string | null>(null); // null until capabilities load\n  const [error, setError] = useState<string | null>(null);\n  const [selectedAddressId, setSelectedAddressId] = useState<string | null>(null);\n  const [storeAddresses, setStoreAddresses] = useState<any[]>([]); // For pickup selection\n  const [isAddressModalOpen, setIsAddressModalOpen] = useState(false);\n  const [editingAddress, setEditingAddress] = useState<any | null>(null);\n  const [isConfirmModalOpen, setIsConfirmModalOpen] = useState(false);\n  const [addressToDelete, setAddressToDelete] = useState<string | null>(null);\n  const [shippingPrice, setShippingPrice] = useState(0);\n  const [activeMenuId, setActiveMenuId] = useState<string | null>(null);\n  const [deletingId, setDeletingId] = useState<string | null>(null);\n  const menuRef = useRef<HTMLDivElement>(null);\n  const hasInitializedAddressRef = useRef(false);\n  const notification = useNotification();\n  const { appliedCoupon, removeCoupon } = useDiscounts();\n\n  // Close menu when clicking outside\n  useEffect(() => {\n    const handleClickOutside = (event: MouseEvent) => {\n      if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n        setActiveMenuId(null);\n      }\n    };\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, []);\n\n  const [currentStep, setCurrentStep] = useState<CheckoutStep>('shipping');\n  const [completedSteps, setCompletedSteps] = useState<CheckoutStep[]>([]);\n  const [isOrderSuccess, setIsOrderSuccess] = useState(false);\n  const [hasAttemptedShippingContinue, setHasAttemptedShippingContinue] = useState(false);\n  const [showQuantityModal, setShowQuantityModal] = useState(false);\n  const [quantityAdjustItems, setQuantityAdjustItems] = useState<any[]>([]);\n  const [activeShippingSection, setActiveShippingSection] = useState<'method' | 'address' | 'rate' | null>('method');\n\n  // Stripe card payment state\n  const [cardComplete, setCardComplete] = useState(false);\n  const [cardError, setCardError] = useState<string | null>(null);\n  const [storedPaymentMethodId, setStoredPaymentMethodId] = useState<string | null>(null);\n  const [isCreatingPaymentMethod, setIsCreatingPaymentMethod] = useState(false);\n  const cardSectionRef = useRef<CardSectionHandle>(null);\n\n\n\n  // Get store capabilities for payment/delivery options\n  const {\n    capabilities,\n    isLoading: capabilitiesLoading,\n    showCardPayment,\n    showCashPayment,\n    showShippoDelivery,\n    showCustomDelivery,\n  } = useStoreCapabilities();\n\n  // Load Stripe with the connected account's publishable key (only when card payment is enabled)\n  const stripePromise = useMemo(() => {\n    const key = capabilities?.stripePublishableKey;\n    if (key && showCardPayment) return loadStripe(key);\n    return null;\n  }, [capabilities?.stripePublishableKey, showCardPayment]);\n\n  // Filter payment methods based on capabilities and the selected delivery method.\n  // Shippo orders must be prepaid, so cash is never offered for Shipping Delivery.\n  const availablePaymentMethods = useMemo(() => PAYMENT_METHODS_CONFIG.filter(pm => {\n    if (pm.requiresStripe) {\n      return showCardPayment;\n    }\n    return showCashPayment && isDelivery !== true;\n  }), [showCardPayment, showCashPayment, isDelivery]);\n\n  // Set default payment method once capabilities are loaded\n  useEffect(() => {\n    if (capabilitiesLoading) return;\n\n    const selectedMethodIsAvailable = availablePaymentMethods.some(pm => pm.value === paymentMethod);\n    if (availablePaymentMethods.length === 0) {\n      if (paymentMethod !== null) setPaymentMethod(null);\n      return;\n    }\n    if (paymentMethod === null || !selectedMethodIsAvailable) {\n      // Prefer Card if available, otherwise use first available.\n      const preferCard = availablePaymentMethods.find(pm => pm.id === 'Card');\n      setPaymentMethod(preferCard ? 'Card' : availablePaymentMethods[0].value);\n    }\n  }, [capabilitiesLoading, paymentMethod, availablePaymentMethods]);\n\n  // Set default delivery method once capabilities are loaded\n  useEffect(() => {\n    if (!capabilitiesLoading && !hasSetDefaultDelivery && capabilities) {\n      // Only default to Pickup if NO delivery options are available\n      if (!showShippoDelivery && !showCustomDelivery) {\n        setIsDelivery(false);\n      }\n      // Otherwise leave as null (User must choose)\n      setHasSetDefaultDelivery(true);\n    }\n  }, [capabilitiesLoading, hasSetDefaultDelivery, capabilities, showShippoDelivery, showCustomDelivery]);\n\n  // Build delivery options based on capabilities\n  const deliveryOptions = [\n    // Shippo delivery (if enabled)\n    ...(showShippoDelivery ? [{\n      id: 'shippo',\n      label: 'Delivery',\n      icon: <Truck className=\"w-5 h-5\" />,\n      value: true as const,\n      desc: SHIPPO_DELIVERY_NAME,\n    }] : []),\n    // Custom/Store delivery (if enabled)\n    ...(showCustomDelivery ? [{\n      id: 'custom',\n      label: capabilities?.customDeliveryTitle || 'Store Delivery',\n      icon: <Truck className=\"w-5 h-5\" />,\n      value: 'custom' as const,\n      desc: 'Price based on distance',\n    }] : []),\n    {\n      id: 'pickup',\n      label: 'Pickup',\n      icon: <MapPin className=\"w-5 h-5\" />,\n      value: false as const,\n      desc: 'Collect from pharmacy',\n    },\n  ];\n  const [selectedShippingRateId, setSelectedShippingRateId] = useState<string | null>(null);\n  const [shippingRates, setShippingRates] = useState<any[]>([]);\n  const [shippingRatesLoading, setShippingRatesLoading] = useState(false);\n  const [shippingRatesError, setShippingRatesError] = useState<string | null>(null);\n  const [storeData, setStoreData] = useState<any>(null); // Simulate store data if needed\n  const { addresses: userAddresses, defaultAddress, isLoading, refresh, removeAddress, markAsDefault } = useAddresses();\n\n  const handleAddressSelect = (addr: any) => {\n    setSelectedAddressId(addr.id);\n    if (addr.id !== selectedAddressId) {\n      setCustomDeliveryAddressError(null);\n    }\n    setHasAttemptedShippingContinue(false);\n    setActiveShippingSection(isDelivery === true ? 'rate' : null);\n    setValue('shipping.name', addr.name);\n    setValue('shipping.phone', addr.phone || '');\n    setValue('shipping.street1', addr.street1);\n    setValue('shipping.street2', addr.street2 || '');\n    setValue('shipping.city', addr.city);\n    setValue('shipping.state', addr.state);\n    setValue('shipping.zip', addr.zip);\n    setValue('shipping.country', addr.country);\n  };\n  const {\n    register,\n    handleSubmit,\n    formState: { errors },\n    watch,\n    setValue,\n  } = useForm<CheckoutFormData>({\n    resolver: zodResolver(checkoutSchema),\n    defaultValues: {\n      sameAsShipping: true,\n      shipping: {\n        name: user ? `${user.firstname} ${user.lastname}` : '',\n        phone: user?.phoneNumber || '',\n        country: 'United States',\n        street1: '',\n        city: '',\n        state: '',\n        zip: '',\n      },\n      billing: {\n        name: user ? `${user.firstname} ${user.lastname}` : '',\n        phone: user?.phoneNumber || '',\n        country: 'United States',\n        street1: '',\n        city: '',\n        state: '',\n        zip: '',\n      },\n    },\n  });\n\n  const sameAsShipping = watch('sameAsShipping', true);\n\n  const stockIssues = useMemo(() => {\n    if (!cart?.cartBody?.items) return [];\n    return cart.cartBody.items.filter(item => {\n      const v = item.productVariantData;\n      if (!v) return false;\n      if (v.inventoryStatus === ProductVariantPopulatedInventoryStatusEnum.OUTOFSTOCK) return true;\n      if (typeof v.inventoryCount === 'number' && v.inventoryCount < item.quantity) return true;\n      return false;\n    });\n  }, [cart]);\n\n  const canProceedToPayment = useMemo(() => {\n    if (stockIssues.length > 0) return false;\n    if (isDelivery === null) return false;\n    if (!isAuthenticated) {\n      // Guest info must be complete before any other shipping checks\n      if (!guestInfo.firstname.trim() || !guestInfo.lastname.trim() || !guestInfo.email.trim()) return false;\n      if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(guestInfo.email)) return false;\n    }\n    const needsDeliveryAddress = isDelivery === true || isDelivery === 'custom';\n    if (needsDeliveryAddress) {\n      if (isDelivery === 'custom' && customDeliveryAddressError) return false;\n      if (isAuthenticated) {\n        if (!selectedAddressId) return false;\n        if (isDelivery === 'custom' && isCustomDeliveryValidating) return false;\n        if (isDelivery === true && !selectedShippingRateId) return false;\n      } else {\n        // Guest: needs inline address fields and a validated address\n        if (!guestDeliveryAddress.street1 || !guestDeliveryAddress.city || !guestDeliveryAddress.state || !guestDeliveryAddress.zip || !guestDeliveryAddress.name || !guestDeliveryAddress.phone) return false;\n        if (!guestAddressValidated) return false;\n        // Guest + Shippo: also needs a rate selected\n        if (isDelivery === true && !selectedShippingRateId) return false;\n      }\n    }\n    return true;\n  }, [stockIssues, isDelivery, selectedAddressId, selectedShippingRateId, isAuthenticated, guestDeliveryAddress, guestInfo, guestAddressValidated, customDeliveryAddressError, isCustomDeliveryValidating]);\n\n  const canProceedToReview = useMemo(() => {\n    if (!paymentMethod) return false;\n    if (paymentMethod === 'Card' && stripePromise && !cardComplete) return false;\n    return true;\n  }, [paymentMethod, cardComplete, stripePromise]);\n\n  // Reduce shipping rates to one best-value option per speed tier\n  const tieredShippingRates = useMemo(() => {\n    if (!shippingRates.length) return [];\n\n    const TIERS: Record<string, { label: string; bg: string; text: string }> = {\n      economy: { label: 'Economy', bg: 'bg-gray-100', text: 'text-gray-600' },\n      standard: { label: 'Standard', bg: 'bg-gray-100', text: 'text-gray-600' },\n      express: { label: 'Express', bg: 'bg-gray-100', text: 'text-gray-600' },\n      overnight: { label: 'Overnight', bg: 'bg-gray-100', text: 'text-gray-600' },\n    };\n\n    const getTierKey = (days?: number) => {\n      if (!days || days >= 5) return 'economy';\n      if (days >= 3) return 'standard';\n      if (days === 2) return 'express';\n      return 'overnight';\n    };\n\n    // Rates are already sorted cheapest-first; keep first (cheapest) per tier\n    const seenTiers = new Set<string>();\n    return shippingRates\n      .map(rate => ({ ...rate, tierKey: getTierKey(rate.estimatedDays) }))\n      .filter(rate => {\n        if (seenTiers.has(rate.tierKey)) return false;\n        seenTiers.add(rate.tierKey);\n        return true;\n      })\n      .map(rate => ({ ...rate, tierConfig: TIERS[rate.tierKey] }));\n  }, [shippingRates]);\n\n  const handleStepClick = (step: CheckoutStep) => {\n    const stepOrder: CheckoutStep[] = ['shipping', 'payment', 'review'];\n    const currentIndex = stepOrder.indexOf(currentStep);\n    const targetIndex = stepOrder.indexOf(step);\n\n    if (targetIndex <= currentIndex || completedSteps.includes(step)) {\n      setCurrentStep(step);\n      // Scroll to the step section\n      setTimeout(() => {\n        const ref = step === 'shipping' ? shippingRef : step === 'payment' ? paymentRef : reviewRef;\n        if (ref.current) {\n          ref.current.scrollIntoView({ behavior: 'smooth', block: 'start' });\n          window.scrollBy({ top: -900, left: 0, behavior: 'smooth' });\n        }\n      }, 100);\n    }\n  };\n\n  const goToNextStep = () => {\n    const stepOrder: CheckoutStep[] = ['shipping', 'payment', 'review'];\n    const currentIndex = stepOrder.indexOf(currentStep);\n\n    if (currentStep === 'shipping') {\n      setCompletedSteps(prev => [...prev.filter(s => s !== 'shipping'), 'shipping']);\n    }\n    if (currentStep === 'payment') {\n      setCompletedSteps(prev => [...prev.filter(s => s !== 'payment'), 'payment']);\n    }\n\n    if (currentIndex < stepOrder.length - 1) {\n      const nextStep = stepOrder[currentIndex + 1];\n      setCurrentStep(nextStep);\n      // Scroll to the step section\n      setTimeout(() => {\n        const ref = nextStep === 'shipping' ? shippingRef : nextStep === 'payment' ? paymentRef : reviewRef;\n        if (ref.current) {\n          ref.current.scrollIntoView({ behavior: 'smooth', block: 'start' });\n          window.scrollBy({ top: -900, left: 0, behavior: 'smooth' });\n        }\n      }, 100);\n    }\n  };\n\n  // Refs for each step to enable scrolling into view on navigation\n  const shippingRef = useRef<HTMLDivElement | null>(null);\n  const paymentRef = useRef<HTMLDivElement | null>(null);\n  const reviewRef = useRef<HTMLDivElement | null>(null);\n\n  // Scroll to active step when currentStep changes\n  useEffect(() => {\n    const scrollTo = (el: HTMLElement | null) => {\n      if (!el) return;\n      // use a small timeout so the element is visible after animation/layout\n      setTimeout(() => {\n        try {\n          el.scrollIntoView({ behavior: 'smooth', block: 'start' });\n          // compensate a little for sticky headers\n          window.scrollBy({ top: -200, left: 0, behavior: 'smooth' });\n        } catch (e) {\n          // fallback\n          const rect = el.getBoundingClientRect();\n          window.scrollTo({ top: window.scrollY + rect.top - 12, behavior: 'smooth' });\n        }\n      }, 80);\n    };\n\n    if (currentStep === 'shipping') scrollTo(shippingRef.current);\n    if (currentStep === 'payment') scrollTo(paymentRef.current);\n    if (currentStep === 'review') scrollTo(reviewRef.current);\n  }, [currentStep]);\n\n  const goToPreviousStep = () => {\n    const stepOrder: CheckoutStep[] = ['shipping', 'payment', 'review'];\n    const currentIndex = stepOrder.indexOf(currentStep);\n    if (currentIndex > 0) {\n      const prevStep = stepOrder[currentIndex - 1];\n      setCurrentStep(prevStep);\n      // Scroll to the step section\n      setTimeout(() => {\n        const ref = prevStep === 'shipping' ? shippingRef : prevStep === 'payment' ? paymentRef : reviewRef;\n        if (ref.current) {\n          ref.current.scrollIntoView({ behavior: 'smooth', block: 'start' });\n          window.scrollBy({ top: -80, left: 0, behavior: 'smooth' });\n        }\n      }, 100);\n    }\n  };\n\n  // Sync billing address with shipping address when 'Billing same as shipping' is checked\n  useEffect(() => {\n    if (sameAsShipping) {\n      setValue('billing.name', watch('shipping.name'));\n      setValue('billing.phone', watch('shipping.phone'));\n      setValue('billing.street1', watch('shipping.street1'));\n      setValue('billing.street2', watch('shipping.street2'));\n      setValue('billing.city', watch('shipping.city'));\n      setValue('billing.state', watch('shipping.state'));\n      setValue('billing.zip', watch('shipping.zip'));\n      setValue('billing.country', watch('shipping.country'));\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [sameAsShipping, watch('shipping.name'), watch('shipping.phone'), watch('shipping.street1'), watch('shipping.street2'), watch('shipping.city'), watch('shipping.state'), watch('shipping.zip'), watch('shipping.country')]);\n\n  // const handleAddressAdded = async (address: any) => {\n  //   await refresh();\n  // };\n\n  useEffect(() => {\n    if (defaultAddress && !selectedAddressId && !hasInitializedAddressRef.current) {\n      hasInitializedAddressRef.current = true;\n      setSelectedAddressId(defaultAddress.id);\n      // Update form with default address\n      setValue('shipping.name', defaultAddress.name);\n      setValue('shipping.phone', defaultAddress.phone || '');\n      setValue('shipping.street1', defaultAddress.street1);\n      setValue('shipping.street2', defaultAddress.street2 || '');\n      setValue('shipping.city', defaultAddress.city);\n      setValue('shipping.state', defaultAddress.state);\n      setValue('shipping.zip', defaultAddress.zip);\n      setValue('shipping.country', defaultAddress.country);\n    }\n  }, [defaultAddress, selectedAddressId, setValue]);\n\n  // Parse raw Shippo/backend error strings into a human-readable message\n  const parseShippingError = (raw: string): string => {\n    try {\n      const bodyMatch = raw.match(/Body\\s*(\\{[\\s\\S]*\\})/);\n      if (bodyMatch) {\n        const body = JSON.parse(bodyMatch[1]);\n        const field = body.address_to ?? body.address_from ?? body;\n        const errors: string[] = Array.isArray(field)\n          ? field.flatMap((e: any) =>\n            Object.values(e).flat().filter((v): v is string => typeof v === 'string')\n          )\n          : Object.values(field).flat().filter((v): v is string => typeof v === 'string');\n        if (errors.length > 0) {\n          return `${errors[0]}. Please edit your delivery address and try again.`;\n        }\n      }\n    } catch {\n      // ignore parse errors\n    }\n    return 'Shipping is not available to this address. Please verify the address details and try again.';\n  };\n\n  const getCustomDeliveryErrorMessage = (error: any): string => {\n    const raw = error?.response?.data?.message || error?.message || '';\n    const message = raw || 'Local Delivery is not available for this address.';\n    if (!showShippoDelivery || /use shipping/i.test(message)) return message;\n    return `${message} ${SHIPPING_ALTERNATIVE_MESSAGE}`;\n  };\n\n  const handleUseShipping = () => {\n    if (!showShippoDelivery) return;\n\n    setIsDelivery(true);\n    setHasAttemptedShippingContinue(false);\n    setError(null);\n    setCustomDeliveryAddressError(null);\n    setGuestAddressError(null);\n    setGuestAddressValidated(false);\n    setShippingRatesError(null);\n    setShippingRates([]);\n    setSelectedShippingRateId(null);\n    setShippingPrice(0);\n    setActiveShippingSection(isAuthenticated && selectedAddressId ? 'rate' : 'address');\n    setCompletedSteps(prev => prev.filter(step => step !== 'shipping'));\n    setCurrentStep('shipping');\n  };\n\n  // Handle shipping rates response and errors\n  const handleShippingResponse = (response: any) => {\n    if (!response?.data) {\n      setShippingRatesError('Unable to calculate shipping rates');\n      setShippingRates([]);\n      setSelectedShippingRateId(null);\n      return;\n    }\n\n    const rates = response.data.rates || [];\n    if (rates.length > 0) {\n      // Sort rates by price (cheapest first) and select the first one\n      const sortedRates = [...rates].sort((a, b) => parseFloat(a.amount) - parseFloat(b.amount));\n      const cheapestRate = sortedRates[0];\n\n      setShippingRates(sortedRates);\n      setShippingRatesError(null);\n      setSelectedShippingRateId(cheapestRate.objectId);\n      setShippingPrice(parseFloat(cheapestRate.amount));\n      setActiveShippingSection(null);\n      return;\n    }\n\n    // If no rates, show the most relevant error message from messages\n    const messages = response.data.messages || [];\n    // Prefer messages that mention 'shipping', 'service area', or are from USPS\n    const relevantMessage = messages.find((msg: any) =>\n      msg.text.toLowerCase().includes('shipping') ||\n      msg.text.toLowerCase().includes('service area') ||\n      msg.source === 'USPS'\n    ) || messages[0];\n    setShippingRatesError(relevantMessage?.text || 'Shipping is not available to this address');\n    setShippingRates([]);\n    setSelectedShippingRateId(null);\n  };\n\n  // Define shipping message types\n  interface ShippingMessage {\n    source: string;\n    code: string;\n    text: string;\n  }\n\n  interface ShippingRate {\n    objectId: string;\n    provider: string;\n    servicelevel: {\n      name: string;\n      token: string;\n    };\n    amount: string;\n    amountLocal: string;\n    currency: string;\n    currencyLocal: string;\n    durationTerms?: string;\n    estimatedDays?: number;\n    providerImage75?: string;\n    test?: boolean;\n  }\n\n  useEffect(() => {\n    if (!isAuthenticated || isDelivery !== true || !selectedAddressId || !cart || cart?.cartBody?.items?.length === 0 || !cart?.cartBody?.items) {\n      setShippingRates([]);\n      setSelectedShippingRateId(null);\n      return;\n    }\n    setShippingRatesLoading(true);\n    setShippingRatesError(null);\n    (async () => {\n      try {\n        const api = new ShippingApi(AXIOS_CONFIG);\n        const cartBody = {\n          items: cart?.cartBody?.items?.map((item: any) => ({\n            productVariantId: String(item.productVariantId),\n            quantity: typeof item.quantity === 'number' ? item.quantity : 1,\n          })),\n          discount: undefined,\n        };\n        const res = await api.fetchAvailableShippingRates(cartBody, selectedAddressId);\n        handleShippingResponse(res);\n      } catch (e: any) {\n        setShippingRates([]);\n        setSelectedShippingRateId(null);\n        setShippingRatesError(parseShippingError(e?.response?.data?.message || e?.message || ''));\n      } finally {\n        setShippingRatesLoading(false);\n      }\n    })();\n  }, [isDelivery, selectedAddressId]);\n\n  // Clear previously fetched guest rates and validation whenever the address changes\n  const clearGuestRates = () => {\n    setShippingRates([]);\n    setSelectedShippingRateId(null);\n    setShippingRatesError(null);\n    setGuestAddressValidated(false);\n  };\n\n  // Validate address then proceed: for Shippo → also fetch rates; for custom → mark as validated\n  const validateAndProceed = async () => {\n    const { street1, street2, city, state, zip, country, name, phone } = guestDeliveryAddress;\n    if (!street1.trim() || !city.trim() || !state.trim() || !zip.trim() || !name?.trim() || !phone?.trim()) {\n      setGuestAddressError('Please fill in all required address fields.');\n      return;\n    }\n    setGuestAddressValidating(true);\n    setGuestAddressError(null);\n    setCustomDeliveryAddressError(null);\n    setGuestAddressValidated(false);\n    const trimmedAddress: GuestAddressDto = {\n      street1: street1.trim(),\n      street2: street2?.trim() || undefined,\n      city: city.trim(),\n      state: state.trim().toUpperCase(),\n      zip: zip.trim(),\n      country: country.trim().toUpperCase() || 'US',\n      name: name.trim() || undefined,\n      phone: phone.replace(/[\\s-]/g, '').trim() || undefined,\n    };\n    try {\n      const api = new ShippingApi(AXIOS_CONFIG);\n      await api.validateGuestAddress(trimmedAddress);\n      if (isDelivery === true) {\n        // Shippo: chain into rate fetch immediately\n        setGuestAddressValidated(true);\n        setGuestAddressValidating(false);\n        await fetchGuestRates();\n      } else if (isDelivery === 'custom') {\n        // Custom: refresh with the validated address so the backend can apply zone-based pricing\n        setGuestAddressValidating(false);\n        setIsCustomDeliveryValidating(true);\n        const discountId = appliedCoupon?._id || appliedCoupon?.id || undefined;\n        try {\n          await refreshCart('custom', undefined, discountId, undefined, trimmedAddress);\n          setGuestAddressValidated(true);\n          setCustomDeliveryAddressError(null);\n        } catch (err: any) {\n          const msg = getCustomDeliveryErrorMessage(err);\n          setGuestAddressError(msg);\n          setCustomDeliveryAddressError(msg);\n          setGuestAddressValidated(false);\n        } finally {\n          setIsCustomDeliveryValidating(false);\n        }\n      }\n    } catch (e: any) {\n      const msg: string = e?.response?.data?.message || 'We couldn\\'t verify this address. Please double-check your street, city, and ZIP code.';\n      setGuestAddressError(msg);\n      setGuestAddressValidated(false);\n    } finally {\n      setGuestAddressValidating(false);\n    }\n  };\n\n  // Fetch Shippo rates for a guest using the inline address.\n  // Returns the newly selected rateId on success, null on failure.\n  const fetchGuestRates = async (): Promise<string | null> => {\n    if (!cart?.cartBody?.items?.length) return null;\n    const { street1, city, state, zip, country, street2, name, phone } = guestDeliveryAddress;\n    if (!street1.trim() || !city.trim() || !state.trim() || !zip.trim()) {\n      setGuestAddressError('Please fill in all required address fields before getting shipping rates.');\n      return null;\n    }\n    setShippingRatesLoading(true);\n    setShippingRatesError(null);\n    setGuestAddressError(null);\n    setShippingRates([]);\n    setSelectedShippingRateId(null);\n    try {\n      const api = new ShippingApi(AXIOS_CONFIG);\n      const res = await api.fetchGuestShippingRates({\n        name: name?.trim() || '',\n        address: {\n          street1: street1.trim(),\n          street2: street2?.trim() || undefined,\n          city: city.trim(),\n          state: state.trim().toUpperCase(),\n          zip: zip.trim(),\n          country: country.trim().toUpperCase() || 'US',\n          phone: phone?.replace(/[\\s-]/g, '').trim() || undefined,\n        },\n        cart: {\n          items: cart.cartBody.items.map((item: any) => ({\n            productVariantId: String(item.productVariantId),\n            quantity: typeof item.quantity === 'number' ? item.quantity : 1,\n          })),\n        },\n      } as any);\n      // Extract cheapest rate directly (same logic as handleShippingResponse)\n      const rates: any[] = (res?.data as any)?.rates || [];\n      if (rates.length > 0) {\n        const sorted = [...rates].sort((a: any, b: any) => parseFloat(a.amount) - parseFloat(b.amount));\n        const cheapest = sorted[0];\n        handleShippingResponse(res);\n        return cheapest.objectId as string;\n      }\n      handleShippingResponse(res);\n      return null;\n    } catch (e: any) {\n      const msg = e?.response?.data?.message || e?.message || '';\n      setShippingRates([]);\n      setSelectedShippingRateId(null);\n      // Show address errors inline on the address form\n      if (e?.response?.status === 400) {\n        setGuestAddressError(msg || 'We couldn\\'t verify this address. Please check the details and try again.');\n      } else {\n        setShippingRatesError(parseShippingError(msg));\n      }\n      return null;\n    } finally {\n      setShippingRatesLoading(false);\n    }\n  };\n\n  useEffect(() => {\n    let cancelled = false;\n\n    if (isDelivery === null) return;\n\n    // Custom delivery: price depends on distance\n    // Auth: handled by the selectedAddressId effect; Guest: handled by the guestAddressValidated effect\n    if (isDelivery === 'custom') {\n      return () => { cancelled = true; };\n    }\n\n    const deliveryMethod = isDelivery === true ? 'shippo' : 'pickup';\n    refreshCart(deliveryMethod).catch(() => {});\n\n    if (isDelivery === false) {\n      (async () => {\n        const api = new ShippingApi(AXIOS_CONFIG);\n        const res = await api.getStoreAddress();\n        // Only update state if this effect hasn't been cleaned up\n        if (!cancelled && res.data) {\n          setStoreAddresses([res.data]);\n          setShippingPrice(0);\n        }\n      })();\n    }\n\n    // Cleanup function to prevent stale updates when delivery method changes\n    return () => {\n      cancelled = true;\n    };\n  }, [isDelivery]);\n\n  // Auto-fetch guest rates when switching to Shippo delivery with an already-validated address\n  useEffect(() => {\n    if (isDelivery !== true || isAuthenticated || !guestAddressValidated) return;\n    fetchGuestRates();\n  }, [isDelivery]);\n\n  // Refresh cart prices whenever the selected Shippo rate changes\n  useEffect(() => {\n    if (isDelivery !== true || !selectedShippingRateId) return;\n    refreshCart('shippo', selectedShippingRateId).catch(() => {});\n  }, [selectedShippingRateId]);\n\n  // Refresh cart for custom delivery whenever guest switches to custom with a validated address\n  useEffect(() => {\n    if (isDelivery !== 'custom' || isAuthenticated || !guestAddressValidated || !guestDeliveryAddress.street1?.trim()) return;\n    setCustomDeliveryAddressError(null);\n    setIsCustomDeliveryValidating(true);\n    const discountId = appliedCoupon?._id || appliedCoupon?.id || undefined;\n    refreshCart('custom', undefined, discountId, undefined, guestDeliveryAddress)\n      .catch((err: any) => {\n        const msg = getCustomDeliveryErrorMessage(err);\n        setGuestAddressError(msg);\n        setCustomDeliveryAddressError(msg);\n        setGuestAddressValidated(false);\n        setCurrentStep('shipping');\n      })\n      .finally(() => {\n        setIsCustomDeliveryValidating(false);\n      });\n  }, [isDelivery, isAuthenticated, guestAddressValidated, guestDeliveryAddress, refreshCart]);\n\n  // Refresh cart for custom delivery whenever auth user selects/changes address\n  useEffect(() => {\n    if (isDelivery !== 'custom' || !isAuthenticated || !selectedAddressId) return;\n    setCustomDeliveryAddressError(null);\n    setIsCustomDeliveryValidating(true);\n    const discountId = appliedCoupon?._id || appliedCoupon?.id || undefined;\n    refreshCart('custom', undefined, discountId, selectedAddressId)\n      .catch((err: any) => {\n        const statusCode = err?.response?.status || 0;\n        if (statusCode === 400) {\n          setCustomDeliveryAddressError(getCustomDeliveryErrorMessage(err));\n          setCurrentStep('shipping');\n          setActiveShippingSection('address');\n        }\n      })\n      .finally(() => {\n        setIsCustomDeliveryValidating(false);\n      });\n  }, [isDelivery, isAuthenticated, selectedAddressId, refreshCart]);\n\n  // Re-fetch cart from backend with discount applied whenever coupon changes\n  useEffect(() => {\n    if (isDelivery === 'custom' && isAuthenticated && !selectedAddressId) return;\n    if (isDelivery === 'custom' && !isAuthenticated && !guestAddressValidated) return;\n    const deliveryMethod = isDelivery === null ? undefined : isDelivery === true ? 'shippo' : isDelivery === 'custom' ? 'custom' : 'pickup';\n    const rateId = isDelivery === true ? (selectedShippingRateId ?? undefined) : undefined;\n    const discountId = appliedCoupon?._id || appliedCoupon?.id || undefined;\n    const addressId = (isDelivery === 'custom' && isAuthenticated) ? (selectedAddressId ?? undefined) : undefined;\n    const guestAddr = (isDelivery === 'custom' && !isAuthenticated && guestAddressValidated) ? guestDeliveryAddress : undefined;\n    refreshCart(deliveryMethod, rateId, discountId, addressId, guestAddr).catch((err: any) => {\n      if (isDelivery !== 'custom') return;\n      const msg = getCustomDeliveryErrorMessage(err);\n      setCustomDeliveryAddressError(msg);\n      if (!isAuthenticated) {\n        setGuestAddressError(msg);\n        setGuestAddressValidated(false);\n      } else {\n        setActiveShippingSection('address');\n      }\n      setCurrentStep('shipping');\n    });\n  }, [appliedCoupon, isDelivery, isAuthenticated, selectedAddressId, selectedShippingRateId, guestAddressValidated, guestDeliveryAddress, refreshCart]);\n\n\n  const onSubmit = async (data: CheckoutFormData) => {\n    setError(null);\n    // Guest checkout: validate guest info\n    if (!isAuthenticated) {\n      if (!guestInfo.firstname.trim() || !guestInfo.lastname.trim() || !guestInfo.email.trim()) {\n        setGuestInfoError('Please fill in your name and email above to continue.');\n        setError('Please fill in your guest information above.');\n        notification.error('Missing information', 'Please enter your name and email to continue as a guest.');\n        return;\n      }\n      if (!/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(guestInfo.email)) {\n        setGuestInfoError('Please enter a valid email address.');\n        setError('Please enter a valid email address in the guest info section above.');\n        return;\n      }\n    }\n    if (!cart || cart?.cartBody?.items?.length === 0 || !cart?.cartBody?.items) {\n      setError('Your cart is empty. Please add items to your cart.');\n      return;\n    }\n    if (!paymentMethod) {\n      setError('Please select a payment method.');\n      return;\n    }\n    if (paymentMethod === 'Card' && !storedPaymentMethodId) {\n      setError('Please enter your card details in the Payment step.');\n      return;\n    }\n    if (isDelivery === null) {\n      setError('Please select a delivery method.');\n      return;\n    }\n    // Check for delivery-related requirements (both shippo and custom delivery need address)\n    const isShippoDelivery = isDelivery === true;\n    const isCustomDelivery = isDelivery === 'custom';\n    const needsDeliveryAddress = isShippoDelivery || isCustomDelivery;\n\n    if (needsDeliveryAddress) {\n      if (isCustomDelivery && customDeliveryAddressError) {\n        setError(customDeliveryAddressError);\n        setCurrentStep('shipping');\n        setActiveShippingSection('address');\n        return;\n      }\n      if (!isAuthenticated) {\n        // Guest: validate inline address\n        if (!guestDeliveryAddress.street1 || !guestDeliveryAddress.city || !guestDeliveryAddress.state || !guestDeliveryAddress.zip) {\n          setError('Please fill in your delivery address in the Shipping step.');\n          return;\n        }\n        if (isCustomDelivery && !guestAddressValidated) {\n          setError('Please confirm your delivery address before placing the order.');\n          setCurrentStep('shipping');\n          return;\n        }\n      } else {\n        if (!selectedAddressId) {\n          setError('Please select a shipping address.');\n          return;\n        }\n        if (isShippoDelivery && !selectedShippingRateId) {\n          setError('Please select a shipping method.');\n          return;\n        }\n        const requiredFields = ['name', 'street1', 'city', 'zip', 'country'];\n        for (const field of requiredFields) {\n          if (!data.shipping[field as keyof typeof data.shipping]) {\n            setError(`Please fill in the shipping address: ${field}.`);\n            return;\n          }\n        }\n      }\n    } else if (isDelivery === false) {\n      // Pickup case\n      if (storeAddresses.length === 0) {\n        setError('Store pickup location is not available.');\n        return;\n      }\n      if (isAuthenticated && paymentMethod === 'Card' && userAddresses.length === 0) {\n        setError('Card payments require a billing address. Please add an address to your account or choose a different payment method.');\n        return;\n      }\n    }\n    if (!sameAsShipping) {\n      const requiredBillingFields = ['fullName', 'addressLine1', 'city', 'zipCode', 'country'];\n      for (const field of requiredBillingFields) {\n        if (!data.billing[field as keyof typeof data.billing]) {\n          setError(`Please fill in the billing address: ${field}.`);\n          return;\n        }\n      }\n    }\n\n    setIsSubmitting(true);\n    let guestOrderDTO: any = null;\n    const api = new OrdersApi(AXIOS_CONFIG);\n    try {\n      const items = (cart?.cartBody?.items || []).map((item: any) => ({\n        productVariantId: String(item.productVariantId),\n        quantity: typeof item.quantity === 'number' ? item.quantity : 1,\n      })).filter((item: any) => item.productVariantId);\n\n      if (!isAuthenticated) {\n        // ── Guest checkout ──────────────────────────────────────────────────\n        const deliveryMethod = isDelivery === true ? 'shippo' : isDelivery === 'custom' ? 'custom' : 'pickup';\n        const isCustomDelivery = isDelivery === 'custom';\n        // Trim all address fields before sending to avoid Shippo whitespace failures\n        const trimmedAddress: GuestAddress = {\n          street1: guestDeliveryAddress.street1.trim(),\n          street2: guestDeliveryAddress.street2?.trim() || undefined,\n          city: guestDeliveryAddress.city.trim(),\n          state: guestDeliveryAddress.state.trim().toUpperCase(),\n          zip: guestDeliveryAddress.zip.trim(),\n          country: guestDeliveryAddress.country.trim().toUpperCase() || 'US',\n          name: guestDeliveryAddress.name.trim(),\n          phone: guestDeliveryAddress.phone.replace(/[\\s-]/g, '').trim(),\n        };\n        guestOrderDTO = {\n          items,\n          paymentMethod,\n          orderStatus: 'Pending',\n          orderRemindingDates: [],\n          firstname: guestInfo.firstname.trim(),\n          lastname: guestInfo.lastname.trim(),\n          email: guestInfo.email.trim(),\n          deliveryMethod,\n          ...(appliedCoupon && { discountId: appliedCoupon._id || appliedCoupon.id }),\n          ...(paymentMethod === 'Card' && storedPaymentMethodId && { paymentMethodId: storedPaymentMethodId }),\n          // Only send deliveryAddress for custom delivery — Shippo address is embedded in rateId\n          ...(isCustomDelivery && trimmedAddress.street1 && { deliveryAddress: trimmedAddress }),\n        };\n        const isDeliveryBoolean = isDelivery !== false;\n        const guestResponse = await api.guestCheckout(\n          guestOrderDTO,\n          isDelivery === true ? (selectedShippingRateId || undefined) : undefined,\n          isDeliveryBoolean\n        );\n        // Store auth token — creates account automatically\n        await loginWithSession(guestResponse.data.authToken);\n        const isNewUser = guestResponse.data.isNewUser;\n        notification.success(\n          isNewUser ? 'Account created!' : 'Welcome back!',\n          isNewUser\n            ? 'Your account has been created! Use your email to sign in next time.'\n            : 'Your order has been placed successfully.'\n        );\n        setIsOrderSuccess(true);\n        await clearCart();\n        removeCoupon();\n        const orderId = guestResponse.data.order?.id || guestResponse.data.order?._id;\n        const guestEmail = guestInfo.email.trim();\n        router.push(buildPath(`/account/orders/${orderId}?guestEmail=${encodeURIComponent(guestEmail)}`));\n        return;\n      }\n\n      // ── Authenticated checkout ──────────────────────────────────────────\n      let billingAddressId: string | undefined = undefined;\n      if (isDelivery) {\n        billingAddressId = selectedAddressId || undefined;\n      } else if (paymentMethod === 'Card') {\n        billingAddressId = userAddresses.length > 0 ? userAddresses[0].id : undefined;\n      }\n      const orderDTO: any = {\n        items,\n        paymentMethod,\n        orderStatus: 'Pending',\n        orderRemindingDates: [],\n        shippingAddress: data.shipping,\n        billingAddress: sameAsShipping ? data.shipping : data.billing,\n        ...(appliedCoupon && { discountId: appliedCoupon._id || appliedCoupon.id }),\n        ...(isDelivery === 'custom' && selectedAddressId && {\n          deliveryMethod: 'custom',\n          userAddressId: selectedAddressId,\n        }),\n        ...(paymentMethod === 'Card' && storedPaymentMethodId && { paymentMethodId: storedPaymentMethodId }),\n      };\n\n      const isDeliveryBoolean = isDelivery !== false;\n      const response = await api.createCheckout(\n        orderDTO,\n        isDeliveryBoolean,\n        undefined,\n        isDeliveryBoolean && isDelivery === true ? (selectedShippingRateId || undefined) : undefined,\n        billingAddressId\n      );\n      if (response?.data?.payment && response.data.payment.hostedInvoiceUrl === 'INSUFFICIENT_CREDIT') {\n        setError('You have insufficient credit to complete this order.');\n        notification.error('Insufficient credit', 'You do not have enough credit to complete this order.');\n        return;\n      }\n      if (paymentMethod === 'Card') {\n        if (storedPaymentMethodId) {\n          notification.success('Order placed', 'Your order has been placed and your card has been charged.');\n        } else {\n          const paymentUrl = response?.data?.payment?.hostedInvoiceUrl;\n          if (paymentUrl && paymentUrl !== 'INSUFFICIENT_CREDIT') {\n            window.open(paymentUrl, '_blank');\n          }\n          notification.success('Order placed', 'Your order has been placed successfully.');\n        }\n        setIsOrderSuccess(true);\n        await clearCart();\n        removeCoupon();\n        router.push(buildPath(`/account/orders/${response.data?.id}`));\n        return;\n      } else {\n        notification.success('Order placed', 'Your order has been placed successfully.');\n        setIsOrderSuccess(true);\n        await clearCart();\n        removeCoupon();\n        router.push(buildPath(`/account/orders/${response.data?.id}`));\n      }\n    } catch (err: any) {\n      console.error('Checkout error:', err);\n      const rawMsg: string = err?.response?.data?.message || err?.message || 'Failed to place order';\n      const statusCode: number = err?.response?.status || err?.response?.data?.statusCode || 0;\n\n      // Expired Shippo rate — auto-refetch and retry once for guests\n      if (\n        !isAuthenticated &&\n        isDelivery === true &&\n        statusCode === 400 &&\n        rawMsg.toLowerCase().includes('shipping rate has expired')\n      ) {\n        const newRateId = await fetchGuestRates();\n        if (newRateId) {\n          try {\n            const retryResponse = await api.guestCheckout(\n              guestOrderDTO,\n              newRateId,\n              true\n            );\n            await loginWithSession(retryResponse.data.authToken);\n            const isNewUser = retryResponse.data.isNewUser;\n            notification.success(\n              isNewUser ? 'Account created!' : 'Welcome back!',\n              isNewUser\n                ? 'Your account has been created! Use your email to sign in next time.'\n                : 'Your order has been placed successfully.'\n            );\n            setIsOrderSuccess(true);\n            await clearCart();\n            removeCoupon();\n            const orderId = retryResponse.data.order?.id || retryResponse.data.order?._id;\n            const guestEmailVal = guestInfo.email.trim();\n            router.push(buildPath(`/account/orders/${orderId}?guestEmail=${encodeURIComponent(guestEmailVal)}`));\n            return;\n          } catch (retryErr: any) {\n            const retryMsg: string = retryErr?.response?.data?.message || retryErr?.message || 'Failed to place order';\n            setError(retryMsg);\n            notification.error('Could not place order', retryMsg);\n            setIsSubmitting(false);\n            return;\n          }\n        }\n        setError('Your shipping rate expired and we could not fetch a new one. Please try again.');\n        notification.error('Shipping rate expired', 'Please go back and select a new shipping rate.');\n        setIsSubmitting(false);\n        return;\n      }\n\n      // Out-of-range custom delivery address\n      if (statusCode === 400 && isCustomDelivery && (rawMsg.toLowerCase().includes('delivery is not available') || rawMsg.toLowerCase().includes('maximum delivery distance'))) {\n        const customDeliveryError = getCustomDeliveryErrorMessage(err);\n        setCustomDeliveryAddressError(customDeliveryError);\n        if (isAuthenticated) {\n          setActiveShippingSection('address');\n        } else {\n          setGuestAddressError(customDeliveryError);\n          setGuestAddressValidated(false);\n        }\n        setCurrentStep('shipping');\n        setIsSubmitting(false);\n        return;\n      }\n\n      // Address validation failure — scroll back to shipping step, show inline error\n      if (statusCode === 400 && rawMsg.toLowerCase().includes('address validation')) {\n        setGuestAddressError(rawMsg);\n        setCurrentStep('shipping');\n        notification.error('Address not found', \"We couldn't verify this address. Please double-check the details.\");\n        setIsSubmitting(false);\n        return;\n      }\n\n      let msg = rawMsg;\n      let toastTitle = 'Could not place order';\n      if (statusCode === 403 && msg.toLowerCase().includes('inactive')) {\n        toastTitle = 'Account inactive';\n        // Older API builds only return a bare \"User is inactive\" — swap in copy the\n        // customer can act on. Newer ones include the pharmacy's contact details.\n        if (!msg.toLowerCase().includes('contact')) {\n          msg = 'Your account is currently inactive. Please contact the pharmacy to complete your order.';\n        }\n      } else if (msg.toLowerCase().includes('insufficient balance')) {\n        msg = 'Insufficient balance in your account to complete this order.';\n      } else if (msg.toLowerCase().includes('browser was not found')) {\n        msg = 'A temporary server error occurred while processing your invoice. Please contact support.';\n      } else if (statusCode === 400 && msg.toLowerCase().includes('out of stock')) {\n        msg = 'One or more items in your cart are out of stock. Please update your cart and try again.';\n      } else if (statusCode === 400 && msg.toLowerCase().includes('discount')) {\n        msg = 'Your discount code is no longer valid. It has been removed from your order.';\n      } else if (statusCode === 400 && msg.toLowerCase().includes('variant')) {\n        msg = 'One or more items in your cart are no longer available. Please update your cart and try again.';\n      } else if (statusCode >= 500 || !statusCode) {\n        msg = 'A server error occurred. Please try again in a moment — your cart has been preserved.';\n      }\n      setError(msg);\n      notification.error(toastTitle, msg);\n    } finally {\n      setIsSubmitting(false);\n    }\n  };\n\n  // Redirect if cart is empty - use useEffect to avoid rendering during render\n  React.useEffect(() => {\n    if (!isOrderSuccess && (!cart || cart?.cartBody?.items?.length === 0 || !cart?.cartBody?.items)) {\n      router.push(buildPath('/shop'));\n    }\n  }, [cart, router, isOrderSuccess]);\n\n  if (!cart || cart?.cartBody?.items?.length === 0 || !cart?.cartBody?.items) {\n    return null;\n  }\n\n  const subtotal = cart.subTotal ?? Math.round(cart.cartBody.items.reduce((total, item) => total + item.productVariantData.finalPrice * item.quantity, 0) * 100) / 100;\n  const discountAmount = (cart.discountedAmount && cart.discountedAmount > 0)\n    ? cart.discountedAmount\n    : (appliedCoupon ? calculateDiscountForCartItems(cart.cartBody.items, appliedCoupon) : 0);\n  const tax = cart.tax ?? 0;\n  const total = cart.total ?? (subtotal - discountAmount + (cart.shipping ?? shippingPrice) + tax);\n\n  return (\n    <div className=\"min-h-screen bg-white pb-16 overflow-x-hidden\">\n\n\n      <form onSubmit={handleSubmit(onSubmit)}>\n        <div className=\"pt-12 container mx-auto grid gap-10 px-4 lg:grid-cols-[minmax(0,2fr)_minmax(0,1fr)]\">\n          <motion.div\n            initial={{ opacity: 0, y: 24 }}\n            animate={{ opacity: 1, y: 0 }}\n            className=\"space-y-8 order-2 lg:order-1\"\n          >\n            {/* Header */}\n            <div className=\"mb-8\">\n              <h1 className=\"font-semibold text-[#2B4B7C] mb-2 text-3xl\">\n                Checkout\n              </h1>\n              <p className=\"text-[14px] text-[#676c80] text-md leading-relaxed\">\n                Complete your order information below\n              </p>\n            </div>\n\n            {/* Guest Info Card — shown when not logged in */}\n            {!isAuthenticated && (\n              <div className={`bg-white border-2 rounded-[24px] p-6 sm:p-8 mb-4 transition-colors ${guestInfoError ? 'border-red-300' : 'border-gray-100'}`}>\n                <div className=\"flex items-start gap-3 mb-5\">\n                  <div className=\"w-10 h-10 rounded-xl bg-hprimary-50 flex items-center justify-center shrink-0\">\n                    <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"w-5 h-5 text-hprimary-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\"><path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z\" /></svg>\n                  </div>\n                  <div>\n                    <h2 className=\"font-semibold text-[#2B4B7C] text-lg leading-tight\">Guest Checkout</h2>\n                    <p className=\"text-sm text-gray-500 mt-0.5\">We&apos;ll create a free account for you so you can track your order.</p>\n                  </div>\n                </div>\n                {guestInfoError && (\n                  <div className=\"flex items-center gap-2 mb-4 px-3 py-2.5 bg-red-50 border border-red-200 rounded-xl text-sm text-red-700\">\n                    <AlertCircle className=\"w-4 h-4 shrink-0\" />\n                    {guestInfoError}\n                  </div>\n                )}\n                <div className=\"grid grid-cols-1 sm:grid-cols-2 gap-4\">\n                  <div>\n                    <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">First Name <span className=\"text-red-400\">*</span></label>\n                    <Input\n                      placeholder=\"Alex\"\n                      value={guestInfo.firstname}\n                      onChange={(e) => { setGuestInfo(p => ({ ...p, firstname: e.target.value })); setGuestInfoError(null); }}\n                    />\n                  </div>\n                  <div>\n                    <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">Last Name <span className=\"text-red-400\">*</span></label>\n                    <Input\n                      placeholder=\"Morgan\"\n                      value={guestInfo.lastname}\n                      onChange={(e) => { setGuestInfo(p => ({ ...p, lastname: e.target.value })); setGuestInfoError(null); }}\n                    />\n                  </div>\n                  <div className=\"sm:col-span-2\">\n                    <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">Email Address <span className=\"text-red-400\">*</span></label>\n                    <Input\n                      type=\"email\"\n                      placeholder=\"you@example.com\"\n                      value={guestInfo.email}\n                      onChange={(e) => { setGuestInfo(p => ({ ...p, email: e.target.value })); setGuestInfoError(null); }}\n                    />\n                  </div>\n                </div>\n              </div>\n            )}\n\n            {/* Progress Stepper */}\n            <div className=\"bg-white border-2 border-gray-100 rounded-[24px] p-6 mb-8\">\n              <CheckoutStepper\n                currentStep={currentStep}\n                onStepClick={handleStepClick}\n                completedSteps={completedSteps}\n              />\n            </div>\n\n            <AnimatePresence mode=\"wait\">\n              {/* SHIPPING STEP */}\n              {currentStep === 'shipping' && (\n                <motion.div\n                  ref={shippingRef}\n                  key=\"shipping-step\"\n                  initial={{ opacity: 0, x: -20 }}\n                  animate={{ opacity: 1, x: 0 }}\n                  exit={{ opacity: 0, x: 20 }}\n                  transition={{ duration: 0.3 }}\n                  className=\"space-y-3\"\n                >\n                  {/* Stock Issues — inline interactive section */}\n                  {stockIssues.length > 0 && (\n                    <div className=\"border-2 border-red-300 bg-red-50 rounded-[24px] overflow-hidden\">\n                      {/* Header */}\n                      <div className=\"flex items-start gap-3 px-6 pt-6 pb-4 border-b border-red-200\">\n                        <div className=\"w-9 h-9 rounded-full bg-red-100 flex items-center justify-center shrink-0\">\n                          <AlertCircle className=\"w-5 h-5 text-red-600\" />\n                        </div>\n                        <div>\n                          <p className=\"font-semibold text-red-800 text-base leading-tight\">\n                            {stockIssues.length === 1\n                              ? '1 item needs attention'\n                              : `${stockIssues.length} items need attention`}\n                          </p>\n                          <p className=\"text-red-600 text-sm mt-0.5\">\n                            Decrease the quantity or remove items below to continue.\n                          </p>\n                          <button\n                            type=\"button\"\n                            onClick={() => setCartOpen(true)}\n                            className=\"text-sm font-semibold text-red-700 underline hover:text-red-800 mt-2\"\n                          >\n                            Go to cart to fix these items\n                          </button>\n                        </div>\n                      </div>\n\n                      {/* Item rows */}\n                      <div className=\"px-6 py-4 space-y-3\">\n                        {stockIssues.map(item => {\n                          const v = item.productVariantData;\n                          const maxQty = typeof v.inventoryCount === 'number' ? v.inventoryCount : 0;\n                          const isOutOfStock = maxQty === 0 || v.inventoryStatus === ProductVariantPopulatedInventoryStatusEnum.OUTOFSTOCK;\n\n                          return (\n                            <div\n                              key={item.productVariantId}\n                              className=\"flex flex-col gap-2 bg-white border border-red-200 rounded-2xl p-3\"\n                            >\n                              {/* Top row: thumbnail + name */}\n                              <div className=\"flex items-center gap-3 min-w-0\">\n                                <div className=\"w-12 h-12 rounded-xl overflow-hidden bg-gray-50 shrink-0 border border-red-100\">\n                                  <Image\n                                    src={v.media?.[0]?.file || PLACEHOLDER_IMAGE_SRC}\n                                    alt={v.name}\n                                    width={48}\n                                    height={48}\n                                    className=\"w-full h-full object-cover\"\n                                  />\n                                </div>\n                                <div className=\"flex-1 min-w-0\">\n                                  <p className=\"text-sm font-semibold text-gray-900 truncate\">{v.name}</p>\n                                  <p className=\"text-xs font-medium text-red-600 mt-0.5\">\n                                    {isOutOfStock\n                                      ? 'Out of stock'\n                                      : `Only ${maxQty} available — you have ${item.quantity}`}\n                                  </p>\n                                </div>\n                              </div>\n\n                              {/* Bottom row: action buttons */}\n                              <div className=\"flex items-center justify-end gap-2\">\n                                {isOutOfStock ? (\n                                  <button\n                                    type=\"button\"\n                                    onClick={() => removeFromCart(item.productVariantId)}\n                                    disabled={cartIsLoading}\n                                    className=\"text-xs font-semibold text-red-600 border border-red-200 bg-white rounded-full px-3 py-1.5 hover:bg-red-50 transition-colors disabled:opacity-50\"\n                                  >\n                                    Remove\n                                  </button>\n                                ) : (\n                                  <>\n                                    <button\n                                      type=\"button\"\n                                      onClick={() => updateQuantity(item.productVariantId, maxQty)}\n                                      disabled={cartIsLoading || item.quantity === maxQty}\n                                      className=\"text-xs font-semibold text-amber-600 border border-amber-200 bg-amber-50 rounded-full px-2.5 py-1.5 hover:bg-amber-100 transition-colors disabled:opacity-50\"\n                                    >\n                                      Reduce to {maxQty}\n                                    </button>\n                                    <button\n                                      type=\"button\"\n                                      onClick={() => removeFromCart(item.productVariantId)}\n                                      disabled={cartIsLoading}\n                                      className=\"text-xs font-semibold text-red-500 border border-red-200 bg-white rounded-full px-2.5 py-1.5 hover:bg-red-50 transition-colors disabled:opacity-50\"\n                                    >\n                                      Remove\n                                    </button>\n                                  </>\n                                )}\n                              </div>\n                            </div>\n                          );\n                        })}\n                      </div>\n                    </div>\n                  )}\n\n                  {/* Delivery Method */}\n                  {activeShippingSection === 'method' ? (\n                    <div className={`bg-white border-2 rounded-[24px] p-6 sm:p-8 transition-colors duration-200 ${hasAttemptedShippingContinue && isDelivery === null ? 'border-red-300' : 'border-gray-100'}`}>\n                      <div className=\"flex items-center justify-between mb-6\">\n                        <div className=\"flex items-center gap-3\">\n                          <div className={`w-10 h-10 rounded-xl flex items-center justify-center shrink-0 ${hasAttemptedShippingContinue && isDelivery === null ? 'bg-red-100' : 'bg-hprimary-50'}`}>\n                            <Truck className={`w-5 h-5 ${hasAttemptedShippingContinue && isDelivery === null ? 'text-red-500' : 'text-hprimary-600'}`} />\n                          </div>\n                          <div>\n                            <h2 className=\"text-lg font-semibold text-[#2B4B7C]\">How would you like to receive your order?</h2>\n                            <p className=\"text-sm text-gray-500\">Select your preferred delivery method</p>\n                          </div>\n                        </div>\n                        {hasAttemptedShippingContinue && isDelivery === null && (\n                          <span className=\"shrink-0 text-xs font-semibold text-red-500 bg-red-50 border border-red-200 px-2 py-0.5 rounded-full\">\n                            Required\n                          </span>\n                        )}\n                      </div>\n\n                      <div className=\"space-y-2\">\n                        {deliveryOptions.map((option) => {\n                          const active = isDelivery === option.value;\n                          return (\n                            <button\n                              key={option.id}\n                              type=\"button\"\n                              onClick={() => {\n                                setIsDelivery(option.value);\n                                setHasAttemptedShippingContinue(false);\n                                setSelectedShippingRateId(null);\n                                setCustomDeliveryAddressError(null);\n                                setShippingPrice(0);\n                                // Auto-advance to next section\n                                if (option.value === false) {\n                                  setActiveShippingSection(null);\n                                } else if (selectedAddressId) {\n                                  setActiveShippingSection(option.value === true ? 'rate' : null);\n                                } else {\n                                  setActiveShippingSection('address');\n                                }\n                              }}\n                              className={`relative flex w-full items-center gap-3 rounded-xl border-2 p-3 text-left transition-all duration-200 ${active\n                                ? 'border-hprimary-400 bg-hprimary-50/80 shadow-sm'\n                                : 'border-gray-200 bg-white hover:border-hprimary-200 hover:bg-gray-50/50'\n                                }`}\n                            >\n                              <div className={`shrink-0 w-5 h-5 rounded-full border-2 flex items-center justify-center transition-all ${active ? 'border-hprimary-500 bg-hprimary-500' : 'border-gray-300'}`}>\n                                {active && <div className=\"w-2 h-2 rounded-full bg-white\" />}\n                              </div>\n                              <div className={`shrink-0 w-8 h-8 rounded-lg flex items-center justify-center transition-colors ${active ? 'bg-hprimary-100 text-hprimary-600' : 'bg-gray-100 text-gray-500'}`}>\n                                {option.icon}\n                              </div>\n                              <div className=\"flex-1 min-w-0\">\n                                <p className={`font-semibold text-sm ${active ? 'text-hprimary-700' : 'text-gray-900'}`}>{option.label}</p>\n                                <p className=\"text-xs text-gray-500 mt-0.5\">{option.desc}</p>\n                              </div>\n                              {option.value === 'custom' && capabilities?.customDeliveryZones && capabilities.customDeliveryZones.length > 0 && (\n                                <span className={`shrink-0 text-xs font-semibold px-2.5 py-1 rounded-full ${active ? 'bg-hprimary-100 text-hprimary-700' : 'bg-gray-100 text-gray-600'}`}>\n                                  From {formatPrice(Math.min(...capabilities.customDeliveryZones.map(z => z.price)))}\n                                </span>\n                              )}\n                              {option.value === false && (\n                                <span className={`shrink-0 text-xs font-bold px-2.5 py-1 rounded-full ${active ? 'bg-green-100 text-green-700' : 'bg-gray-100 text-gray-600'}`}>\n                                  Free\n                                </span>\n                              )}\n                            </button>\n                          );\n                        })}\n                      </div>\n                    </div>\n                  ) : isDelivery !== null ? (\n                    <button\n                      type=\"button\"\n                      onClick={() => setActiveShippingSection('method')}\n                      className=\"w-full flex items-center gap-3 px-4 py-3.5 bg-gray-50 border border-gray-200 rounded-2xl hover:border-hprimary-200 hover:bg-hprimary-50/30 transition-all duration-200 text-left\"\n                    >\n                      <div className=\"w-9 h-9 rounded-xl bg-hprimary-100 flex items-center justify-center shrink-0\">\n                        {isDelivery === false ? <MapPin className=\"w-4 h-4 text-hprimary-600\" /> : <Truck className=\"w-4 h-4 text-hprimary-600\" />}\n                      </div>\n                      <div className=\"flex-1 min-w-0\">\n                        <p className=\"text-[11px] font-semibold text-gray-400 uppercase tracking-wide\">Delivery Method</p>\n                        <p className=\"text-sm font-semibold text-gray-800 mt-0.5\">\n                          {isDelivery === false ? 'Store Pickup' : isDelivery === 'custom' ? (capabilities?.customDeliveryTitle || 'Store Delivery') : SHIPPO_DELIVERY_NAME}\n                        </p>\n                      </div>\n                      <div className=\"shrink-0 flex items-center gap-2\">\n                        <div className=\"w-5 h-5 rounded-full bg-green-100 flex items-center justify-center\">\n                          <Check className=\"w-3 h-3 text-green-600\" />\n                        </div>\n                        <span className=\"text-xs font-medium text-gray-400\">Edit</span>\n                      </div>\n                    </button>\n                  ) : null}\n\n                  {/* Guest inline address form — shown instead of address picker for unauthenticated users */}\n                  {!isAuthenticated && isDelivery !== null && isDelivery !== false && (\n                    guestAddressValidated ? (\n                      /* Collapsed summary — click Edit to re-open the form */\n                      <button\n                        type=\"button\"\n                        onClick={() => { setGuestAddressValidated(false); clearGuestRates(); }}\n                        className=\"w-full flex items-center gap-3 px-4 py-3.5 bg-gray-50 border border-gray-200 rounded-2xl hover:border-hprimary-200 hover:bg-hprimary-50/30 transition-all duration-200 text-left\"\n                      >\n                        <div className=\"w-9 h-9 rounded-xl bg-hprimary-100 flex items-center justify-center shrink-0\">\n                          <MapPin className=\"w-4 h-4 text-hprimary-600\" />\n                        </div>\n                        <div className=\"flex-1 min-w-0\">\n                          <p className=\"text-[11px] font-semibold text-gray-400 uppercase tracking-wide\">Delivery Address</p>\n                          <p className=\"text-sm font-semibold text-gray-800 mt-0.5 truncate\">\n                            {guestDeliveryAddress.street1}, {guestDeliveryAddress.city}\n                          </p>\n                        </div>\n                        <div className=\"shrink-0 flex items-center gap-2\">\n                          <div className=\"w-5 h-5 rounded-full bg-green-100 flex items-center justify-center\">\n                            <Check className=\"w-3 h-3 text-green-600\" />\n                          </div>\n                          <span className=\"text-xs font-medium text-gray-400\">Edit</span>\n                        </div>\n                      </button>\n                    ) : (\n                      <section className={`bg-white border-2 rounded-[24px] p-6 sm:p-8 transition-colors duration-200 ${(hasAttemptedShippingContinue && !guestDeliveryAddress.street1) || guestAddressError ? 'border-red-300' : 'border-gray-100'}`}>\n                        <div className=\"flex items-center gap-3 mb-6\">\n                          <div className={`w-10 h-10 rounded-xl flex items-center justify-center shrink-0 ${(hasAttemptedShippingContinue && !guestDeliveryAddress.street1) || guestAddressError ? 'bg-red-100' : 'bg-hprimary-50'}`}>\n                            <MapPin className={`w-5 h-5 ${(hasAttemptedShippingContinue && !guestDeliveryAddress.street1) || guestAddressError ? 'text-red-500' : 'text-hprimary-600'}`} />\n                          </div>\n                          <div>\n                            <h2 className=\"font-semibold text-[#2B4B7C] text-lg\">Delivery Address</h2>\n                            <p className=\"text-sm text-gray-500\">Where should we deliver your order?</p>\n                          </div>\n                        </div>\n\n                        {/* Inline address validation error */}\n                        {guestAddressError && (\n                          <div className=\"mb-4 p-3 bg-red-50 border border-red-200 rounded-xl flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n                            <div className=\"flex items-start gap-2\">\n                              <AlertCircle className=\"w-4 h-4 text-red-500 shrink-0 mt-0.5\" />\n                              <p className=\"text-sm font-medium text-red-700\">{guestAddressError}</p>\n                            </div>\n                            {isDelivery === 'custom' && showShippoDelivery && (\n                              <button\n                                type=\"button\"\n                                onClick={handleUseShipping}\n                                className=\"shrink-0 self-start sm:self-auto rounded-full bg-hprimary px-4 py-2 text-sm font-semibold text-white hover:bg-hprimary/90 transition-colors\"\n                              >\n                                Use Shipping\n                              </button>\n                            )}\n                          </div>\n                        )}\n\n\n                        <div className=\"space-y-4\">\n                          <div className=\"grid grid-cols-2 gap-4\">\n                            <div>\n                              <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">Full Name <span className=\"text-red-400\">*</span></label>\n                              <Input placeholder=\"John Doe\" value={guestDeliveryAddress.name} onChange={(e) => { setGuestDeliveryAddress(p => ({ ...p, name: e.target.value })); setCustomDeliveryAddressError(null); }} />\n                            </div>\n                            <div>\n                              <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">Phone <span className=\"text-red-400\">*</span></label>\n                              <Input type=\"tel\" placeholder=\"+1 555 000-0000\" value={guestDeliveryAddress.phone} onChange={(e) => { setGuestDeliveryAddress(p => ({ ...p, phone: formatPhoneNumber(e.target.value) })); setCustomDeliveryAddressError(null); }} />\n                            </div>\n                          </div>\n                          <div>\n                            <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">Street Address <span className=\"text-red-400\">*</span></label>\n                            <Input placeholder=\"123 Main St\" value={guestDeliveryAddress.street1} onChange={(e) => { setGuestDeliveryAddress(p => ({ ...p, street1: e.target.value })); setGuestAddressError(null); setCustomDeliveryAddressError(null); clearGuestRates(); }} />\n                          </div>\n                          <div>\n                            <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">Apt, suite, floor (optional)</label>\n                            <Input placeholder=\"Apt 4B\" value={guestDeliveryAddress.street2 || ''} onChange={(e) => { setGuestDeliveryAddress(p => ({ ...p, street2: e.target.value })); setCustomDeliveryAddressError(null); clearGuestRates(); }} />\n                          </div>\n                          <div className=\"grid grid-cols-2 gap-4\">\n                            <div>\n                              <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">City <span className=\"text-red-400\">*</span></label>\n                              <Input placeholder=\"New York\" value={guestDeliveryAddress.city} onChange={(e) => { setGuestDeliveryAddress(p => ({ ...p, city: e.target.value })); setGuestAddressError(null); setCustomDeliveryAddressError(null); clearGuestRates(); }} />\n                            </div>\n                            <div>\n                              <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">State <span className=\"text-red-400\">*</span></label>\n                              <select\n                                value={guestDeliveryAddress.state}\n                                onChange={(e) => { setGuestDeliveryAddress(p => ({ ...p, state: e.target.value })); setGuestAddressError(null); setCustomDeliveryAddressError(null); clearGuestRates(); }}\n                                className=\"w-full h-10 px-3 border border-gray-200 rounded-xl text-sm text-gray-800 bg-white focus:outline-none focus:ring-2 focus:ring-hprimary-300 focus:border-hprimary-400\"\n                              >\n                                <option value=\"\">Select state</option>\n                                {US_STATES.map(s => (\n                                  <option key={s.abbr} value={s.abbr}>{s.name}</option>\n                                ))}\n                              </select>\n                            </div>\n                          </div>\n                          <div className=\"grid grid-cols-2 gap-4\">\n                            <div>\n                              <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">ZIP Code <span className=\"text-red-400\">*</span></label>\n                              <Input\n                                placeholder=\"10001\"\n                                value={guestDeliveryAddress.zip}\n                                onChange={(e) => {\n                                  const digits = e.target.value.replace(/\\D/g, '').slice(0, 5);\n                                  setGuestDeliveryAddress(p => ({ ...p, zip: digits }));\n                                  setGuestAddressError(null);\n                                  setCustomDeliveryAddressError(null);\n                                  clearGuestRates();\n                                }}\n                                inputMode=\"numeric\"\n                              />\n                            </div>\n                            <div>\n                              <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">Country</label>\n                              <Input value={guestDeliveryAddress.country} disabled className=\"bg-gray-50 text-gray-500 cursor-not-allowed\" />\n                            </div>\n                          </div>\n                        </div>\n                        <p className=\"mt-4 text-xs text-gray-400\">Your address will be saved to your account for future orders.</p>\n\n                        {/* Confirm / Get Rates button */}\n                        <button\n                          type=\"button\"\n                          onClick={validateAndProceed}\n                          disabled={guestAddressValidating || shippingRatesLoading || !guestDeliveryAddress.street1 || !guestDeliveryAddress.city || !guestDeliveryAddress.state || !guestDeliveryAddress.zip || !guestDeliveryAddress.name || !guestDeliveryAddress.phone}\n                          className=\"mt-4 w-full flex items-center justify-center gap-2 px-5 py-3 rounded-full bg-hprimary text-white font-medium text-sm hover:bg-hprimary/90 transition-all disabled:opacity-50 disabled:cursor-not-allowed\"\n                        >\n                          {guestAddressValidating ? (\n                            <>\n                              <Loader2 className=\"w-4 h-4 animate-spin\" />\n                              Confirming address...\n                            </>\n                          ) : shippingRatesLoading ? (\n                            <>\n                              <Loader2 className=\"w-4 h-4 animate-spin\" />\n                              Getting rates...\n                            </>\n                          ) : isDelivery === true ? (\n                            <>\n                              <Truck className=\"w-4 h-4\" />\n                              {guestAddressValidated ? 'Refresh Rates' : 'Get Shipping Rates'}\n                            </>\n                          ) : (\n                            <>\n                              <Check className=\"w-4 h-4\" />\n                              Confirm Address\n                            </>\n                          )}\n                        </button>\n                      </section>\n                    )\n                  )}\n\n                  {/* Address Section - only for delivery (authenticated users) */}\n                  {isAuthenticated && isDelivery !== null && isDelivery !== false && (\n                    activeShippingSection !== 'address' && selectedAddressId && !customDeliveryAddressError ? (\n                      <button\n                        type=\"button\"\n                        onClick={() => setActiveShippingSection('address')}\n                        className=\"w-full flex items-center gap-3 px-4 py-3.5 bg-gray-50 border border-gray-200 rounded-2xl hover:border-hprimary-200 hover:bg-hprimary-50/30 transition-all duration-200 text-left\"\n                      >\n                        <div className=\"w-9 h-9 rounded-xl bg-hprimary-100 flex items-center justify-center shrink-0\">\n                          <MapPin className=\"w-4 h-4 text-hprimary-600\" />\n                        </div>\n                        <div className=\"flex-1 min-w-0\">\n                          <p className=\"text-[11px] font-semibold text-gray-400 uppercase tracking-wide\">Delivery Address</p>\n                          <p className=\"text-sm font-semibold text-gray-800 mt-0.5 truncate\">\n                            {(() => { const a = userAddresses.find(x => x.id === selectedAddressId); return a ? `${a.street1}, ${a.city}` : ''; })()}\n                          </p>\n                        </div>\n                        <div className=\"shrink-0 flex items-center gap-2\">\n                          <div className=\"w-5 h-5 rounded-full bg-green-100 flex items-center justify-center\">\n                            <Check className=\"w-3 h-3 text-green-600\" />\n                          </div>\n                          <span className=\"text-xs font-medium text-gray-400\">Edit</span>\n                        </div>\n                      </button>\n                    ) : (\n                      <section className={`bg-white border-2 rounded-[24px] p-6 sm:p-8 transition-colors duration-200 ${hasAttemptedShippingContinue && !selectedAddressId ? 'border-red-300' : 'border-gray-100'}`}>\n                        <div className=\"flex items-center justify-between gap-4 mb-6\">\n                          <div className=\"flex items-center gap-3\">\n                            <div className={`w-10 h-10 rounded-xl flex items-center justify-center shrink-0 ${hasAttemptedShippingContinue && !selectedAddressId ? 'bg-red-100' : 'bg-hprimary-50'}`}>\n                              <MapPin className={`w-5 h-5 ${hasAttemptedShippingContinue && !selectedAddressId ? 'text-red-500' : 'text-hprimary-600'}`} />\n                            </div>\n                            <div>\n                              <h2 className=\"font-semibold text-[#2B4B7C] text-lg\">Delivery Address</h2>\n                              <p className=\"text-sm text-slate-500\">Temperature-aware packaging on every shipment</p>\n                            </div>\n                          </div>\n                          {hasAttemptedShippingContinue && !selectedAddressId && (\n                            <span className=\"shrink-0 text-xs font-semibold text-red-500 bg-red-50 border border-red-200 px-2 py-0.5 rounded-full\">\n                              Required\n                            </span>\n                          )}\n                        </div>\n\n                        {customDeliveryAddressError && (\n                          <div className=\"mb-4 p-3 bg-red-50 border border-red-200 rounded-xl flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n                            <div className=\"flex items-start gap-2\">\n                              <AlertCircle className=\"w-4 h-4 text-red-500 shrink-0 mt-0.5\" />\n                              <p className=\"text-sm font-medium text-red-700\">{customDeliveryAddressError}</p>\n                            </div>\n                            {showShippoDelivery && (\n                              <button\n                                type=\"button\"\n                                onClick={handleUseShipping}\n                                className=\"shrink-0 self-start sm:self-auto rounded-full bg-hprimary px-4 py-2 text-sm font-semibold text-white hover:bg-hprimary/90 transition-colors\"\n                              >\n                                Use Shipping\n                              </button>\n                            )}\n                          </div>\n                        )}\n\n                        <div className=\"grid grid-cols-1 gap-4 md:grid-cols-2\">\n                          <div className=\"md:col-span-2 space-y-4\">\n                            <div className=\"flex flex-col gap-2 sm:flex-row sm:items-center sm:justify-between\">\n                              <label className=\"block font-semibold\">\n                                Select Address\n                              </label>\n\n                              <Button\n                                type=\"button\"\n                                variant=\"outline-solid\"\n                                size=\"sm\"\n                                onClick={() => { setEditingAddress(null); setIsAddressModalOpen(true); }}\n                                className=\"w-full sm:w-auto justify-center sm:justify-start\"\n                              >\n                                <Plus className=\"h-4 w-4 mr-2\" />\n                                Add New Address\n                              </Button>\n                            </div>\n\n\n                            {userAddresses.length > 0 ? (\n                              <div className=\"grid gap-4\">\n                                {userAddresses.map(addr => (\n                                  <div\n                                    key={addr.id}\n                                    onClick={() => handleAddressSelect(addr)}\n                                    className={`group relative flex items-start gap-3 p-4 rounded-2xl border ${selectedAddressId === addr.id\n                                      ? 'border-hprimary-500 bg-hprimary-50 shadow-xs'\n                                      : 'border-slate-200 bg-white'\n                                      } cursor-pointer hover:border-hprimary-300 transition-colors`}\n                                  >\n                                    <input\n                                      type=\"radio\"\n                                      name=\"selectedAddress\"\n                                      value={addr.id}\n                                      checked={selectedAddressId === addr.id}\n                                      onChange={() => handleAddressSelect(addr)}\n                                      className=\"mt-1\"\n                                    />\n                                    <div className=\"flex-1\">\n                                      <div className=\"flex items-center justify-between\">\n                                        <div className=\"flex items-center gap-x-2\">\n                                          <p className=\"font-semibold text-slate-900\">{addr.name}</p>\n                                          {addr.isDefault && (\n                                            <span className=\"inline-flex items-center gap-1 rounded-full bg-green-100 px-2 py-1 text-xs font-semibold text-green-700\">\n                                              Default\n                                            </span>\n                                          )}\n                                        </div>\n                                        <div className=\"flex items-center gap-x-2\">\n                                          {/* Desktop Buttons */}\n                                          <div className=\"hidden sm:flex items-center gap-x-2\">\n                                            <button\n                                              type=\"button\"\n                                              onClick={(e) => { e.preventDefault(); e.stopPropagation(); setEditingAddress(addr); setIsAddressModalOpen(true); }}\n                                              className=\"inline-flex items-center gap-1 rounded-full border border-slate-200 px-2.5 py-0.5 text-xs font-medium text-slate-600 hover:border-hprimary-300 hover:text-hprimary-600\"\n                                            >\n                                              <Edit3 className=\"h-3 w-3\" />\n                                            </button>\n                                            {!addr.isDefault && (\n                                              <button\n                                                type=\"button\"\n                                                onClick={(e) => { e.preventDefault(); e.stopPropagation(); markAsDefault(addr.id); }}\n                                                className=\"inline-flex items-center gap-1 rounded-full border border-amber-200 px-2.5 py-0.5 text-xs font-semibold text-amber-600 hover:border-amber-300 hover:text-amber-700\"\n                                              >\n                                                <Star className=\"h-3 w-3\" />\n                                                Make default\n                                              </button>\n                                            )}\n                                            <button\n                                              type=\"button\"\n                                              onClick={(e) => {\n                                                e.preventDefault();\n                                                e.stopPropagation();\n                                                setAddressToDelete(addr.id);\n                                                setIsConfirmModalOpen(true);\n                                              }}\n                                              disabled={deletingId === addr.id}\n                                              className=\"inline-flex items-center gap-1 rounded-full border border-red-200 px-2.5 py-0.5 text-xs font-semibold text-red-600 hover:border-red-300 hover:text-red-700 disabled:opacity-50\"\n                                            >\n                                              {deletingId === addr.id ? (\n                                                <Loader2 className=\"h-3 w-3 animate-spin\" />\n                                              ) : (\n                                                <Trash2 className=\"h-3 w-3\" />\n                                              )}\n                                            </button>\n                                          </div>\n\n                                          {/* Mobile Menu */}\n                                          <div className=\"sm:hidden relative\" ref={activeMenuId === addr.id ? menuRef : null}>\n                                            <button\n                                              type=\"button\"\n                                              onClick={(e) => { e.preventDefault(); e.stopPropagation(); setActiveMenuId(activeMenuId === addr.id ? null : addr.id); }}\n                                              className=\"p-1 rounded-full hover:bg-slate-100 transition-colors\"\n                                            >\n                                              <MoreVertical className=\"h-5 w-5 text-hmuted\" />\n                                            </button>\n\n                                            <AnimatePresence>\n                                              {activeMenuId === addr.id && (\n                                                <motion.div\n                                                  initial={{ opacity: 0, scale: 0.95, y: -10 }}\n                                                  animate={{ opacity: 1, scale: 1, y: 0 }}\n                                                  exit={{ opacity: 0, scale: 0.95, y: -10 }}\n                                                  transition={{ duration: 0.15 }}\n                                                  className=\"absolute right-0 top-full mt-2 w-48 rounded-lg border border-slate-200 bg-white shadow-lg z-50 origin-top-right py-1\"\n                                                >\n                                                  <button\n                                                    type=\"button\"\n                                                    onClick={(e) => {\n                                                      e.preventDefault();\n                                                      e.stopPropagation();\n                                                      setEditingAddress(addr);\n                                                      setIsAddressModalOpen(true);\n                                                      setActiveMenuId(null);\n                                                    }}\n                                                    className=\"flex w-full items-center gap-2 px-4 py-2 text-sm text-slate-700 hover:bg-slate-50\"\n                                                  >\n                                                    <Edit3 className=\"h-4 w-4\" />\n                                                    Edit\n                                                  </button>\n                                                  {!addr.isDefault && (\n                                                    <button\n                                                      type=\"button\"\n                                                      onClick={(e) => {\n                                                        e.preventDefault();\n                                                        e.stopPropagation();\n                                                        markAsDefault(addr.id);\n                                                        setActiveMenuId(null);\n                                                      }}\n                                                      className=\"flex w-full items-center gap-2 px-4 py-2 text-sm text-amber-600 hover:bg-slate-50\"\n                                                    >\n                                                      <Star className=\"h-4 w-4\" />\n                                                      Make default\n                                                    </button>\n                                                  )}\n                                                  <div className=\"my-1 border-t border-slate-100\" />\n                                                  <button\n                                                    type=\"button\"\n                                                    onClick={(e) => {\n                                                      e.preventDefault();\n                                                      e.stopPropagation();\n                                                      setAddressToDelete(addr.id);\n                                                      setIsConfirmModalOpen(true);\n                                                      setActiveMenuId(null);\n                                                    }}\n                                                    disabled={deletingId === addr.id}\n                                                    className=\"flex w-full items-center gap-2 px-4 py-2 text-sm text-red-600 hover:bg-red-50 disabled:opacity-50\"\n                                                  >\n                                                    {deletingId === addr.id ? (\n                                                      <Loader2 className=\"h-4 w-4 animate-spin\" />\n                                                    ) : (\n                                                      <Trash2 className=\"h-4 w-4\" />\n                                                    )}\n                                                    Delete\n                                                  </button>\n                                                </motion.div>\n                                              )}\n                                            </AnimatePresence>\n                                          </div>\n                                        </div>\n                                      </div>\n                                      <p className=\"text-sm text-slate-600 mt-1\">{addr.street1}</p>\n                                      {addr.street2 && (\n                                        <p className=\"text-sm text-slate-600\">{addr.street2}</p>\n                                      )}\n                                      <p className=\"text-sm text-slate-600\">\n                                        {addr.city}, {addr.state} {addr.zip}\n                                      </p>\n                                      <p className=\"text-sm text-slate-600\">{addr.country}</p>\n                                      {addr.phone && (\n                                        <p className=\"text-sm text-slate-600 mt-1\">{addr.phone}</p>\n                                      )}\n                                    </div>\n                                  </div>\n                                ))}\n                              </div>\n                            ) : (\n                              <div className=\"text-center py-8 bg-slate-50 rounded-lg\">\n                                <MapPin className=\"h-12 w-12 mx-auto text-slate-400\" />\n                                <p className=\"mt-2 text-slate-600\">No addresses found</p>\n                                <p className=\"text-sm text-slate-500\">Add a new address to continue</p>\n                              </div>\n                            )}\n                          </div>\n                        </div>\n                      </section>\n                    )\n                  )}\n\n                  {/* Pickup Info */}\n                  {isDelivery === false && storeAddresses.length > 0 && (\n                    <section className=\"bg-white border-2 border-gray-100 rounded-[24px] p-6 sm:p-8\">\n                      <div className=\"flex items-center gap-3 mb-6\">\n                        <div className=\"w-10 h-10 rounded-xl bg-green-50 flex items-center justify-center shrink-0\">\n                          <MapPin className=\"w-5 h-5 text-green-600\" />\n                        </div>\n                        <div>\n                          <h2 className=\"text-lg font-semibold text-[#2B4B7C]\">Pickup Location</h2>\n                          <p className=\"text-sm text-gray-500\">Your order will be ready for collection here</p>\n                        </div>\n                      </div>\n                      <div className=\"space-y-3\">\n                        {storeAddresses.map(addr => (\n                          <div key={addr.id} className=\"flex items-start gap-4 bg-green-50/50 border border-green-100 rounded-2xl p-4\">\n                            <div className=\"w-9 h-9 rounded-xl bg-green-100 flex items-center justify-center shrink-0 mt-0.5\">\n                              <MapPin className=\"w-4 h-4 text-green-600\" />\n                            </div>\n                            <div>\n                              <p className=\"font-semibold text-gray-900\">{addr.name}</p>\n                              <p className=\"text-sm text-gray-600 mt-0.5\">{addr.street1}</p>\n                              <p className=\"text-sm text-gray-600\">{addr.city}, {addr.state} {addr.zip}</p>\n                            </div>\n                          </div>\n                        ))}\n                      </div>\n                    </section>\n                  )}\n\n                  {/* Shipping Options — for Shippo delivery (authenticated: requires selected address; guest: appears after \"Get Rates\") */}\n                  {isDelivery === true && (isAuthenticated ? !!selectedAddressId : shippingRates.length > 0 || shippingRatesLoading || !!shippingRatesError) && (\n                    activeShippingSection !== 'rate' && selectedShippingRateId ? (\n                      <button\n                        type=\"button\"\n                        onClick={() => setActiveShippingSection('rate')}\n                        className=\"w-full flex items-center gap-3 px-4 py-3.5 bg-gray-50 border border-gray-200 rounded-2xl hover:border-hprimary-200 hover:bg-hprimary-50/30 transition-all duration-200 text-left\"\n                      >\n                        <div className=\"w-9 h-9 rounded-xl bg-hprimary-100 flex items-center justify-center shrink-0\">\n                          <Truck className=\"w-4 h-4 text-hprimary-600\" />\n                        </div>\n                        <div className=\"flex-1 min-w-0\">\n                          <p className=\"text-[11px] font-semibold text-gray-400 uppercase tracking-wide\">Shipping Method</p>\n                          <p className=\"text-sm font-semibold text-gray-800 mt-0.5\">\n                            {tieredShippingRates.find(r => r.objectId === selectedShippingRateId)?.tierConfig?.label ?? 'Standard'} · {formatPrice(shippingPrice)}\n                          </p>\n                        </div>\n                        <div className=\"shrink-0 flex items-center gap-2\">\n                          <div className=\"w-5 h-5 rounded-full bg-green-100 flex items-center justify-center\">\n                            <Check className=\"w-3 h-3 text-green-600\" />\n                          </div>\n                          <span className=\"text-xs font-medium text-gray-400\">Edit</span>\n                        </div>\n                      </button>\n                    ) : (\n                      <div className=\"bg-white border-2 border-gray-100 rounded-[24px] p-6 sm:p-8\">\n                        <div className=\"flex items-center gap-3 mb-6\">\n                          <div className=\"w-10 h-10 rounded-xl bg-hprimary-50 flex items-center justify-center shrink-0\">\n                            <Truck className=\"w-5 h-5 text-hprimary-600\" />\n                          </div>\n                          <div>\n                            <h2 className=\"text-lg font-semibold text-[#2B4B7C]\">Shipping Method</h2>\n                            <p className=\"text-sm text-gray-500\">Choose your preferred delivery speed</p>\n                          </div>\n                        </div>\n\n                        {shippingRatesLoading ? (\n                          <div className=\"space-y-3\">\n                            {[1, 2, 3].map(i => (\n                              <div key={i} className=\"h-20 bg-gray-100 rounded-2xl animate-pulse\" />\n                            ))}\n                          </div>\n                        ) : shippingRatesError ? (\n                          <div className=\"flex items-start gap-3 p-4 bg-red-50 border border-red-200 rounded-xl\">\n                            <AlertCircle className=\"w-5 h-5 text-red-500 shrink-0 mt-0.5\" />\n                            <div>\n                              <p className=\"text-sm font-semibold text-red-700\">Shipping unavailable</p>\n                              <p className=\"text-sm text-red-600 mt-0.5\">{shippingRatesError}</p>\n                            </div>\n                          </div>\n                        ) : shippingRates && shippingRates.length > 0 ? (\n                          <div className=\"space-y-3\">\n                            {tieredShippingRates.map((rate) => {\n                              const isSelected = !!selectedShippingRateId && selectedShippingRateId === rate.objectId;\n                              return (\n                                <button\n                                  key={rate.objectId}\n                                  type=\"button\"\n                                  onClick={() => {\n                                    setSelectedShippingRateId(rate.objectId);\n                                    setShippingPrice(parseFloat(rate.amount));\n                                  }}\n                                  className={`relative w-full flex items-center gap-4 rounded-2xl border-2 p-4 text-left transition-all duration-200 ${isSelected\n                                    ? 'border-hprimary-400 bg-hprimary-50/80 shadow-sm'\n                                    : 'border-gray-200 bg-white hover:border-hprimary-200 hover:bg-gray-50/50'\n                                    }`}\n                                >\n                                  {/* Radio indicator */}\n                                  <div className={`shrink-0 w-5 h-5 rounded-full border-2 flex items-center justify-center transition-all ${isSelected ? 'border-hprimary-500 bg-hprimary-500' : 'border-gray-300'}`}>\n                                    {isSelected && <div className=\"w-2 h-2 rounded-full bg-white\" />}\n                                  </div>\n                                  {/* Carrier logo */}\n                                  <div className=\"shrink-0 w-12 h-12 rounded-xl overflow-hidden bg-white border border-gray-200 flex items-center justify-center p-1\">\n                                    <Image\n                                      src={rate.providerImage75 || PLACEHOLDER_IMAGE_SRC}\n                                      alt={rate.provider}\n                                      width={40}\n                                      height={40}\n                                      className=\"w-full h-full object-contain\"\n                                      onError={(e: any) => {\n                                        const target = e.target as HTMLImageElement;\n                                        target.style.display = 'none';\n                                      }}\n                                    />\n                                  </div>\n                                  {/* Details */}\n                                  <div className=\"flex-1 min-w-0\">\n                                    <div className=\"flex items-center gap-2 flex-wrap\">\n                                      <span className={`text-xs font-semibold px-2 py-0.5 rounded-full ${rate.tierConfig.bg} ${rate.tierConfig.text}`}>\n                                        {rate.tierConfig.label}\n                                      </span>\n                                      {rate.test && (\n                                        <span className=\"text-xs font-normal text-hprimary-600 bg-hprimary-50 border border-hprimary-100 px-1.5 py-0.5 rounded\">Test</span>\n                                      )}\n                                    </div>\n                                    <p className=\"text-xs text-gray-500 mt-1\">\n                                      {rate.estimatedDays\n                                        ? `Est. ${rate.estimatedDays} day${rate.estimatedDays !== 1 ? 's' : ''}`\n                                        : rate.durationTerms || 'Delivery time varies'}\n                                      {' · '}{rate.provider} {rate.servicelevel?.name}\n                                    </p>\n                                  </div>\n                                  {/* Price */}\n                                  <p className={`shrink-0 text-base font-bold ${isSelected ? 'text-hprimary-700' : 'text-gray-900'}`}>\n                                    {formatPrice(parseFloat(rate.amount))}\n                                  </p>\n                                </button>\n                              );\n                            })}\n                          </div>\n                        ) : (\n                          <div className=\"flex flex-col items-center justify-center py-10 text-center\">\n                            <div className=\"w-14 h-14 bg-gray-100 rounded-full flex items-center justify-center mb-3\">\n                              <Truck className=\"w-7 h-7 text-gray-400\" />\n                            </div>\n                            <p className=\"font-medium text-gray-700\">No shipping options available</p>\n                            <p className=\"text-sm text-gray-500 mt-1\">Please check the shipping address or try a different location.</p>\n                          </div>\n                        )}\n                      </div>\n                    )\n                  )}\n\n                  {/* Navigation Buttons */}\n                  <div className=\"flex flex-col items-end gap-3\">\n                    {/* Always-visible stock issues alert - shows when there are stock issues */}\n                    {stockIssues.length > 0 && (\n                      <div className=\"w-full flex items-center gap-3 px-4 py-3 rounded-xl bg-red-50 border border-red-200 text-red-600 text-sm font-medium\">\n                        <AlertCircle className=\"w-4 h-4 shrink-0\" />\n                        {stockIssues.length === 1\n                          ? '1 item is out of stock or exceeds available quantity'\n                          : `${stockIssues.length} items are out of stock or exceed available quantity`}\n                      </div>\n                    )}\n                    {hasAttemptedShippingContinue && isDelivery === null && (\n                      <div className=\"w-full flex items-center gap-3 px-4 py-3 rounded-xl bg-red-50 border border-red-200 text-red-600 text-sm font-medium\">\n                        <AlertCircle className=\"w-4 h-4 shrink-0\" />\n                        Please select a delivery method above to continue.\n                      </div>\n                    )}\n                    {hasAttemptedShippingContinue && isDelivery !== null && isDelivery !== false && (\n                      isAuthenticated ? !selectedAddressId : !guestDeliveryAddress.street1\n                    ) && (\n                      <div className=\"w-full flex items-center gap-3 px-4 py-3 rounded-xl bg-red-50 border border-red-200 text-red-600 text-sm font-medium\">\n                        <AlertCircle className=\"w-4 h-4 shrink-0\" />\n                        {isAuthenticated ? 'Please select or add a delivery address above to continue.' : 'Please fill in your delivery address above to continue.'}\n                      </div>\n                    )}\n                    {hasAttemptedShippingContinue && isDelivery === true && (isAuthenticated ? !!selectedAddressId : shippingRates.length > 0) && !selectedShippingRateId && !shippingRatesLoading && (\n                      <div className=\"w-full flex items-center gap-3 px-4 py-3 rounded-xl bg-red-50 border border-red-200 text-red-600 text-sm font-medium\">\n                        <AlertCircle className=\"w-4 h-4 shrink-0\" />\n                        Please select a shipping rate above to continue.\n                      </div>\n                    )}\n                    <button\n                      type=\"button\"\n                      onClick={() => {\n                        // Check for quantity-exceeds-inventory issues (not out of stock)\n                        const quantityIssues = stockIssues.filter(item => {\n                          const v = item.productVariantData;\n                          const maxQty = typeof v.inventoryCount === 'number' ? v.inventoryCount : 0;\n                          return maxQty > 0 && v.inventoryStatus !== ProductVariantPopulatedInventoryStatusEnum.OUTOFSTOCK;\n                        });\n\n                        if (quantityIssues.length > 0) {\n                          // Show modal for quantity adjustment\n                          setQuantityAdjustItems(quantityIssues);\n                          setShowQuantityModal(true);\n                        } else if (canProceedToPayment) {\n                          goToNextStep();\n                        } else if (stockIssues.length === 0) {\n                          // Surface guest info error first — scroll to top of form\n                          if (!isAuthenticated && (!guestInfo.firstname.trim() || !guestInfo.lastname.trim() || !guestInfo.email.trim())) {\n                            setGuestInfoError('Please fill in your name and email above to continue.');\n                            window.scrollTo({ top: 0, behavior: 'smooth' });\n                            return;\n                          }\n                          if (!isAuthenticated && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(guestInfo.email)) {\n                            setGuestInfoError('Please enter a valid email address.');\n                            window.scrollTo({ top: 0, behavior: 'smooth' });\n                            return;\n                          }\n                          // Only surface delivery/address errors when stock and guest info are resolved\n                          setHasAttemptedShippingContinue(true);\n                        }\n                        // If out of stock issues exist, the inline section already explains the block\n                      }}\n                      className={`flex items-center gap-2 px-6 py-3 rounded-full bg-hsecondary text-white font-medium hover:shadow-lg transition-all ${!canProceedToPayment ? 'opacity-50' : ''}`}\n                    >\n                      Continue to Payment\n                      <ArrowRight className=\"w-4 h-4\" />\n                    </button>\n                  </div>\n                </motion.div>\n              )}\n\n              {/* Quantity Adjustment Modal */}\n              <Modal\n                isOpen={showQuantityModal}\n                onClose={() => setShowQuantityModal(false)}\n                title=\"Adjust Quantity\"\n                size=\"lg\"\n              >\n                <div className=\"space-y-4\">\n                  <p className=\"text-gray-600\">\n                    The following items exceed the available quantity. Please adjust the quantity to continue:\n                  </p>\n                  <div className=\"space-y-3 max-h-[60vh] overflow-y-auto\">\n                    {quantityAdjustItems.map(item => {\n                      const v = item.productVariantData;\n                      const maxQty = typeof v.inventoryCount === 'number' ? v.inventoryCount : 0;\n\n                      return (\n                        <div\n                          key={item.productVariantId}\n                          className=\"flex items-center gap-4 bg-gray-50 border border-gray-200 rounded-xl p-3\"\n                        >\n                          {/* Thumbnail */}\n                          <div className=\"w-14 h-14 rounded-lg overflow-hidden bg-gray-100 shrink-0\">\n                            <Image\n                              src={v.media?.[0]?.file || PLACEHOLDER_IMAGE_SRC}\n                              alt={v.name}\n                              width={56}\n                              height={56}\n                              className=\"w-full h-full object-cover\"\n                            />\n                          </div>\n\n                          {/* Name and availability */}\n                          <div className=\"flex-1 min-w-0\">\n                            <p className=\"text-sm font-semibold text-gray-900 truncate\">{v.name}</p>\n                            <p className=\"text-xs text-amber-600 font-medium mt-0.5\">\n                              Only {maxQty} available\n                            </p>\n                          </div>\n\n                          {/* Quantity controls - Only Reduce to button, quantity adjustment is in cart */}\n                          <div className=\"flex items-center gap-2 shrink-0\">\n                            <button\n                              type=\"button\"\n                              onClick={() => {\n                                // Directly reduce to available quantity\n                                updateQuantity(item.productVariantId, maxQty);\n                              }}\n                              disabled={cartIsLoading || item.quantity === maxQty}\n                              className=\"text-xs font-semibold text-amber-600 border border-amber-200 bg-amber-50 rounded-full px-2.5 py-1.5 hover:bg-amber-100 transition-colors disabled:opacity-50\"\n                            >\n                              Reduce to {maxQty}\n                            </button>\n                          </div>\n                        </div>\n                      );\n                    })}\n                  </div>\n                  <div className=\"flex justify-end pt-4 border-t border-gray-200\">\n                    <button\n                      type=\"button\"\n                      onClick={() => {\n                        // Check if all quantity issues are resolved\n                        const remainingIssues = stockIssues.filter(item => {\n                          const v = item.productVariantData;\n                          const maxQty = typeof v.inventoryCount === 'number' ? v.inventoryCount : 0;\n                          return maxQty > 0 && v.inventoryStatus !== ProductVariantPopulatedInventoryStatusEnum.OUTOFSTOCK;\n                        });\n\n                        if (remainingIssues.length === 0) {\n                          setShowQuantityModal(false);\n                          goToNextStep();\n                        } else {\n                          setQuantityAdjustItems(remainingIssues);\n                        }\n                      }}\n                      className=\"px-6 py-2.5 rounded-full bg-hsecondary text-white font-medium hover:shadow-lg transition-all\"\n                    >\n                      Continue to Payment\n                    </button>\n                  </div>\n                </div>\n              </Modal>\n\n              {/* PAYMENT STEP */}\n              {currentStep === 'payment' && (\n                <motion.div\n                  ref={paymentRef}\n                  key=\"payment-step\"\n                  initial={{ opacity: 0, x: -20 }}\n                  animate={{ opacity: 1, x: 0 }}\n                  exit={{ opacity: 0, x: 20 }}\n                  transition={{ duration: 0.3 }}\n                  className=\"space-y-8\"\n                >\n                  {/* Payment Method */}\n                  <div className=\"bg-white border-2 border-gray-100 rounded-[24px] p-8\">\n                    <div className=\"flex items-center gap-3 mb-6\">\n                      <CreditCard className=\"w-6 h-6 text-[#2B4B7C]\" />\n                      <h2 className=\"text-xl font-semibold text-[#2B4B7C]\">Payment Method</h2>\n                    </div>\n\n                    <div className=\"space-y-3\">\n                      {availablePaymentMethods.map((pm) => {\n                        const active = paymentMethod === pm.value;\n\n                        return (\n                          <button\n                            key={pm.value}\n                            type=\"button\"\n                            onClick={() => { setPaymentMethod(pm.value); setStoredPaymentMethodId(null); setCardComplete(false); setCardError(null); }}\n                            className={`\n                            group relative flex w-full items-center justify-between rounded-xl border-2 p-3\n                            transition-all duration-200 ease-out\n                            focus:outline-hidden\n                            ${active\n                                ? `${pm.activeClass} shadow-md scale-[1.02]`\n                                : `${pm.className} border-gray-200 bg-white hover:shadow-xs hover:-translate-y-0.5`\n                              }\n                          `}\n                          >\n                            <div className=\"flex items-center gap-3\">\n                              <div\n                                className={`\n                                flex items-center justify-center rounded-lg p-2\n                                transition-colors duration-200\n                                ${pm.value === 'Card'\n                                    ? ' text-blue-600'\n                                    : pm.value === 'Cash'\n                                      ? ' text-amber-600'\n                                      : ' text-emerald-600'\n                                  }\n                                ${active ? 'opacity-80' : 'group-hover:opacity-90'}\n                              `}\n                              >\n                                {pm.icon}\n                              </div>\n\n                              <span className=\"text-sm font-semibold text-gray-900\">\n                                {pm.label}\n                              </span>\n                            </div>\n\n                            {active && (\n                              <div className=\"flex h-5 w-5 items-center justify-center rounded-full bg-current shrink-0\">\n                                <Check className=\"h-3 w-3 text-white\" />\n                              </div>\n                            )}\n                          </button>\n                        );\n                      })}\n                    </div>\n\n                    <p className=\"text-xs text-slate-500 mt-4 px-1\">\n                      {paymentMethod === 'Card' &&\n                        'Enter your card details below to pay securely.'}\n                      {paymentMethod === 'Cash' &&\n                        'Pay with cash at the time of delivery or pickup.'}\n                    </p>\n                  </div>\n\n                  {/* Stripe Card Element — only shown when Card is selected */}\n                  {paymentMethod === 'Card' && stripePromise && (\n                    <div className=\"bg-white border-2 border-gray-100 rounded-[24px] p-8\">\n                      <div className=\"flex items-center gap-3 mb-6\">\n                        <div className=\"w-10 h-10 rounded-xl bg-blue-50 flex items-center justify-center shrink-0\">\n                          <Lock className=\"w-5 h-5 text-blue-600\" />\n                        </div>\n                        <div>\n                          <h2 className=\"text-lg font-semibold text-[#2B4B7C]\">Card Details</h2>\n                          <p className=\"text-sm text-gray-500\">Your payment info is encrypted and secure</p>\n                        </div>\n                      </div>\n                      <Elements stripe={stripePromise}>\n                        <CardSection\n                          ref={cardSectionRef}\n                          onCardChange={(complete, errorMessage) => {\n                            setCardComplete(complete);\n                            if (complete) setCardError(null);\n                            else if (errorMessage) setCardError(errorMessage);\n                          }}\n                        />\n                      </Elements>\n                      {cardError && (\n                        <p className=\"mt-3 text-sm text-red-500 flex items-center gap-1.5\">\n                          <AlertCircle className=\"w-4 h-4 shrink-0\" />\n                          {cardError}\n                        </p>\n                      )}\n                    </div>\n                  )}\n\n                  {/* Navigation Buttons */}\n                  <div className=\"flex flex-col-reverse gap-3 sm:flex-row sm:justify-between\">\n                    <button\n                      type=\"button\"\n                      onClick={goToPreviousStep}\n                      className=\"flex items-center justify-center gap-2 w-full sm:w-auto px-6 py-3 rounded-full border border-hsecondary-500 text-hsecondary-500 font-medium hover:bg-hsecondary-500 hover:text-white transition-all\"\n                    >\n                      <ArrowLeft className=\"w-4 h-4\" />\n                      Back to Shipping\n                    </button>\n\n                    <button\n                      type=\"button\"\n                      onClick={async () => {\n                        if (paymentMethod === 'Card') {\n                          setIsCreatingPaymentMethod(true);\n                          setCardError(null);\n                          const result = await cardSectionRef.current?.createPaymentMethod();\n                          setIsCreatingPaymentMethod(false);\n                          if (!result || 'error' in result) {\n                            setCardError((result as any)?.error || 'Please check your card details.');\n                            return;\n                          }\n                          setStoredPaymentMethodId(result.id);\n                        }\n                        goToNextStep();\n                      }}\n                      disabled={!canProceedToReview || isCreatingPaymentMethod}\n                      className=\"flex items-center justify-center gap-2 w-full sm:w-auto px-6 py-3 rounded-full bg-hsecondary text-white font-medium hover:shadow-lg transition-all disabled:opacity-50 disabled:cursor-not-allowed\"\n                    >\n                      {isCreatingPaymentMethod ? (\n                        <>\n                          <span className=\"w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin\" />\n                          Validating card...\n                        </>\n                      ) : (\n                        <>\n                          Review Order\n                          <ArrowRight className=\"w-4 h-4\" />\n                        </>\n                      )}\n                    </button>\n                  </div>\n\n                </motion.div>\n              )}\n\n              {/* REVIEW STEP */}\n              {currentStep === 'review' && (\n                <motion.div\n                  ref={reviewRef}\n                  key=\"review-step\"\n                  initial={{ opacity: 0, x: -20 }}\n                  animate={{ opacity: 1, x: 0 }}\n                  exit={{ opacity: 0, x: 20 }}\n                  transition={{ duration: 0.3 }}\n                  className=\"space-y-8\"\n                >\n                  <div className=\"bg-white border-2 border-gray-100 rounded-[24px] p-8\">\n                    <div className=\"flex items-center gap-3 mb-6\">\n                      <ClipboardCheck className=\"w-6 h-6 text-[#2B4B7C]\" />\n                      <h2 className=\"text-xl font-semibold text-[#2B4B7C]\">Review Your Order</h2>\n                    </div>\n\n                    <div className=\"space-y-6\">\n                      {/* Delivery Summary */}\n                      <div className=\"border-b pb-6\">\n                        <h3 className=\"text-sm font-semibold text-gray-500 uppercase tracking-wide mb-3\">Delivery Method</h3>\n                        <div className=\"flex items-center gap-3\">\n                          {isDelivery === true && <Truck className=\"w-5 h-5 text-hprimary-500\" />}\n                          {isDelivery === 'custom' && <Truck className=\"w-5 h-5 text-hprimary-500\" />}\n                          {isDelivery === false && <MapPin className=\"w-5 h-5 text-hprimary-500\" />}\n                          <span className=\"font-medium text-gray-900\">\n                            {isDelivery === true && SHIPPO_DELIVERY_NAME}\n                            {isDelivery === 'custom' && (capabilities?.customDeliveryTitle || 'Store Delivery')}\n                            {isDelivery === false && 'Store Pickup'}\n                          </span>\n                        </div>\n                        {isDelivery && selectedAddressId && userAddresses.find(a => a.id === selectedAddressId) && (\n                          <p className=\"mt-2 text-sm text-gray-600\">\n                            {userAddresses.find(a => a.id === selectedAddressId)?.street1}, {userAddresses.find(a => a.id === selectedAddressId)?.city}\n                          </p>\n                        )}\n                      </div>\n\n                      {/* Payment Summary */}\n                      <div className=\"border-b pb-6\">\n                        <h3 className=\"text-sm font-semibold text-gray-500 uppercase tracking-wide mb-3\">Payment Method</h3>\n                        <div className=\"flex items-center gap-3\">\n                          {paymentMethod === 'Card' && <CreditCard className=\"w-5 h-5 text-blue-500\" />}\n                          {paymentMethod === 'Cash' && <PackageCheck className=\"w-5 h-5 text-amber-500\" />}\n                          <span className=\"font-medium text-gray-900\">\n                            {paymentMethod === 'Card' && 'Credit/Debit Card'}\n                            {paymentMethod === 'Cash' && 'Cash on Delivery/Pickup'}\n                          </span>\n                        </div>\n                      </div>\n\n                      {/* Order Items Preview */}\n                      <div>\n                        <h3 className=\"text-sm font-semibold text-gray-500 uppercase tracking-wide mb-3\">Order Items ({cart?.cartBody?.items?.length || 0})</h3>\n                        <div className=\"space-y-3\">\n                          {cart?.cartBody?.items?.slice(0, 3).map((item: any) => (\n                            <CheckoutItem key={item.productVariantId || item.id} item={item} />\n                          ))}\n                          {cart?.cartBody?.items?.length > 3 && (\n                            <p className=\"text-sm text-gray-500 text-center\">\n                              +{cart.cartBody.items.length - 3} more items\n                            </p>\n                          )}\n                        </div>\n                      </div>\n                    </div>\n                  </div>\n\n                  {/* Navigation Buttons */}\n                  <div className=\"flex flex-col-reverse gap-3 sm:flex-row sm:justify-between\">\n                    <button\n                      type=\"button\"\n                      onClick={goToPreviousStep}\n                      className=\"flex items-center justify-center gap-2 w-full sm:w-auto px-6 py-3 rounded-full border border-hsecondary-500 text-hsecondary-500 font-medium hover:bg-hsecondary-500 hover:text-white transition-all\"\n                    >\n                      <ArrowLeft className=\"w-4 h-4\" />\n                      Back to Payment\n                    </button>\n                    <button\n                      type=\"submit\"\n                      disabled={isSubmitting}\n                      className=\"flex sm:hidden items-center justify-center gap-2 w-full sm:w-auto px-6 py-3 rounded-full bg-hsecondary text-white font-medium hover:shadow-lg transition-all disabled:opacity-50 disabled:cursor-not-allowed\"\n                    >\n                      <CreditCard className=\"w-4 h-4\" />\n                      {isSubmitting ? 'Placing order...' : 'Place Secure Order'}\n                    </button>\n                  </div>\n\n                </motion.div>\n              )}\n            </AnimatePresence>\n          </motion.div>\n\n          <motion.aside\n            initial={{ opacity: 0, y: 32 }}\n            animate={{ opacity: 1, y: 0 }}\n            transition={{ duration: 0.5, ease: 'easeOut', delay: 0.1 }}\n            className=\"flex flex-col w-full lg:sticky lg:top-24 lg:col-span-1 order-1 lg:order-2\"\n          >\n            {/* Order Summary */}\n            <div className=\"bg-linear-to-br from-hsecondary/10 to-hsecondary/10 rounded-[24px] p-8 border-2 border-hsecondary/20 lg:sticky lg:top-24 w-full\">\n              <h2 className=\"font-semibold text-hsecondary mb-6 text-2xl\">Order Summary</h2>\n\n\n              {/* Cart Summary */}\n              <section className=\"mt-8 pt-6 border-t border-slate-100\">\n                <div className=\"space-y-4 mb-6 max-h-80 overflow-y-auto pr-1\">\n                  {cart?.cartBody?.items?.map((item: any) => {\n                    const variantId = item.productVariantId || item.productVariantData?.id || item.productVariantData?._id;\n                    const productId = item.productVariantData?.productId;\n                    const hasRestrictions = appliedCoupon && (\n                      (appliedCoupon.productsEligible?.length ?? 0) > 0 ||\n                      (appliedCoupon.variantsEligible?.length ?? 0) > 0\n                    );\n                    const isDiscounted = appliedCoupon && (\n                      !hasRestrictions || isProductEligibleForDiscount(productId, variantId, appliedCoupon)\n                    );\n                    return (\n                      <CheckoutItem key={item.productVariantId || item.id} item={item} isDiscounted={!!isDiscounted} />\n                    );\n                  })}\n                </div>\n\n                <div className=\"h-px bg-hsecondary/20 my-4\" />\n\n                {/* Coupon Code Section */}\n                <div className=\"mb-6\">\n                  <CouponCodeInput\n                    userId={user?.id}\n                    cartItems={cart?.cartBody?.items ?? []}\n                    className=\"mb-4\"\n                  />\n                </div>\n\n                {/* Totals */}\n                <div className=\"text-sm text-slate-600 space-y-3 py-4\">\n                  <div className=\"flex items-center justify-between\">\n                    <span>Subtotal</span>\n                    {cartIsFetching ? (\n                      <div className=\"h-4 w-16 bg-slate-200 rounded animate-pulse\" />\n                    ) : (\n                      <span className=\"font-semibold text-slate-900\">{formatPrice(subtotal)}</span>\n                    )}\n                  </div>\n                  {appliedCoupon && (\n                    <div className={`flex items-center justify-between ${discountAmount > 0 ? 'text-green-600' : 'text-slate-500'}`}>\n                      <span>Discount ({appliedCoupon.code})</span>\n                      {cartIsFetching ? (\n                        <div className=\"h-4 w-16 bg-current opacity-20 rounded animate-pulse\" />\n                      ) : (\n                        <span className=\"font-semibold\">\n                          {discountAmount > 0 ? `-${formatPrice(discountAmount)}` : 'Does not apply to items'}\n                        </span>\n                      )}\n                    </div>\n                  )}\n                  {isDelivery && (\n                    <div className=\"flex items-center justify-between\">\n                      <span>{isDelivery === 'custom' ? 'Local Delivery' : 'Shipping'}</span>\n                      {cartIsFetching ? (\n                        <div className=\"h-4 w-14 bg-slate-200 rounded animate-pulse\" />\n                      ) : isDelivery === 'custom' && customDeliveryAddressError ? (\n                        <span className=\"font-semibold text-red-600\">Unavailable</span>\n                      ) : (\n                        <span className=\"font-semibold\">{formatPrice(cart.shipping ?? shippingPrice)}</span>\n                      )}\n                    </div>\n                  )}\n                  {tax > 0 && (\n                    <div className=\"flex items-center justify-between\">\n                      <span>Estimated tax</span>\n                      {cartIsFetching ? (\n                        <div className=\"h-4 w-12 bg-slate-200 rounded animate-pulse\" />\n                      ) : (\n                        <span className=\"font-semibold\">{formatPrice(tax)}</span>\n                      )}\n                    </div>\n                  )}\n                  <div className=\"h-px bg-hsecondary/20 mt-6\" />\n\n                  <div className=\"flex items-center justify-between mb-6\">\n                    <span className=\"font-semibold text-[16px] text-hsecondary\">Total</span>\n                    {cartIsFetching ? (\n                      <div className=\"h-7 w-24 bg-hsecondary/20 rounded animate-pulse\" />\n                    ) : (\n                      <span className=\"font-bold text-[24px] text-hsecondary\">{formatPrice(total)}</span>\n                    )}\n                  </div>\n                </div>\n\n                <div className=\"bg-white/80 rounded-xl p-4\">\n                  <p className=\"text-[11px] text-[#676c80] leading-[1.6]\">\n                    <strong className=\"text-hsecondary\">Payment:</strong>{' '}\n                    {isDelivery === true\n                      ? 'Shipping Delivery orders require card payment.'\n                      : 'We accept cash, credit cards, and all major payment methods.'}\n                  </p>\n                </div>\n              </section>\n\n              {/* Checkout Button */}\n              {currentStep === 'review' && error && (\n                <div className=\"mt-4 p-4 rounded-xl bg-red-50 border border-red-200 text-red-600 text-sm font-medium animate-in fade-in slide-in-from-top-1 duration-200\">\n                  <div className=\"flex items-start gap-2\">\n                    <AlertCircle className=\"h-4 w-4 shrink-0 mt-0.5\" />\n                    <span className=\"break-words min-w-0\">{error}</span>\n                  </div>\n                </div>\n              )}\n              {Object.keys(errors).length > 0 && currentStep === 'review' && (\n                <div className=\"mt-4 p-4 rounded-xl bg-amber-50 border border-amber-200 text-amber-700 text-sm font-medium\">\n                  <div className=\"flex items-start gap-2\">\n                    <AlertCircle className=\"h-4 w-4 shrink-0 mt-0.5\" />\n                    <div>\n                      <p className=\"font-semibold mb-1\">Please fix the following errors:</p>\n                      <ul className=\"list-disc list-inside space-y-1\">\n                        {errors.shipping?.name && <li>{errors.shipping.name.message}</li>}\n                        {errors.shipping?.phone && <li>{errors.shipping.phone.message}</li>}\n                        {errors.shipping?.street1 && <li>{errors.shipping.street1.message}</li>}\n                        {errors.shipping?.city && <li>{errors.shipping.city.message}</li>}\n                        {errors.shipping?.state && <li>{errors.shipping.state.message}</li>}\n                        {errors.shipping?.zip && <li>{errors.shipping.zip.message}</li>}\n                        {errors.shipping?.country && <li>{errors.shipping.country.message}</li>}\n                        {!sameAsShipping && errors.billing?.name && <li>Billing: {errors.billing.name.message}</li>}\n                        {!sameAsShipping && errors.billing?.street1 && <li>Billing: {errors.billing.street1.message}</li>}\n                      </ul>\n                    </div>\n                  </div>\n                </div>\n              )}\n              {currentStep === 'review' && (\n                <button\n                  type=\"submit\"\n                  disabled={isSubmitting}\n                  className=\"font-medium text-[14px] px-6 py-3 rounded-full text-white hover:bg-hsecondary-500 hover:shadow-lg transition-all duration-300 mt-4 w-full bg-hsecondary hover:opacity-90 flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n                >\n                  <CreditCard className=\"h-5 w-5\" />\n                  {isSubmitting ? 'Placing order...' : 'Place Secure Order'}\n                </button>\n              )}\n\n              <p className=\"mt-4 flex items-center justify-center gap-2 text-xs text-slate-500\">\n                <Lock className=\"h-4 w-4\" />\n                Fully encrypted checkout — cancel anytime before shipment.\n              </p>\n            </div>\n\n          </motion.aside>\n\n        </div>\n      </form>\n      <AddressFormModal\n        isOpen={isAddressModalOpen}\n        onClose={() => setIsAddressModalOpen(false)}\n        initialAddress={editingAddress}\n        onAddressAdded={(addr) => {\n          refresh().then(() => {\n            setSelectedAddressId(addr.id);\n            setCustomDeliveryAddressError(null);\n            setValue('shipping.name', addr.name);\n            setValue('shipping.phone', addr.phone || '');\n            setValue('shipping.street1', addr.street1);\n            setValue('shipping.street2', addr.street2 || '');\n            setValue('shipping.city', addr.city);\n            setValue('shipping.state', addr.state);\n            setValue('shipping.zip', addr.zip);\n            setValue('shipping.country', addr.country);\n          });\n        }}\n        onAddressUpdated={() => {\n          refresh();\n        }}\n      />\n      <ConfirmModal\n        isOpen={isConfirmModalOpen}\n        onClose={() => {\n          setIsConfirmModalOpen(false);\n          setAddressToDelete(null);\n        }}\n        onConfirm={async () => {\n          if (addressToDelete) {\n            try {\n              await removeAddress(addressToDelete);\n              if (selectedAddressId === addressToDelete) {\n                setSelectedAddressId(null);\n                setCustomDeliveryAddressError(null);\n                hasInitializedAddressRef.current = true;\n                setValue('shipping.name', '');\n                setValue('shipping.phone', '');\n                setValue('shipping.street1', '');\n                setValue('shipping.street2', '');\n                setValue('shipping.city', '');\n                setValue('shipping.state', '');\n                setValue('shipping.zip', '');\n                setValue('shipping.country', 'United States');\n                if (currentStep !== 'shipping') {\n                  setCurrentStep('shipping');\n                }\n                setCompletedSteps(prev => prev.filter(s => s !== 'shipping'));\n              }\n              notification.success('Address deleted successfully', 'Deleted successfully');\n            } catch (e) {\n              notification.error('Failed to delete address', 'Failed to delete address');\n            }\n            setIsConfirmModalOpen(false);\n            setAddressToDelete(null);\n          }\n        }}\n        title=\"Delete Address\"\n        message=\"Are you sure you want to delete this address? This action cannot be undone.\"\n        confirmText=\"Delete\"\n        cancelText=\"Cancel\"\n        variant=\"danger\"\n      />\n      {/* </div> */}\n    </div>\n  );\n}\n","'use client';\n\nimport { useState, Suspense, useRef, useEffect } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { useRouter, useSearchParams } from 'next/navigation';\nimport Link from 'next/link';\nimport Image from 'next/image';\nimport { ArrowRight, CheckCircle2, Mail, RotateCcw, AlertCircle } from 'lucide-react';\nimport { Input } from '@/components/ui/Input';\nimport { useAuth } from '@/providers/AuthProvider';\nimport { useCart } from '@/providers/CartProvider';\nimport { useWishlist } from '@/providers/WishlistProvider';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { useTheme } from '@/providers/ThemeProvider';\nimport { AuthApi } from '@/lib/Apis/apis/auth-api';\nimport { getApiConfiguration } from '@/lib/api-adapter/config';\nimport { formatPhoneNumber } from '@/lib/utils/format';\n\n// ─── OTP helpers ─────────────────────────────────────────────────────────────\n\nfunction OtpCodeInput({\n  value,\n  onChange,\n  accentColor,\n}: {\n  value: string[];\n  onChange: (v: string[]) => void;\n  accentColor?: string;\n}) {\n  const inputRefs = useRef<(HTMLInputElement | null)[]>(Array(6).fill(null));\n\n  const handleChange = (idx: number, raw: string) => {\n    if (raw.length > 1) {\n      const digits = raw.replace(/\\D/g, '').slice(0, 6).split('');\n      const next = [...value];\n      for (let i = 0; i < 6; i++) next[i] = digits[i] ?? '';\n      onChange(next);\n      inputRefs.current[Math.min(digits.length, 5)]?.focus();\n      return;\n    }\n    const digit = raw.replace(/\\D/g, '');\n    const next = [...value];\n    next[idx] = digit;\n    onChange(next);\n    if (digit && idx < 5) inputRefs.current[idx + 1]?.focus();\n  };\n\n  const handleKeyDown = (idx: number, e: React.KeyboardEvent<HTMLInputElement>) => {\n    if (e.key === 'Backspace' && !value[idx] && idx > 0) {\n      inputRefs.current[idx - 1]?.focus();\n    }\n  };\n\n  return (\n    <div className=\"flex gap-2 justify-center\">\n      {Array.from({ length: 6 }).map((_, i) => (\n        <input\n          key={i}\n          ref={(el) => { inputRefs.current[i] = el; }}\n          type=\"text\"\n          inputMode=\"numeric\"\n          maxLength={6}\n          value={value[i] || ''}\n          onChange={(e) => handleChange(i, e.target.value)}\n          onKeyDown={(e) => handleKeyDown(i, e)}\n          className=\"w-11 h-12 sm:w-12 sm:h-14 text-center text-xl font-bold border-2 border-gray-200 rounded-xl focus:outline-none transition-colors\"\n          style={value[i] ? accentColor ? { borderColor: accentColor, color: accentColor } : undefined : undefined}\n        />\n      ))}\n    </div>\n  );\n}\n\nfunction useOtpCountdown() {\n  const [countdown, setCountdown] = useState(0);\n  const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);\n\n  const start = (seconds = 60) => {\n    if (intervalRef.current) clearInterval(intervalRef.current);\n    setCountdown(seconds);\n    intervalRef.current = setInterval(() => {\n      setCountdown((prev) => {\n        if (prev <= 1) { clearInterval(intervalRef.current!); return 0; }\n        return prev - 1;\n      });\n    }, 1000);\n  };\n\n  useEffect(() => () => { if (intervalRef.current) clearInterval(intervalRef.current); }, []);\n  return { countdown, start };\n}\n\n// ─── Slide variants ───────────────────────────────────────────────────────────\n\nconst slideVariants = {\n  enter: (dir: number) => ({ x: dir * 48, opacity: 0 }),\n  center: { x: 0, opacity: 1 },\n  exit: (dir: number) => ({ x: -dir * 48, opacity: 0 }),\n};\nconst slideTransition = { duration: 0.28, ease: [0.25, 0.1, 0.25, 1] };\n\n// ─── Accent style helpers ─────────────────────────────────────────────────────\n\nfunction accentBg(color?: string): React.CSSProperties | undefined {\n  return color ? { backgroundColor: color } : undefined;\n}\nfunction accentText(color?: string): React.CSSProperties | undefined {\n  return color ? { color } : undefined;\n}\n\n// ─── Left panel ───────────────────────────────────────────────────────────────\n\nfunction LeftPanel({ accentColor, panelImage, badge, features = [], quote }: {\n  accentColor?: string; panelImage?: string; badge?: string; features?: string[]; quote?: string;\n}) {\n  const { config } = useTheme();\n\n  return (\n    <div\n      className=\"hidden lg:flex lg:w-5/12 relative flex-col items-start gap-y-12 p-12 overflow-hidden rounded-l-2xl bg-hprimary\"\n      style={accentBg(accentColor)}\n    >\n      {panelImage && (\n        <>\n          <Image src={panelImage} alt=\"\" fill className=\"object-cover object-center\" />\n          <div className=\"absolute inset-0 bg-gradient-to-b from-black/40 via-black/20 to-black/50\" />\n        </>\n      )}\n\n      {badge && (\n        <div className=\"relative z-10 flex items-center gap-3 text-white/70 text-xs font-semibold tracking-[0.25em] uppercase\">\n          <span className=\"w-8 h-px bg-white/50\" />\n          {badge}\n        </div>\n      )}\n\n      <div className=\"relative z-10 space-y-8\">\n        <Image\n          src={config.logo}\n          alt={config.storeName}\n          width={220}\n          height={70}\n          className=\"brightness-0 invert opacity-90\"\n        />\n        {quote && (\n          <blockquote className=\"text-white/90 text-2xl italic leading-relaxed text-left\">\n            &quot;{quote}&quot;\n          </blockquote>\n        )}\n        {features.length > 0 && (\n          <ul className=\"space-y-3\">\n            {features.map((f) => (\n              <li key={f} className=\"flex items-center gap-3 text-white/80 text-sm\">\n                <CheckCircle2 className=\"h-4 w-4 text-white/60 shrink-0\" />\n                {f}\n              </li>\n            ))}\n          </ul>\n        )}\n      </div>\n\n      <div className=\"relative z-10\" />\n    </div>\n  );\n}\n\n// ─── Login form ───────────────────────────────────────────────────────────────\n\ntype LoginOtpStep = 'email' | 'code';\n\nfunction LoginForm({\n  onSwitchTab,\n  redirectUrl,\n  accentColor,\n}: {\n  onSwitchTab: () => void;\n  redirectUrl: string;\n  accentColor?: string;\n}) {\n  const router = useRouter();\n  const { loginWithSession } = useAuth();\n  const { mergeGuestCart } = useCart();\n  const { mergeGuestWishlist } = useWishlist();\n  const [otpStep, setOtpStep] = useState<LoginOtpStep>('email');\n  const [direction, setDirection] = useState(1);\n  const [otpEmail, setOtpEmail] = useState('');\n  const [otpCode, setOtpCode] = useState<string[]>(Array(6).fill(''));\n  const [isSendingOtp, setIsSendingOtp] = useState(false);\n  const [isVerifyingOtp, setIsVerifyingOtp] = useState(false);\n  const [error, setError] = useState<{ message: string; showRegisterLink?: boolean } | null>(null);\n  const { countdown, start: startCountdown } = useOtpCountdown();\n\n  const handleSendOtp = async () => {\n    if (!otpEmail.trim() || !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(otpEmail)) {\n      setError({ message: 'Enter a valid email address.' });\n      return;\n    }\n    setIsSendingOtp(true);\n    setError(null);\n    try {\n      await new AuthApi(getApiConfiguration()).sendOtp({ email: otpEmail });\n      startCountdown(60);\n      setDirection(1);\n      setOtpStep('code');\n    } catch (err: any) {\n      const msg = err?.response?.data?.message || 'Failed to send code. Try again.';\n      setError({ message: msg, showRegisterLink: err?.response?.status === 400 });\n    } finally {\n      setIsSendingOtp(false);\n    }\n  };\n\n  const handleVerifyOtp = async () => {\n    const code = otpCode.join('');\n    if (code.length < 6) { setError({ message: 'Enter all 6 digits of your code.' }); return; }\n    setIsVerifyingOtp(true);\n    setError(null);\n    try {\n      const res = await new AuthApi(getApiConfiguration()).verifyOtp({ email: otpEmail, code });\n      const data = (res as any).data;\n      await loginWithSession(data.authToken, data.userData);\n      await mergeGuestCart();\n      await mergeGuestWishlist();\n      router.push(redirectUrl);\n    } catch (err: any) {\n      setError({ message: err?.response?.data?.message || 'Invalid or expired code.' });\n    } finally {\n      setIsVerifyingOtp(false);\n    }\n  };\n\n  const handleResendOtp = async () => {\n    if (countdown > 0) return;\n    setError(null);\n    setOtpCode(Array(6).fill(''));\n    setIsSendingOtp(true);\n    try {\n      await new AuthApi(getApiConfiguration()).sendOtp({ email: otpEmail });\n      startCountdown(60);\n    } catch (err: any) {\n      setError({ message: err?.response?.data?.message || 'Failed to resend code.' });\n    } finally {\n      setIsSendingOtp(false);\n    }\n  };\n\n  return (\n    <>\n      {error && (\n        <div className=\"mb-5 flex items-start gap-3 rounded-xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700\">\n          <AlertCircle className=\"h-4 w-4 shrink-0 text-red-500 mt-0.5\" />\n          <span>\n            {error.message}\n            {error.showRegisterLink && (\n              <> <button onClick={onSwitchTab} className=\"underline font-medium\">Register here</button>.</>\n            )}\n          </span>\n        </div>\n      )}\n\n      <AnimatePresence initial={false} custom={direction} mode=\"wait\">\n        {otpStep === 'email' ? (\n          <motion.div\n            key=\"login-email\"\n            custom={direction}\n            variants={slideVariants}\n            initial=\"enter\"\n            animate=\"center\"\n            exit=\"exit\"\n            transition={slideTransition}\n            className=\"space-y-6\"\n          >\n            <div>\n              <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">\n                Email Address <span className=\"text-red-400\">*</span>\n              </label>\n              <Input\n                type=\"email\"\n                placeholder=\"your@email.com\"\n                value={otpEmail}\n                onChange={(e) => { setOtpEmail(e.target.value); setError(null); }}\n                leftElement={<Mail className=\"h-4 w-4 text-gray-400\" />}\n                onKeyDown={(e) => { if (e.key === 'Enter') { e.preventDefault(); handleSendOtp(); } }}\n              />\n            </div>\n            <button\n              type=\"button\"\n              disabled={isSendingOtp}\n              onClick={handleSendOtp}\n              className=\"w-full flex items-center justify-center gap-2 py-3.5 px-4 rounded-lg bg-hprimary text-white text-sm font-semibold transition-opacity disabled:opacity-60\"\n              style={accentBg(accentColor)}\n            >\n              {isSendingOtp ? 'Sending…' : <>Send Code <ArrowRight className=\"h-4 w-4\" /></>}\n            </button>\n          </motion.div>\n        ) : (\n          <motion.div\n            key=\"login-code\"\n            custom={direction}\n            variants={slideVariants}\n            initial=\"enter\"\n            animate=\"center\"\n            exit=\"exit\"\n            transition={slideTransition}\n            className=\"space-y-6\"\n          >\n            <div className=\"text-center\">\n              <p className=\"text-sm text-gray-600 mb-1\">\n                We sent a 6-digit code to <strong>{otpEmail}</strong>\n              </p>\n              <p className=\"text-xs text-gray-400\">The code expires in 10 minutes.</p>\n            </div>\n            <OtpCodeInput value={otpCode} onChange={setOtpCode} accentColor={accentColor} />\n            <button\n              type=\"button\"\n              disabled={isVerifyingOtp}\n              onClick={handleVerifyOtp}\n              className=\"w-full flex items-center justify-center gap-2 py-3.5 px-4 rounded-lg bg-hprimary text-white text-sm font-semibold transition-opacity disabled:opacity-60\"\n              style={accentBg(accentColor)}\n            >\n              {isVerifyingOtp ? 'Verifying…' : <>Verify Code <ArrowRight className=\"h-4 w-4\" /></>}\n            </button>\n            <div className=\"flex items-center justify-between text-sm text-gray-500\">\n              <button\n                type=\"button\"\n                onClick={() => { setDirection(-1); setOtpStep('email'); setError(null); }}\n                className=\"hover:text-gray-700 transition-colors\"\n              >\n                ← Change email\n              </button>\n              {countdown > 0 ? (\n                <span className=\"text-gray-400\">Resend in {countdown}s</span>\n              ) : (\n                <button\n                  type=\"button\"\n                  disabled={isSendingOtp}\n                  onClick={handleResendOtp}\n                  className=\"flex items-center gap-1.5 text-hprimary hover:opacity-70 font-medium disabled:opacity-50\"\n                  style={accentText(accentColor)}\n                >\n                  <RotateCcw className=\"h-3.5 w-3.5\" />\n                  {isSendingOtp ? 'Sending…' : 'Resend code'}\n                </button>\n              )}\n            </div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n\n      <div className=\"mt-8 pt-6 border-t border-gray-100 text-center\">\n        <p className=\"text-sm text-gray-500\">\n          Don&apos;t have an account?{' '}\n          <button\n            onClick={onSwitchTab}\n            className=\"font-medium text-hprimary hover:opacity-70 transition-opacity\"\n            style={accentText(accentColor)}\n          >\n            Create one\n          </button>\n        </p>\n      </div>\n    </>\n  );\n}\n\n// ─── Register form ────────────────────────────────────────────────────────────\n\ntype RegOtpStep = 'details' | 'code';\n\nfunction RegisterForm({\n  onSwitchTab,\n  accentColor,\n}: {\n  onSwitchTab: () => void;\n  accentColor?: string;\n}) {\n  const router = useRouter();\n  const { buildPath } = useBasePath();\n  const { loginWithSession } = useAuth();\n  const { mergeGuestCart } = useCart();\n  const { mergeGuestWishlist } = useWishlist();\n\n  const [regOtpStep, setRegOtpStep] = useState<RegOtpStep>('details');\n  const [direction, setDirection] = useState(1);\n  const [regOtpEmail, setRegOtpEmail] = useState('');\n  const [regOtpFirstname, setRegOtpFirstname] = useState('');\n  const [regOtpLastname, setRegOtpLastname] = useState('');\n  const [regOtpPhone, setRegOtpPhone] = useState('');\n  const [regOtpDob, setRegOtpDob] = useState('');\n  const [regOtpCode, setRegOtpCode] = useState<string[]>(Array(6).fill(''));\n  const [isSendingRegOtp, setIsSendingRegOtp] = useState(false);\n  const [isVerifyingRegOtp, setIsVerifyingRegOtp] = useState(false);\n  const [error, setError] = useState<{ message: string; showLoginLink?: boolean } | null>(null);\n  const { countdown: regCountdown, start: startRegCountdown } = useOtpCountdown();\n\n  const maxDobDate = (() => { const d = new Date(); d.setFullYear(d.getFullYear() - 18); return d.toISOString().split('T')[0]; })();\n  const minDobDate = (() => { const d = new Date(); d.setFullYear(d.getFullYear() - 120); return d.toISOString().split('T')[0]; })();\n\n  const getCleanPhone = (phone: string) => {\n    const digits = phone.replace(/\\D/g, '');\n    // digits includes the leading 1 from +1, so need 11 total for a US number\n    if (digits.length < 11) return undefined;\n    return phone.replace(/[\\s-]/g, '').trim();\n  };\n\n  const handleSendRegOtp = async () => {\n    if (!regOtpEmail.trim() || !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(regOtpEmail)) {\n      setError({ message: 'Enter a valid email address.' });\n      return;\n    }\n    if (!regOtpFirstname.trim() || !regOtpLastname.trim()) {\n      setError({ message: 'Enter your first and last name.' });\n      return;\n    }\n    const phoneDigits = regOtpPhone.replace(/\\D/g, '');\n    if (phoneDigits.length > 0 && phoneDigits.length < 11) {\n      setError({ message: 'Enter a valid 10-digit phone number.' });\n      return;\n    }\n    setIsSendingRegOtp(true);\n    setError(null);\n    try {\n      await new AuthApi(getApiConfiguration()).sendRegisterOtp({\n        email: regOtpEmail,\n        firstname: regOtpFirstname,\n        lastname: regOtpLastname,\n        phoneNumber: getCleanPhone(regOtpPhone),\n        dateOfBirth: regOtpDob ? new Date(regOtpDob) : undefined,\n      });\n      startRegCountdown(60);\n      setDirection(1);\n      setRegOtpStep('code');\n    } catch (err: any) {\n      const msg = err?.response?.data?.message || 'Failed to send code. Try again.';\n      setError({ message: msg, showLoginLink: err?.response?.status === 400 });\n    } finally {\n      setIsSendingRegOtp(false);\n    }\n  };\n\n  const handleVerifyRegOtp = async () => {\n    const code = regOtpCode.join('');\n    if (code.length < 6) { setError({ message: 'Enter all 6 digits of your code.' }); return; }\n    setIsVerifyingRegOtp(true);\n    setError(null);\n    try {\n      const res = await new AuthApi(getApiConfiguration()).verifyOtp({ email: regOtpEmail, code });\n      const data = (res as any).data;\n      await loginWithSession(data.authToken, data.userData);\n      await mergeGuestCart();\n      await mergeGuestWishlist();\n      router.push(buildPath('/'));\n    } catch (err: any) {\n      setError({ message: err?.response?.data?.message || 'Invalid or expired code.' });\n    } finally {\n      setIsVerifyingRegOtp(false);\n    }\n  };\n\n  const handleResendRegOtp = async () => {\n    if (regCountdown > 0) return;\n    setError(null);\n    setRegOtpCode(Array(6).fill(''));\n    setIsSendingRegOtp(true);\n    try {\n      await new AuthApi(getApiConfiguration()).sendRegisterOtp({\n        email: regOtpEmail,\n        firstname: regOtpFirstname,\n        lastname: regOtpLastname,\n        phoneNumber: getCleanPhone(regOtpPhone),\n        dateOfBirth: regOtpDob ? new Date(regOtpDob) : undefined,\n      });\n      startRegCountdown(60);\n    } catch (err: any) {\n      setError({ message: err?.response?.data?.message || 'Failed to resend code.' });\n    } finally {\n      setIsSendingRegOtp(false);\n    }\n  };\n\n  return (\n    <>\n      {error && (\n        <div className=\"mb-5 flex items-start gap-3 rounded-xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700\">\n          <AlertCircle className=\"h-4 w-4 shrink-0 text-red-500 mt-0.5\" />\n          <span>\n            {error.message}\n            {error.showLoginLink && (\n              <> <button onClick={onSwitchTab} className=\"underline font-medium\">Log in here</button>.</>\n            )}\n          </span>\n        </div>\n      )}\n\n      <AnimatePresence initial={false} custom={direction} mode=\"wait\">\n        {regOtpStep === 'details' ? (\n          <motion.div\n            key=\"reg-details\"\n            custom={direction}\n            variants={slideVariants}\n            initial=\"enter\"\n            animate=\"center\"\n            exit=\"exit\"\n            transition={slideTransition}\n            className=\"space-y-5\"\n          >\n            <div className=\"grid grid-cols-2 gap-3\">\n              <div>\n                <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">First name <span className=\"text-red-400\">*</span></label>\n                <Input placeholder=\"Alex\" value={regOtpFirstname} onChange={(e) => { setRegOtpFirstname(e.target.value); setError(null); }} />\n              </div>\n              <div>\n                <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">Last name <span className=\"text-red-400\">*</span></label>\n                <Input placeholder=\"Morgan\" value={regOtpLastname} onChange={(e) => { setRegOtpLastname(e.target.value); setError(null); }} />\n              </div>\n            </div>\n            <div>\n              <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">Email Address <span className=\"text-red-400\">*</span></label>\n              <Input\n                type=\"email\"\n                placeholder=\"you@example.com\"\n                value={regOtpEmail}\n                onChange={(e) => { setRegOtpEmail(e.target.value); setError(null); }}\n                leftElement={<Mail className=\"h-4 w-4 text-gray-400\" />}\n              />\n            </div>\n            <div>\n              <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">Phone Number <span className=\"text-gray-400 font-normal\">(optional)</span></label>\n              <Input\n                type=\"tel\"\n                placeholder=\"+1 555 000-0000\"\n                value={regOtpPhone}\n                onChange={(e) => setRegOtpPhone(formatPhoneNumber(e.target.value))}\n              />\n            </div>\n            <div>\n              <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">Date of Birth <span className=\"text-gray-400 font-normal\">(optional)</span></label>\n              <Input\n                type=\"date\"\n                value={regOtpDob}\n                max={maxDobDate}\n                min={minDobDate}\n                onChange={(e) => setRegOtpDob(e.target.value)}\n              />\n            </div>\n            <button\n              type=\"button\"\n              disabled={isSendingRegOtp}\n              onClick={handleSendRegOtp}\n              className=\"w-full flex items-center justify-center gap-2 py-3 px-4 rounded-lg bg-hprimary text-white text-sm font-semibold transition-opacity disabled:opacity-60\"\n              style={accentBg(accentColor)}\n            >\n              {isSendingRegOtp ? 'Sending code…' : <>Create Account <ArrowRight className=\"h-4 w-4\" /></>}\n            </button>\n          </motion.div>\n        ) : (\n          <motion.div\n            key=\"reg-code\"\n            custom={direction}\n            variants={slideVariants}\n            initial=\"enter\"\n            animate=\"center\"\n            exit=\"exit\"\n            transition={slideTransition}\n            className=\"space-y-6\"\n          >\n            <div className=\"text-center\">\n              <p className=\"text-sm text-gray-600 mb-1\">\n                We sent a 6-digit code to <strong>{regOtpEmail}</strong>\n              </p>\n              <p className=\"text-xs text-gray-400\">The code expires in 10 minutes.</p>\n            </div>\n            <OtpCodeInput value={regOtpCode} onChange={setRegOtpCode} accentColor={accentColor} />\n            <button\n              type=\"button\"\n              disabled={isVerifyingRegOtp}\n              onClick={handleVerifyRegOtp}\n              className=\"w-full flex items-center justify-center gap-2 py-3 px-4 rounded-lg bg-hprimary text-white text-sm font-semibold transition-opacity disabled:opacity-60\"\n              style={accentBg(accentColor)}\n            >\n              {isVerifyingRegOtp ? 'Verifying…' : <>Verify Code <ArrowRight className=\"h-4 w-4\" /></>}\n            </button>\n            <div className=\"flex items-center justify-between text-sm text-gray-500\">\n              <button\n                type=\"button\"\n                onClick={() => { setDirection(-1); setRegOtpStep('details'); setError(null); }}\n                className=\"hover:text-gray-700 transition-colors\"\n              >\n                ← Edit details\n              </button>\n              {regCountdown > 0 ? (\n                <span className=\"text-gray-400\">Resend in {regCountdown}s</span>\n              ) : (\n                <button\n                  type=\"button\"\n                  disabled={isSendingRegOtp}\n                  onClick={handleResendRegOtp}\n                  className=\"flex items-center gap-1.5 text-hprimary hover:opacity-70 font-medium disabled:opacity-50\"\n                  style={accentText(accentColor)}\n                >\n                  <RotateCcw className=\"h-3.5 w-3.5\" />\n                  {isSendingRegOtp ? 'Sending…' : 'Resend code'}\n                </button>\n              )}\n            </div>\n          </motion.div>\n        )}\n      </AnimatePresence>\n\n      <p className=\"text-center text-sm text-gray-500 mt-6\">\n        Already have an account?{' '}\n        <button\n          onClick={onSwitchTab}\n          className=\"font-medium text-hprimary hover:opacity-70 transition-opacity\"\n          style={accentText(accentColor)}\n        >\n          Sign in\n        </button>\n      </p>\n    </>\n  );\n}\n\n// ─── Auth content ─────────────────────────────────────────────────────────────\n\ntype Tab = 'login' | 'register';\n\nexport interface AuthScreenProps {\n  /** Which tab to show initially. Defaults to 'login'. */\n  initialTab?: Tab;\n  /** Hex/CSS color for the left panel background, submit buttons, and accent links. */\n  panelColor?: string;\n  /** Hex/CSS value for the full page background. Defaults to white. */\n  pageBackground?: string;\n  /** Image URL for the left panel background. */\n  panelImage?: string;\n  /** Badge text shown at the top of the panel (e.g. \"Est. 1993\"). */\n  badge?: string;\n  /** Bullet-point feature list shown in the panel. */\n  features?: string[];\n  /** Pull quote shown in the panel. */\n  quote?: string;\n}\n\nfunction AuthContent({\n  initialTab = 'login',\n  panelColor: panelColorProp,\n  pageBackground: pageBackgroundProp,\n  panelImage: panelImageProp,\n  badge: badgeProp,\n  features: featuresProp,\n  quote: quoteProp,\n}: AuthScreenProps) {\n  const router = useRouter();\n  const { buildPath } = useBasePath();\n  const { config } = useTheme();\n  const searchParams = useSearchParams();\n  const redirectUrl = searchParams?.get('redirect') || buildPath('/');\n  const { user, isLoading } = useAuth();\n  const tabFromQuery = (searchParams?.get('tab') as Tab) ?? initialTab;\n  const [tab, setTab] = useState<Tab>(tabFromQuery);\n  const [direction, setDirection] = useState(0);\n\n  const accentColor = panelColorProp ?? config.authPage?.panelColor;\n  const pageBackground = pageBackgroundProp ?? config.authPage?.pageBackground;\n  const panelImage = panelImageProp ?? config.authPage?.backgroundImage;\n  const badge = badgeProp ?? config.authPage?.badge;\n  const features = featuresProp ?? config.authPage?.features;\n  const quote = quoteProp ?? config.authPage?.quote;\n\n  const switchTab = (next: Tab) => {\n    setDirection(next === 'register' ? 1 : -1);\n    setTab(next);\n  };\n\n  if (!isLoading && user) {\n    router.push(redirectUrl);\n    return null;\n  }\n\n  return (\n    <div className=\"min-h-screen bg-white flex flex-col\" style={pageBackground ? { background: pageBackground } : undefined}>\n      <div className=\"max-w-sm sm:max-w-6xl flex mx-auto w-full justify-center rounded-2xl overflow-hidden mt-24 sm:mt-12 mb-24\">\n        <LeftPanel accentColor={accentColor} panelImage={panelImage} badge={badge} features={features} quote={quote} />\n\n        {/* Right panel */}\n        <div className=\"flex-1 flex items-center justify-center px-6 py-12 bg-white rounded-r-2xl overflow-y-auto\">\n          <div className=\"w-full max-w-md\">\n            {/* Header */}\n            <div className=\"overflow-hidden mb-8\">\n              <AnimatePresence mode=\"wait\" custom={direction}>\n                <motion.div\n                  key={`header-${tab}`}\n                  custom={direction}\n                  variants={slideVariants}\n                  initial=\"enter\"\n                  animate=\"center\"\n                  exit=\"exit\"\n                  transition={slideTransition}\n                >\n                  <p\n                    className=\"text-xs font-semibold tracking-[0.2em] text-hprimary/50 uppercase mb-2\"\n                    style={accentColor ? { color: `${accentColor}80` } : undefined}\n                  >\n                    {tab === 'login' ? 'Welcome back' : 'Get Started'}\n                  </p>\n                  <h1 className=\"text-3xl text-gray-900 mb-1\">\n                    {tab === 'login' ? 'Sign In' : 'Create Account'}\n                  </h1>\n                  <p className=\"text-sm text-gray-500\">\n                    {tab === 'login'\n                      ? 'Enter your email to receive a sign-in code.'\n                      : 'Join our community for personalized care.'}\n                  </p>\n                </motion.div>\n              </AnimatePresence>\n            </div>\n\n            {/* Tabs */}\n            <div className=\"relative flex gap-8 border-b border-gray-200 mb-8\">\n              {(['login', 'register'] as Tab[]).map((t) => (\n                <button\n                  key={t}\n                  onClick={() => switchTab(t)}\n                  className={`relative pb-3 text-sm transition-colors ${\n                    tab === t\n                      ? 'font-semibold text-hprimary cursor-default'\n                      : 'font-medium text-gray-400 hover:text-gray-600'\n                  }`}\n                  style={tab === t ? accentText(accentColor) : undefined}\n                >\n                  {t === 'login' ? 'Sign In' : 'Create Account'}\n                  {tab === t && (\n                    <motion.span\n                      layoutId=\"tab-underline\"\n                      className=\"absolute bottom-0 left-0 right-0 h-0.5 rounded-full bg-hprimary\"\n                      style={accentBg(accentColor)}\n                      transition={{ type: 'spring', stiffness: 500, damping: 40 }}\n                    />\n                  )}\n                </button>\n              ))}\n            </div>\n\n            {/* Sliding form area */}\n            <div className=\"overflow-hidden\">\n              <AnimatePresence mode=\"wait\" custom={direction}>\n                <motion.div\n                  key={tab}\n                  custom={direction}\n                  variants={slideVariants}\n                  initial=\"enter\"\n                  animate=\"center\"\n                  exit=\"exit\"\n                  transition={slideTransition}\n                >\n                  {tab === 'login' ? (\n                    <LoginForm\n                      onSwitchTab={() => switchTab('register')}\n                      redirectUrl={redirectUrl}\n                      accentColor={accentColor}\n                    />\n                  ) : (\n                    <RegisterForm\n                      onSwitchTab={() => switchTab('login')}\n                      accentColor={accentColor}\n                    />\n                  )}\n                </motion.div>\n              </AnimatePresence>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport function AuthScreen(props: AuthScreenProps) {\n  return (\n    <Suspense fallback={<div className=\"flex min-h-screen items-center justify-center\">Loading…</div>}>\n      <AuthContent {...props} />\n    </Suspense>\n  );\n}\n","'use client';\n\nimport Link from 'next/link';\nimport { useBasePath } from '@/providers/BasePathProvider';\n\nexport function PrivacyScreen() {\n  const { buildPath } = useBasePath();\n\n  return (\n    <main className=\"min-h-screen bg-white px-4 py-12 flex justify-center\">\n      <div className=\"w-full max-w-3xl\">\n        {/* Back */}\n        <Link href={buildPath('/')} className=\"text-sm text-hprimary hover:underline\">\n          ← Back to Home\n        </Link>\n\n        {/* Header */}\n        <h1 className=\"mt-4 text-3xl font-bold text-hsecondary\">Privacy Policy</h1>\n        <p className=\"mt-1 text-sm text-gray-500\">Last Updated: December 15, 2025</p>\n\n        {/* HIPAA Notice */}\n        <div className=\"mt-6 border-l-4 border-l-hprimary bg-hprimary/10 p-4 text-sm text-hsecondary\">\n          <h2 className=\"text-md font-bold\">HIPAA Compliance Notice:</h2>\n          Holmdel Pharmacy Care is committed to protecting your privacy and complies with the Health\n          Insurance Portability and Accountability Act (HIPAA) and all applicable privacy\n          regulations.\n        </div>\n\n        {/* 1 */}\n        <section className=\"mt-8\">\n          <h2 className=\"text-lg font-bold text-hsecondary\">1. Information We Collect</h2>\n\n          <h3 className=\"mt-4 font-bold text-hsecondary\">Personal Information</h3>\n          <p className=\"mt-2 pl-5 text-sm text-hmuted\">\n            When you create an account or use our services, we may collect:\n          </p>\n          <ul className=\"mt-2 list-disc pl-10 text-sm text-hmuted space-y-1\">\n            <li>Name, email address, phone number</li>\n            <li>Mailing address and delivery information</li>\n            <li>Date of birth and age verification</li>\n            <li>Payment information (processed securely by third parties)</li>\n          </ul>\n\n          <h3 className=\"mt-4 font-bold text-hsecondary\">Protected Health Information (PHI)</h3>\n          <p className=\"mt-2 pl-5 text-sm text-hmuted\">\n            For pharmacy services, we collect health-related information including:\n          </p>\n          <ul className=\"mt-2 list-disc pl-10 text-sm text-hmuted space-y-1\">\n            <li>Prescription information and medication history</li>\n            <li>Insurance information</li>\n            <li>Allergies and medical conditions</li>\n            <li>Healthcare provider information</li>\n            <li>Emergency contact information</li>\n          </ul>\n\n          <h3 className=\"mt-4 font-bold text-hsecondary\">Automatically Collected Information</h3>\n          <ul className=\"mt-2 list-disc pl-10 text-sm text-hmuted space-y-1\">\n            <li>Browser type and version</li>\n            <li>Device information and IP address</li>\n            <li>Pages visited and time spent on our website</li>\n            <li>Referring websites and exit pages</li>\n          </ul>\n        </section>\n\n        {/* 2 */}\n        <section className=\"mt-6\">\n          <h2 className=\"text-lg font-semibold text-hsecondary\">2. How We Use Your Information</h2>\n\n          <h3 className=\"mt-3 font-bold text-hsecondary\">Pharmacy Services</h3>\n          <ul className=\"mt-2 list-disc pl-10 text-sm text-hmuted space-y-1\">\n            <li>Processing and dispensing prescriptions</li>\n            <li>Verifying insurance coverage and processing claims</li>\n            <li>Providing medication counseling and drug interaction checks</li>\n            <li>Coordinating with your healthcare providers</li>\n            <li>Maintaining your medication history</li>\n          </ul>\n\n          <h3 className=\"mt-4 font-bold text-hsecondary\">E-commerce and General Services</h3>\n          <ul className=\"mt-2 list-disc pl-10 text-sm text-hmuted space-y-1\">\n            <li>Processing orders and arranging delivery or pickup</li>\n            <li>Communicating about orders and services</li>\n            <li>Sending important updates and notifications</li>\n            <li>Improving our website and services</li>\n            <li>Fraud prevention and security</li>\n          </ul>\n\n          <h3 className=\"mt-4 font-bold text-hsecondary\">Marketing Communications (Optional)</h3>\n          <p className=\"mt-2 text-sm text-hmuted\">\n            With your consent, we may send promotional emails about new products, special offers, or\n            health tips. You can opt out at any time.\n          </p>\n        </section>\n\n        {/* 3 */}\n        <section className=\"mt-6\">\n          <h2 className=\"text-lg font-semibold text-hsecondary\">\n            3. Information Sharing and Disclosure\n          </h2>\n          <p className=\"mt-2 pl-5 mb-4 text-md text-hsecondary font-bold\">\n            We Share Information Only:\n          </p>\n          <ul className=\"mt-2 list-disc pl-10 text-sm text-hmuted space-y-1\">\n            <li>\n              <strong className=\"text-hsecondary\">With Healthcare Providers:</strong> As necessary\n              for your treatment and care coordination\n            </li>\n            <li>\n              <strong className=\"text-hsecondary\">With Insurance Companies:</strong> For claims\n              processing and coverage verification\n            </li>\n            <li>\n              <strong className=\"text-hsecondary\">With Service Providers:</strong> Trusted third\n              parties who assist in our operations (e.g., delivery services, payment processors)\n            </li>\n            <li>\n              <strong className=\"text-hsecondary\">As Required by Law:</strong> To comply with legal\n              obligations, court orders, or regulatory requirements\n            </li>\n            <li>\n              <strong className=\"text-hsecondary\">For Public Health:</strong> As required for\n              reporting adverse drug events or public health emergencies\n            </li>\n          </ul>\n\n          <div className=\"mt-6 border-l-4 border-l-hprimary-600 bg-hprimary-600/10 p-4 text-sm text-hsecondary\">\n            <span className=\"font-bold\">We never sell your personal or health information</span> to\n            third parties for marketing purposes.\n          </div>\n        </section>\n\n        {/* 4 */}\n        <section className=\"mt-6\">\n          <h2 className=\"text-lg font-semibold text-hsecondary\">4. Your Privacy Rights</h2>\n          <p className=\"mt-2 pl-5 mb-4 text-sm text-hmuted\">\n            Under HIPAA and other privacy laws, you have the right to:\n          </p>\n          <ul className=\"mt-2 list-disc pl-10 text-sm text-hmuted space-y-1 py-2\">\n            <li>\n              <strong className=\"text-hsecondary\">Access:</strong> Request copies of your health\n              information\n            </li>\n            <li>\n              <strong className=\"text-hsecondary\">Amendment:</strong> Request corrections to your\n              health information\n            </li>\n            <li>\n              <strong className=\"text-hsecondary\">Accounting:</strong> Request a list of disclosures\n              of your health information\n            </li>\n            <li>\n              <strong className=\"text-hsecondary\">Restrictions:</strong> Request limits on how we\n              use or share your information\n            </li>\n            <li>\n              <strong className=\"text-hsecondary\">Confidential Communications:</strong> Request to\n              receive communications in a specific way\n            </li>\n            <li>\n              <strong className=\"text-hsecondary\">Opt-Out:</strong> Unsubscribe from marketing\n              communications\n            </li>\n            <li>\n              <strong className=\"text-hsecondary\">Data Deletion:</strong> Request deletion of\n              certain personal information (subject to legal and regulatory requirements)\n            </li>\n          </ul>\n          <p className=\"mt-2 text-sm text-hmuted\">\n            To exercise these rights, please contact us at 732-787-6666 or\n            Holmdelpharmacycare@gmail.com.\n          </p>\n        </section>\n\n        {/* 5 */}\n        <section className=\"mt-6\">\n          <h2 className=\"text-lg font-semibold text-hsecondary\">5. Data Security</h2>\n          <p className=\"mt-2 pl-5 mb-4 text-sm text-hmuted\">\n            We implement comprehensive security measures to protect your information:\n          </p>\n          <ul className=\"mt-2 list-disc pl-10 text-sm text-hmuted space-y-1 py-2\">\n            <li>Encryption of data in transit and at rest</li>\n            <li>Secure servers and network infrastructure</li>\n            <li>Regular security audits and updates</li>\n            <li>Staff training on privacy and security practices</li>\n            <li>Restricted access to sensitive information</li>\n            <li>Secure disposal of physical and electronic records</li>\n          </ul>\n          <p className=\"mt-2 text-sm text-hmuted\">\n            While we strive to protect your information, no method of transmission over the internet\n            is 100% secure. We encourage you to use strong passwords and protect your account\n            credentials.\n          </p>\n        </section>\n\n        {/* 6 */}\n        <section className=\"mt-6\">\n          <h2 className=\"text-lg font-semibold text-hsecondary\">\n            6. Cookies and Tracking Technologies\n          </h2>\n          <p className=\"mt-2 pl-5 mb-4 text-sm text-hmuted\">\n            We use cookies and similar technologies to enhance your experience on our website:\n          </p>\n          <ul className=\"mt-2 list-disc pl-10 text-sm text-hmuted space-y-1 py-2\">\n            <li>\n              <strong className=\"text-hsecondary\">Essential Cookies:</strong> Required for website\n              functionality\n            </li>\n            <li>\n              <strong className=\"text-hsecondary\">Analytics Cookies:</strong> Help us understand how\n              visitors use our site\n            </li>\n            <li>\n              <strong className=\"text-hsecondary\">Preference Cookies:</strong> Remember your\n              settings and preferences\n            </li>\n          </ul>\n          <p className=\"mt-2 text-sm text-hmuted\">\n            You can control cookies through your browser settings, but disabling certain cookies may\n            limit website functionality.\n          </p>\n        </section>\n\n        {/* 7 */}\n        <section className=\"mt-6\">\n          <h2 className=\"text-lg font-semibold text-hsecondary\">7. Children&apos;s Privacy</h2>\n          <p className=\"mt-2 text-sm text-hmuted\">\n            Our services are not directed to children under 13. We do not knowingly collect personal\n            information from children under 13 without parental consent. If you believe we have\n            inadvertently collected such information, please contact us immediately.\n          </p>\n        </section>\n\n        {/* 8 */}\n        <section className=\"mt-6\">\n          <h2 className=\"text-lg font-semibold text-hsecondary\">8. Data Retention</h2>\n          <p className=\"mt-2 pl-5 mb-4 text-sm text-hmuted\">\n            We retain your information for as long as necessary to:\n          </p>\n          <ul className=\"mt-2 list-disc pl-10 text-sm text-hmuted space-y-1 py-2\">\n            <li>Provide our services and maintain your account</li>\n            <li>Comply with legal, regulatory, and professional obligations</li>\n            <li>Resolve disputes and enforce our agreements</li>\n            <li>Maintain accurate medical and business records</li>\n          </ul>\n          <p className=\"mt-2 text-sm text-hmuted\">\n            Prescription records are maintained in accordance with state and federal pharmacy\n            regulations.\n          </p>\n        </section>\n\n        {/* 9 */}\n        <section className=\"mt-6\">\n          <h2 className=\"text-lg font-semibold text-hsecondary\">\n            9. Changes to This Privacy Policy\n          </h2>\n          <p className=\"mt-2 text-sm text-hmuted\">\n            We may update this Privacy Policy from time to time. We will notify you of any material\n            changes by posting the new policy on this page and updating the &quot;Last Updated&quot;\n            date. We encourage you to review this policy periodically.\n          </p>\n        </section>\n\n        {/* 10 */}\n        <section className=\"mt-6\">\n          <h2 className=\"text-lg font-semibold text-hsecondary\">10. Contact Us</h2>\n          <p className=\"mt-2 pl-5 mb-4 text-sm text-hmuted py-2\">\n            If you have questions about this Privacy Policy or our privacy practices, or to exercise\n            your privacy rights, please contact:\n          </p>\n\n          <div className=\"mt-3 rounded-xl border bg-hprimary/5 p-6 text-sm text-hmuted\">\n            <p className=\"font-bold text-hsecondary py-2\">Privacy Officer</p>\n            <p className=\"font-bold py-2 text-hsecondary\">Holmdel Pharmacy Care</p>\n            <p>2145 Route 35, Holmdel, NJ 07733</p>\n            <p>Phone: 732-787-6666</p>\n            <p>Email: holmdelpharmacycare@gmail.com</p>\n          </div>\n          <p className=\"mt-2 text-sm text-hmuted py-2\">\n            For formal HIPAA privacy complaints, you may also contact the U.S. Department of Health\n            and Human Services.\n          </p>\n        </section>\n\n        <div className=\"w-full border-b border-gray-200 mt-12\" />\n\n        {/* Footer */}\n        <div className=\"mt-10\">\n          <Link\n            href={buildPath('/')}\n            className=\"inline-flex rounded-full bg-hprimary px-6 py-2 text-sm font-bold text-white hover:opacity-80\"\n          >\n            Return to Home\n          </Link>\n        </div>\n      </div>\n    </main>\n  );\n}\n","'use client';\n\nimport React from 'react';\nimport { LucideIcon } from 'lucide-react';\n\ninterface Tab {\n    id: string;\n    label: string;\n    icon: LucideIcon;\n}\n\ninterface TabNavigationProps {\n    tabs: Tab[];\n    activeTab: string;\n    onTabChange: (tabId: string) => void;\n}\n\nexport function TabNavigation({ tabs, activeTab, onTabChange }: TabNavigationProps) {\n    return (\n        <div className=\"mx-auto flex items-center max-w-7xl px-4 py-4\">\n            <nav className=\"flex overflow-x-auto scrollbar-hide justify-start sm:justify-center gap-4 w-full\" aria-label=\"Account tabs\">\n                {tabs.map((tab) => {\n                    const isActive = activeTab === tab.id;\n                    const Icon = tab.icon;\n\n                    return (\n                        <button\n                            key={tab.id}\n                            onClick={() => onTabChange(tab.id)}\n                            className={`\n                flex items-center gap-2 px-6 py-3 mt-2 text-sm font-medium whitespace-nowrap\n                border-b-2 transition-colors\n                ${isActive\n                                    ? 'bg-hsecondary text-white rounded-xl hover:transition-all hover:duration-300 hover:ease-in-out hover:-translate-y-1'\n                                    : 'bg-white text-hmuted rounded-xl hover:text-hsecondary hover:transition-all hover:duration-150 hover:ease-in-out hover:-translate-y-1'\n                                }\n              `}\n                            aria-current={isActive ? 'page' : undefined}\n                        >\n                            <Icon className=\"h-5 w-5\" />\n                            {tab.label}\n                        </button>\n                    );\n                })}\n            </nav>\n        </div>\n    );\n}\n","'use client';\n\nimport { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';\nimport { OrdersApi } from '@/lib/Apis';\nimport { getApiConfiguration } from '@/lib/api-adapter';\nimport { PopulatedOrder } from '@/lib/Apis/models';\nimport { useAuth } from '@/providers/AuthProvider';\n\nexport function useOrders(\n  page: number = 1,\n  limit: number = 10,\n  orderStatus?: string,\n  paymentStatus?: string\n) {\n  const queryClient = useQueryClient();\n  const { user } = useAuth();\n  const resolvedUserId = (user as any)?._id || (user as any)?.id;\n\n  const { data, isLoading, error, refetch } = useQuery({\n    queryKey: ['orders', resolvedUserId, page, limit, orderStatus, paymentStatus],\n    queryFn: async () => {\n      const response = await new OrdersApi(getApiConfiguration()).getAllOrders(\n        paymentStatus && paymentStatus !== 'All' ? paymentStatus : undefined,\n        orderStatus && orderStatus !== 'All' ? orderStatus : undefined,\n        page,\n        limit,\n        undefined,\n        undefined,\n        undefined,\n        resolvedUserId\n      );\n      return {\n        orders: response.data.data || [],\n        pagination: {\n          page: response.data.page || page,\n          limit: response.data.limit || limit,\n          total: response.data.total ?? 0,\n          totalPages: response.data.totalPages || 1,\n        },\n      };\n    },\n    staleTime: 2 * 60 * 1000, // 2 minutes\n    enabled: !!resolvedUserId,\n  });\n\n  const deleteMutation = useMutation({\n    mutationFn: async (id: string) => {\n      await new OrdersApi(getApiConfiguration()).deleteOrder(id);\n      return id;\n    },\n    onSuccess: () => {\n      queryClient.invalidateQueries({ queryKey: ['orders'] });\n    },\n  });\n\n  const deleteOrder = async (id: string) => {\n    try {\n      await deleteMutation.mutateAsync(id);\n      return true;\n    } catch (err) {\n      console.error('Failed to delete order:', err);\n      return false;\n    }\n  };\n\n  return {\n    orders: data?.orders || [],\n    isLoading,\n    error: error as Error | null,\n    pagination: data?.pagination || { page: 1, limit: 10, total: 0, totalPages: 0 },\n    refetch,\n    deleteOrder,\n  };\n}\n\nexport function useOrder(id: string, guestEmail?: string) {\n  const { user, isAuthReady } = useAuth();\n  const resolvedUserId = (user as any)?._id || (user as any)?.id;\n  const { data, isLoading, error, refetch } = useQuery({\n    // Scope cached order details to the authenticated account. Without the\n    // user id, switching accounts in one browser could reuse another user's\n    // still-fresh order response without making a new API request.\n    queryKey: ['order', id, guestEmail ?? null, resolvedUserId ?? null],\n    queryFn: async () => {\n      const api = new OrdersApi(getApiConfiguration());\n      if (guestEmail) {\n        // Guest access via public track endpoint — no auth token needed\n        const response = await api.trackOrder(id, guestEmail);\n        return response.data;\n      }\n      const response = await api.getSingleOrder(id);\n      return response.data;\n    },\n    staleTime: 3 * 60 * 1000, // 3 minutes\n    enabled: !!id && (!!guestEmail || (isAuthReady && !!resolvedUserId)),\n  });\n\n  return {\n    order: data || null,\n    isLoading: (!guestEmail && !isAuthReady) || isLoading,\n    error: error as Error | null,\n    refetch\n  };\n}\n\nexport function useCurrentOrders() {\n  const { data, isLoading, error, refetch } = useQuery({\n    queryKey: ['currentOrders'],\n    queryFn: async () => {\n      const response = await new OrdersApi(getApiConfiguration()).getUserOrders();\n      return response.data || [];\n    },\n    staleTime: 2 * 60 * 1000, // 2 minutes\n  });\n\n  return {\n    orders: data || [],\n    isLoading,\n    error: error as Error | null,\n    refetch\n  };\n}\n","import React from 'react';\n\ninterface BadgeProps {\n  children: React.ReactNode;\n  variant?: 'primary' | 'secondary' | 'success' | 'warning' | 'danger' | 'gray';\n  size?: 'sm' | 'md';\n  className?: string;\n}\n\nconst inlineStyles: Partial<Record<BadgeProps['variant'] & string, React.CSSProperties>> = {\n  success: { backgroundColor: '#10B98114', color: '#10B981', border: '1px solid #10B9811A' },\n  warning: { backgroundColor: '#FEF3C780', color: '#92400E', border: '1px solid #92400E1A' },\n};\n\nexport function Badge({ children, variant = 'primary', size = 'md', className = '' }: BadgeProps) {\n  const variants = {\n    primary: 'bg-hprimary-100 text-hprimary-700 border-hprimary-200',\n    secondary: 'bg-hsecondary-100 text-hsecondary-700 border-hsecondary-200',\n    success: '',\n    warning: '',\n    danger: 'bg-red-100 text-red-700 border-red-200',\n    gray: 'bg-gray-100 text-gray-700 border-gray-200',\n  };\n\n  const sizes = {\n    sm: 'px-2 py-1 text-xs',\n    md: 'px-3 py-1 text-sm',\n  };\n\n  return (\n    <span\n      className={`inline-flex items-center font-medium rounded-full border ${variants[variant]} ${sizes[size]} ${className}`}\n      style={inlineStyles[variant]}\n    >\n      {children}\n    </span>\n  );\n}\n\n","'use client';\n\nimport React from 'react';\nimport { User, Mail, Phone, CalendarDays, Package, CheckCircle, Heart, Clock, Edit } from 'lucide-react';\nimport { useAuth } from '@/providers/AuthProvider';\nimport { useCurrentOrders } from '@/hooks/useOrders';\nimport { useWishlist } from '@/providers/WishlistProvider';\nimport { formatPrice, formatDate } from '@/lib/utils/format';\nimport { Badge } from './ui/Badge';\nimport { Button } from './ui/Button';\nimport { useRouter } from 'next/navigation';\nimport { useBasePath } from '@/providers/BasePathProvider';\n\nexport function AccountOverviewTab() {\n    const { user } = useAuth();\n    const { orders, isLoading: ordersLoading } = useCurrentOrders();\n    const { getWishlistCount } = useWishlist();\n    const router = useRouter();\n    const { buildPath } = useBasePath();\n\n    if (!user) return null;\n\n    // Calculate stats\n    const totalOrders = orders?.length || 0;\n    const deliveredOrders = orders?.filter(order => order.orderStatus === 'Delivered')?.length || 0;\n    const inTransitOrders = orders?.filter(order =>\n        order.orderStatus === 'Out for Delivery' ||\n        order.orderStatus === 'Picking & Packing' ||\n        order.orderStatus === 'In Fulfillment'\n    )?.length || 0;\n    const savedItemsCount = getWishlistCount();\n\n    // Get recent orders (last 3)\n    const recentOrders = orders?.slice(0, 3) || [];\n\n    const stats = [\n        {\n            icon: Package,\n            label: 'Total Orders',\n            value: totalOrders,\n            color: 'bg-hsecondary/80 text-[#fff]',\n        },\n        {\n            icon: CheckCircle,\n            label: 'Delivered',\n            value: deliveredOrders,\n            color: 'bg-hsecondary/80 text-[#fff]',\n        },\n        {\n            icon: Heart,\n            label: 'Saved Items',\n            value: savedItemsCount,\n            color: 'bg-hsecondary/80 text-[#fff]',\n        },\n        {\n            icon: Clock,\n            label: 'In Transit',\n            value: inTransitOrders,\n            color: 'bg-hsecondary/80 text-[#fff]',\n        },\n    ];\n\n    return (\n        <div className=\"pb-6 px-3 space-y-6 pb-24\">\n            {/* Stats Cards */}\n            <div className=\"grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-4 gap-4\">\n                {stats.map((stat, index) => {\n                    const Icon = stat.icon;\n                    return (\n                        <div\n                            key={index}\n                            className=\"rounded-xl border border-slate-200 bg-white p-4 hover:shadow-md transition-shadow\"\n                        >\n                            <div className=\"flex items-center gap-3\">\n                                <div className={`flex h-12 w-12 items-center justify-center rounded-lg ${stat.color}`}>\n                                    <Icon className=\"h-6 w-6\" />\n                                </div>\n                                <div>\n                                    <p className=\"text-2xl font-bold text-hsecondary\">{stat.value}</p>\n                                    <p className=\"text-sm text-slate-600\">{stat.label}</p>\n                                </div>\n                            </div>\n                        </div>\n                    );\n                })}\n            </div>\n\n            {/* Profile Information */}\n            <div className=\"rounded-xl border border-slate-200 bg-white p-6\">\n                <div className=\"flex items-center justify-between mb-4\">\n                    <h3 className=\"text-lg font-semibold text-hsecondary\">Profile Information</h3>\n                    <button\n                        onClick={() => router.push(buildPath('/account/edit'))}\n                        className=\"flex items-center gap-1 text-sm text-hprimary-600 hover:text-hprimary-700\"\n                    >\n                        <Edit className=\"h-4 w-4\" />\n                        Edit\n                    </button>\n                </div>\n                <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n                    <div className=\"flex items-start gap-3\">\n                        <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-hprimary-100\">\n                            <User className=\"h-5 w-5 text-hsecondary\" />\n                        </div>\n                        <div>\n                            <p className=\"text-xs text-hmuted\">Full Name</p>\n                            <p className=\"text-sm font-medium text-hsecondary\">\n                                {user.firstname} {user.lastname}\n                            </p>\n                        </div>\n                    </div>\n                    <div className=\"flex items-start gap-3\">\n                        <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-hprimary-100\">\n                            <Mail className=\"h-5 w-5 text-hsecondary\" />\n                        </div>\n                        <div>\n                            <p className=\"text-xs text-hmuted\">E-mail Address</p>\n                            <p className=\"text-sm font-medium text-hsecondary\">{user.email}</p>\n                        </div>\n                    </div>\n                    <div className=\"flex items-start gap-3\">\n                        <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-hprimary-100\">\n                            <Phone className=\"h-5 w-5 text-hsecondary\" />\n                        </div>\n                        <div>\n                            <p className=\"text-xs text-hmuted\">Phone Number</p>\n                            <p className=\"text-sm font-medium text-hsecondary\">\n                                {user.phoneNumber || 'Not provided'}\n                            </p>\n                        </div>\n                    </div>\n                    <div className=\"flex items-start gap-3\">\n                        <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-hprimary-100\">\n                            <CalendarDays className=\"h-5 w-5 text-hsecondary\" />\n                        </div>\n                        <div>\n                            <p className=\"text-xs text-hmuted\">Date of Birth</p>\n                            <p className=\"text-sm font-medium text-hsecondary\">\n                                {user.dateOfBirth ? formatDate(user.dateOfBirth) : 'Not provided'}\n                            </p>\n                        </div>\n                    </div>\n                </div>\n            </div>\n\n            {/* Recent Orders */}\n            <div className=\"rounded-xl border border-slate-200 bg-white p-6\">\n                <div className=\"flex items-center justify-between mb-4\">\n                    <h3 className=\"text-lg font-semibold text-hsecondary\">Recent Orders</h3>\n                    <button\n                        onClick={() => {\n                            // Switch to orders tab\n                            const event = new CustomEvent('switchTab', { detail: 'orders' });\n                            window.dispatchEvent(event);\n                        }}\n                        className=\"text-sm text-hprimary-600 hover:text-hprimary-700\"\n                    >\n                        View All →\n                    </button>\n                </div>\n                {ordersLoading ? (\n                    <div className=\"space-y-3\">\n                        {Array.from({ length: 3 }).map((_, index) => (\n                            <div\n                                key={index}\n                                className=\"h-16 animate-pulse rounded-lg bg-slate-50\"\n                            />\n                        ))}\n                    </div>\n                ) : recentOrders.length === 0 ? (\n                    <p className=\"text-sm text-hmuted text-center py-8\">No orders yet</p>\n                ) : (\n                    <div className=\"space-y-3\">\n                        {recentOrders.map((order) => (\n                            <div\n                                key={order._id}\n                                onClick={() => router.push(buildPath(`/account/orders/${order._id}`))}\n                                className=\"flex items-center justify-between rounded-lg bg-slate-50 p-4 hover:bg-slate-100 transition-colors cursor-pointer\"\n                            >\n                                <div className=\"flex items-center gap-3\">\n                                    <div className=\"flex h-10 w-10 items-center justify-center rounded-lg bg-white\">\n                                        <Package className=\"h-5 w-5 text-slate-600\" />\n                                    </div>\n                                    <div>\n                                        <div className='flex items-center gap-2'>\n                                            <p className=\"text-sm font-medium text-hsecondary\">\n                                                ORD-{order._id?.slice(-6).toUpperCase()}\n                                            </p>\n                                            <div className='hidden sm:flex items-center gap-2'>\n                                                <Badge className='p-1 text-xs'\n                                                    variant={\n                                                        order.orderStatus === 'Delivered' ? 'success' :\n                                                            (order.orderStatus === 'Out for Delivery' || order.orderStatus === 'Picking & Packing' || order.orderStatus === 'In Fulfillment') ? 'primary' :\n                                                                order.orderStatus === 'Pending' ? 'warning' : 'gray'\n                                                    }>\n                                                    {order.orderStatus}\n                                                </Badge>\n                                            </div>\n                                        </div>\n                                        <p className=\"text-xs text-hmuted\">\n                                            {formatDate(order.createdAt || new Date(), 'short')}\n                                        </p>\n                                        <div className='sm:hidden flex items-center gap-2 mt-2 w-fit'>\n                                            <Badge className=' text-xs'\n                                                variant={\n                                                    order.orderStatus === 'Delivered' ? 'success' :\n                                                        (order.orderStatus === 'Out for Delivery' || order.orderStatus === 'Picking & Packing' || order.orderStatus === 'In Fulfillment') ? 'primary' :\n                                                            order.orderStatus === 'Pending' ? 'warning' : 'gray'\n                                                }>\n                                                {order.orderStatus}\n                                            </Badge>\n                                        </div>\n                                    </div>\n\n                                </div>\n                                <div className=\"flex items-center gap-3\">\n                                    <p className=\"text-sm font-semibold text-hsecondary\">\n                                        {formatPrice(order.grandTotal || 0)}\n                                    </p>\n                                </div>\n                            </div>\n                        ))}\n                    </div>\n                )}\n            </div>\n        </div>\n    );\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { CartItemPopulated } from '@/lib/Apis/models/cart-item-populated';\nimport { ProductsApi } from '@/lib/Apis/apis/products-api';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\n\ninterface OrderProductData {\n    images: Record<string, string>;\n    names: Record<string, string>;\n}\n\n/**\n * Fetches product images and names for order items whose variant has no media / no productName.\n * Returns maps of productId -> image URL and productId -> product name.\n */\nexport function useOrderProductImages(items: CartItemPopulated[] | undefined): Record<string, string> {\n    const [productImages, setProductImages] = useState<Record<string, string>>({});\n\n    useEffect(() => {\n        if (!items?.length) return;\n        const itemsWithoutImage = items.filter(item => !item.productVariantData?.media?.length);\n        if (!itemsWithoutImage.length) return;\n\n        const uniqueProductIds = [...new Set(\n            itemsWithoutImage.map(item => (item.productVariantData as any).productId).filter(Boolean)\n        )] as string[];\n        if (!uniqueProductIds.length) return;\n\n        const api = new ProductsApi(AXIOS_CONFIG);\n        Promise.all(\n            uniqueProductIds.map(async productId => {\n                try {\n                    const res = await api.getSingleProduct(productId);\n                    const image = res.data?.media?.[0]?.file;\n                    return image ? [productId, image] as const : null;\n                } catch {\n                    return null;\n                }\n            })\n        ).then(results => {\n            const map: Record<string, string> = {};\n            results.forEach(r => { if (r) map[r[0]] = r[1]; });\n            setProductImages(map);\n        });\n    }, [items]);\n\n    return productImages;\n}\n\n/**\n * Fetches product images and names for order items.\n * Returns maps of productId -> image URL and productId -> product name.\n */\nexport function useOrderProductData(items: CartItemPopulated[] | undefined): OrderProductData {\n    const [data, setData] = useState<OrderProductData>({ images: {}, names: {} });\n\n    useEffect(() => {\n        if (!items?.length) return;\n\n        const uniqueProductIds = [...new Set(\n            items.map(item => (item.productVariantData as any).productId).filter(Boolean)\n        )] as string[];\n        if (!uniqueProductIds.length) return;\n\n        const api = new ProductsApi(AXIOS_CONFIG);\n        Promise.all(\n            uniqueProductIds.map(async productId => {\n                try {\n                    const res = await api.getSingleProduct(productId);\n                    return { productId, image: res.data?.media?.[0]?.file, name: (res.data as any)?.name } as const;\n                } catch {\n                    return null;\n                }\n            })\n        ).then(results => {\n            const images: Record<string, string> = {};\n            const names: Record<string, string> = {};\n            results.forEach(r => {\n                if (!r) return;\n                if (r.image) images[r.productId] = r.image;\n                if (r.name) names[r.productId] = r.name;\n            });\n            setData({ images, names });\n        });\n    }, [items]);\n\n    return data;\n}\n","'use client';\n\nimport { PLACEHOLDER_IMAGE_SRC } from '@/lib/constants/assets';\n\nimport React, { useMemo } from 'react';\nimport { Package } from 'lucide-react';\nimport { useCurrentOrders } from '@/hooks/useOrders';\nimport { useOrderProductImages } from '@/hooks/useOrderProductImages';\nimport { EmptyState } from './EmptyState';\nimport { Badge } from './ui/Badge';\nimport { formatPrice, formatDate } from '@/lib/utils/format';\nimport Image from 'next/image';\nimport { useRouter } from 'next/navigation';\nimport { useBasePath } from '@/providers/BasePathProvider';\n\nexport function AccountOrdersTab() {\n    const { orders, isLoading, error } = useCurrentOrders();\n    const router = useRouter();\n    const { buildPath } = useBasePath();\n    const allItems = useMemo(() => orders.flatMap(o => o.items ?? []), [orders]);\n    const productImages = useOrderProductImages(allItems);\n\n    if (isLoading) {\n        return (\n            <div className=\"py-6 px-3 pb-24\">\n                <div className=\"space-y-4\">\n                    {Array.from({ length: 3 }).map((_, index) => (\n                        <div\n                            key={index}\n                            className=\"h-40 animate-pulse rounded-xl bg-slate-50\"\n                        />\n                    ))}\n                </div>\n            </div>\n        );\n    }\n\n    if (error) {\n        return (\n            <div className=\"py-6 px-3 pb-24\">\n                <div className=\"rounded-lg border border-red-100 bg-red-50 p-6 text-sm text-red-700\">\n                    {error.message}\n                </div>\n            </div>\n        );\n    }\n\n    if (orders.length === 0) {\n        return (\n            <div className=\"py-6 px-3 pb-24\">\n                <EmptyState\n                    icon={Package}\n                    title=\"No orders yet\"\n                    description=\"When you place orders, they'll appear here for easy tracking.\"\n                />\n            </div>\n        );\n    }\n\n    return (\n        <div className=\"pb-24\">\n            {/* Header */}\n            <div className=\"mb-6\">\n                <h2 className=\"text-3xl font-bold text-hsecondary\">Order History</h2>\n                <p className=\"text-sm text-hmuted mt-1\">View and track your past purchases.</p>\n            </div>\n\n            <div className=\"space-y-4\">\n                {orders.map((order) => {\n                    const itemCount = (order.items?.length || 0) + ((order.customProducts as any[])?.length || 0);\n\n                    const badgeVariant =\n                        order.orderStatus === 'Delivered' ? 'success' :\n                            (order.orderStatus === 'Out for Delivery' || order.orderStatus === 'Picking & Packing' || order.orderStatus === 'In Fulfillment') ? 'primary' :\n                                order.orderStatus === 'Pending' ? 'warning' :\n                                    order.orderStatus === 'Processing' ? 'primary' : 'gray';\n\n                    return (\n                        <div\n                            key={order._id}\n                            className=\"rounded-xl border border-slate-200 bg-white p-5 sm:p-6\"\n                        >\n                            {/* Top row: order info + price */}\n                            <div className=\"flex items-start justify-between gap-4 mb-4\">\n                                <div className=\"flex-1 min-w-0\">\n                                    <div className=\"flex items-center gap-2 flex-wrap mb-1\">\n                                        <h3 className=\"text-base font-semibold text-hsecondary shrink-0\">\n                                            Order #{order._id?.slice(-8).toUpperCase()}\n                                        </h3>\n                                        <Badge variant={badgeVariant} size=\"sm\">\n                                            {order.orderStatus}\n                                        </Badge>\n                                    </div>\n                                    <p className=\"text-xs text-hmuted\">\n                                        Placed on {formatDate(order.createdAt || new Date(), 'long')} &bull; {itemCount} item{itemCount !== 1 ? 's' : ''}\n                                    </p>\n                                </div>\n                                <p className=\"text-2xl font-bold text-hsecondary shrink-0\">\n                                    {formatPrice(order.grandTotal || 0)}\n                                </p>\n                            </div>\n\n                            {/* Product thumbnails + names */}\n                            <div className=\"space-y-2 mb-4\">\n                                {(() => {\n                                    const customProducts = (order.customProducts || []) as any[];\n                                    const hasItems = (order.items && order.items.length > 0) || customProducts.length > 0;\n                                    if (!hasItems) return <p className=\"text-sm text-hmuted\">No items found</p>;\n                                    return (\n                                        <>\n                                            {order.items && order.items.map((item, index) => {\n                                                const variantImg = item?.productVariantData?.media?.[0]?.file;\n                                                const isPlaceholder = !variantImg || variantImg === '/placeholder.png';\n                                                const productId = (item.productVariantData as any).productId;\n                                                const itemImage = isPlaceholder\n                                                    ? (productImages[productId] || PLACEHOLDER_IMAGE_SRC)\n                                                    : variantImg;\n                                                return (\n                                                <div key={item.productVariantId || index} className=\"flex items-center gap-3 min-w-0\">\n                                                    <div className=\"relative w-10 h-10 sm:w-18 sm:h-18 rounded-lg bg-slate-100 shrink-0 overflow-hidden\">\n                                                        <Image\n                                                            src={itemImage}\n                                                            alt={item?.productVariantData?.name || 'Product image'}\n                                                            fill\n                                                            className=\"object-cover\"\n                                                            sizes=\"40px\"\n                                                        />\n                                                    </div>\n                                                    <div className=\"flex flex-col min-w-0\">\n                                                        <p className=\"text-sm font-medium text-hsecondary truncate\">\n                                                            {(item.productVariantData as any)?.productName || item.productVariantData?.name || 'Unknown Product'}\n                                                        </p>\n                                                        {(item.productVariantData as any)?.productName && item.productVariantData?.name && (\n                                                            <p className=\"text-xs text-hmuted truncate\">{item.productVariantData.name}</p>\n                                                        )}\n                                                    </div>\n                                                </div>\n                                                );\n                                            })}\n                                            {customProducts.map((cp: any, index: number) => {\n                                                const name = typeof cp === 'string' ? cp : (cp.name || 'Custom Item');\n                                                return (\n                                                <div key={`custom-${index}`} className=\"flex items-center gap-3 min-w-0\">\n                                                    <div className=\"relative w-10 h-10 sm:w-18 sm:h-18 rounded-lg bg-slate-100 shrink-0 overflow-hidden\">\n                                                        <Image\n                                                            src={PLACEHOLDER_IMAGE_SRC}\n                                                            alt={name}\n                                                            fill\n                                                            className=\"object-cover\"\n                                                            sizes=\"40px\"\n                                                        />\n                                                    </div>\n                                                    <div className=\"flex flex-col min-w-0\">\n                                                        <p className=\"text-sm font-medium text-hsecondary truncate\">{name}</p>\n                                                    </div>\n                                                </div>\n                                                );\n                                            })}\n                                        </>\n                                    );\n                                })()}\n                            </div>\n\n                            {/* Bottom: View Details */}\n                            <div className=\"pt-4 border-t border-slate-100 flex justify-end\">\n                                <button\n                                    onClick={() => router.push(buildPath(`/account/orders/${order._id}`))}\n                                    className=\"border border-slate-300 rounded-full px-5 py-2 text-sm text-hsecondary hover:bg-slate-50 transition-colors\"\n                                >\n                                    View Details\n                                </button>\n                            </div>\n                        </div>\n                    );\n                })}\n            </div>\n        </div>\n    );\n}\n","'use client';\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport { MapPin, Plus, Edit3, Trash2, Star, Loader2, MoreVertical, Phone } from 'lucide-react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { useAddresses } from '@/hooks/useAddresses';\nimport { EmptyState } from './EmptyState';\nimport { Button } from './ui/Button';\nimport { Address } from '@/lib/Apis';\nimport { AddressFormModal } from './AddressFormModal';\nimport { useNotification } from '@/providers/NotificationProvider';\nimport { ConfirmModal } from './ui/ConfirmModal';\n\nexport function AccountAddressesTab() {\n    const { addresses, isLoading, error, removeAddress, markAsDefault, refresh } = useAddresses();\n\n    useEffect(() => {\n        refresh();\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n    }, []);\n\n    const [deletingId, setDeletingId] = useState<string | null>(null);\n    const [editingAddress, setEditingAddress] = useState<Address | undefined>(undefined);\n    const [isAddressModalOpen, setIsAddressModalOpen] = useState(false);\n    const [selectedAddressId, setSelectedAddressId] = useState<string | null>(null);\n    const [addressToDelete, setAddressToDelete] = useState<Address | null>(null);\n    const [activeMenuId, setActiveMenuId] = useState<string | null>(null);\n    const menuRef = useRef<HTMLDivElement>(null);\n    const notification = useNotification();\n\n    // Close menu when clicking outside\n    useEffect(() => {\n        const handleClickOutside = (event: MouseEvent) => {\n            if (menuRef.current && !menuRef.current.contains(event.target as Node)) {\n                setActiveMenuId(null);\n            }\n        };\n\n        document.addEventListener('mousedown', handleClickOutside);\n        return () => document.removeEventListener('mousedown', handleClickOutside);\n    }, []);\n\n    const handleDelete = async (address: Address) => {\n        if (!confirm(`Remove ${address.name}'s address?\\nYou can add it back at any time.`)) return;\n\n        setDeletingId(address.id);\n        try {\n            await removeAddress(address.id);\n        } catch (error) {\n            console.error('Failed to delete address:', error);\n            alert('Failed to delete address. Please try again.');\n        } finally {\n            setDeletingId(null);\n        }\n    };\n\n    const handleSetDefault = async (address: Address) => {\n        try {\n            await markAsDefault(address.id);\n        } catch (error) {\n            console.error('Failed to set default address:', error);\n            alert('Failed to set default address. Please try again.');\n        }\n    };\n\n    const handleConfirmDelete = async () => {\n        if (!addressToDelete) return;\n\n        setDeletingId(addressToDelete.id);\n        try {\n            await removeAddress(addressToDelete.id);\n            if (selectedAddressId === addressToDelete.id) {\n                setSelectedAddressId(null);\n            }\n            notification.success('Address deleted successfully', addressToDelete.name + ' address deleted successfully');\n        } catch (error) {\n            console.error('Failed to delete address:', error);\n            notification.error('Failed to delete address. Please try again.', 'Failed to delete address' + addressToDelete.name);\n        } finally {\n            setDeletingId(null);\n            setAddressToDelete(null);\n        }\n    };\n\n    if (isLoading) {\n        return (\n            <div className=\"p-6\">\n                <div className=\"grid gap-4 sm:grid-cols-2\">\n                    {Array.from({ length: 2 }).map((_, index) => (\n                        <div\n                            key={index}\n                            className=\"h-48 animate-pulse rounded-lg border border-slate-100 bg-slate-50\"\n                        />\n                    ))}\n                </div>\n            </div>\n        );\n    }\n\n    if (error) {\n        return (\n            <div className=\"p-6\">\n                <div className=\"rounded-lg border border-red-100 bg-red-50 p-6 text-sm text-red-700\">\n                    {error.message}\n                </div>\n            </div>\n        );\n    }\n\n    return (\n        <>\n            <div className=\"rounded-xl\">\n                <div className=\"mb-6 flex flex-col gap-4 sm:flex-row sm:items-center sm:justify-between\">\n                    <div>\n                        <h2 className=\"text-3xl font-bold text-hsecondary\">Saved Addresses</h2>\n                        <p className=\"text-sm text-hmuted mt-1\">Manage your delivery and billing addresses</p>\n                    </div>\n                    {addresses.length > 0 && (\n                        <button\n                            className='flex w-full sm:w-auto flex-row items-center justify-center gap-2 px-6 py-2 border border-slate-200 rounded-xl text-slate-700 hover:opacity-80 transition-colors bg-hsecondary text-white text-sm'\n                            onClick={() => {\n                                setEditingAddress(undefined);\n                                setIsAddressModalOpen(true);\n                            }}\n                        >\n                            <Plus className=\"h-4 w-4\" />\n                            Add Address\n                        </button>\n                    )}\n                </div>\n\n                {addresses.length === 0 ? (\n                    <EmptyState\n                        icon={MapPin}\n                        title=\"No addresses yet\"\n                        description=\"Save a shipping or billing address to speed through checkout.\"\n                        actionLabel=\"Add your first address\"\n                        onAction={() => {\n                            setEditingAddress(undefined);\n                            setIsAddressModalOpen(true);\n                        }}\n                    />\n                ) : (\n                    <div className=\"grid gap-5 sm:grid-cols-2 lg:grid-cols-2\">\n                        {addresses.map((address) => (\n                            <motion.div\n                                key={address.id}\n                                initial={{ opacity: 0, y: 10 }}\n                                animate={{ opacity: 1, y: 0 }}\n                                transition={{ duration: 0.2 }}\n                                className={`\n                                    group relative rounded-lg border bg-white\n                                    transition-all duration-200\n                                    ${address.isDefault\n                                        ? 'border-slate-300 shadow-sm ring-1 ring-slate-900/5'\n                                        : 'border-slate-200 hover:border-slate-300 hover:shadow-sm'\n                                    }\n                                `}\n                            >\n                                {/* Card Content */}\n                                <div className=\"p-6\">\n                                    {/* Header */}\n                                    <div className=\"flex items-start justify-between gap-4 mb-5\">\n                                        <div className=\"flex-1 min-w-0\">\n                                            <div className=\"flex items-center gap-2 mb-1\">\n                                                <h3 className=\"text-base font-semibold text-slate-900 truncate\">\n                                                    {address.name}\n                                                </h3>\n                                                {address.isDefault && (\n                                                    <span className=\"inline-flex items-center gap-1 px-2 py-0.5 rounded-md bg-slate-100 text-xs font-medium text-slate-700 border border-slate-200\">\n                                                        <Star className=\"h-3 w-3 fill-slate-700\" />\n                                                        Default\n                                                    </span>\n                                                )}\n                                            </div>\n                                            <p className=\"text-sm text-slate-500\">Delivery address</p>\n                                        </div>\n\n                                        {/* Desktop Actions */}\n                                        <div className=\"hidden sm:flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n                                            <button\n                                                onClick={() => {\n                                                    setEditingAddress(address);\n                                                    setIsAddressModalOpen(true);\n                                                }}\n                                                className=\"p-2 rounded-md text-slate-400 hover:text-slate-700 hover:bg-slate-100 transition-colors\"\n                                                aria-label=\"Edit address\"\n                                                title=\"Edit\"\n                                            >\n                                                <Edit3 className=\"h-4 w-4\" />\n                                            </button>\n                                            {!address.isDefault && (\n                                                <button\n                                                    onClick={() => handleSetDefault(address)}\n                                                    className=\"p-2 rounded-md text-slate-400 hover:text-amber-600 hover:bg-amber-50 transition-colors\"\n                                                    aria-label=\"Set as default\"\n                                                    title=\"Set as default\"\n                                                >\n                                                    <Star className=\"h-4 w-4\" />\n                                                </button>\n                                            )}\n                                            <button\n                                                onClick={() => setAddressToDelete(address)}\n                                                disabled={deletingId === address.id}\n                                                className=\"p-2 rounded-md text-slate-400 hover:text-red-600 hover:bg-red-50 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n                                                aria-label=\"Delete address\"\n                                                title=\"Delete\"\n                                            >\n                                                {deletingId === address.id ? (\n                                                    <Loader2 className=\"h-4 w-4 animate-spin\" />\n                                                ) : (\n                                                    <Trash2 className=\"h-4 w-4\" />\n                                                )}\n                                            </button>\n                                        </div>\n\n                                        {/* Mobile Menu */}\n                                        <div className=\"sm:hidden\" ref={activeMenuId === address.id ? menuRef : null}>\n                                            <button\n                                                onClick={() => setActiveMenuId(activeMenuId === address.id ? null : address.id)}\n                                                className=\"p-1.5 rounded-md text-slate-400 hover:text-slate-700 hover:bg-slate-100 transition-colors\"\n                                                aria-label=\"More options\"\n                                            >\n                                                <MoreVertical className=\"h-5 w-5\" />\n                                            </button>\n\n                                            <AnimatePresence>\n                                                {activeMenuId === address.id && (\n                                                    <motion.div\n                                                        initial={{ opacity: 0, scale: 0.96, y: -8 }}\n                                                        animate={{ opacity: 1, scale: 1, y: 0 }}\n                                                        exit={{ opacity: 0, scale: 0.96, y: -8 }}\n                                                        transition={{ duration: 0.12 }}\n                                                        className=\"absolute right-6 top-16 w-48 rounded-lg border border-slate-200 bg-white shadow-lg z-50 overflow-hidden\"\n                                                    >\n                                                        <div className=\"py-1\">\n                                                            <button\n                                                                onClick={() => {\n                                                                    setEditingAddress(address);\n                                                                    setIsAddressModalOpen(true);\n                                                                    setActiveMenuId(null);\n                                                                }}\n                                                                className=\"flex w-full items-center gap-3 px-3 py-2 text-sm text-slate-700 hover:bg-slate-50 transition-colors\"\n                                                            >\n                                                                <Edit3 className=\"h-4 w-4 text-slate-400\" />\n                                                                Edit\n                                                            </button>\n                                                            {!address.isDefault && (\n                                                                <button\n                                                                    onClick={() => {\n                                                                        handleSetDefault(address);\n                                                                        setActiveMenuId(null);\n                                                                    }}\n                                                                    className=\"flex w-full items-center gap-3 px-3 py-2 text-sm text-slate-700 hover:bg-slate-50 transition-colors\"\n                                                                >\n                                                                    <Star className=\"h-4 w-4 text-slate-400\" />\n                                                                    Set as default\n                                                                </button>\n                                                            )}\n                                                            <div className=\"my-1 border-t border-slate-100\" />\n                                                            <button\n                                                                onClick={() => {\n                                                                    setAddressToDelete(address);\n                                                                    setActiveMenuId(null);\n                                                                }}\n                                                                disabled={deletingId === address.id}\n                                                                className=\"flex w-full items-center gap-3 px-3 py-2 text-sm text-red-600 hover:bg-red-50 disabled:opacity-50 transition-colors\"\n                                                            >\n                                                                {deletingId === address.id ? (\n                                                                    <>\n                                                                        <Loader2 className=\"h-4 w-4 animate-spin\" />\n                                                                        Deleting...\n                                                                    </>\n                                                                ) : (\n                                                                    <>\n                                                                        <Trash2 className=\"h-4 w-4\" />\n                                                                        Delete\n                                                                    </>\n                                                                )}\n                                                            </button>\n                                                        </div>\n                                                    </motion.div>\n                                                )}\n                                            </AnimatePresence>\n                                        </div>\n                                    </div>\n\n                                    {/* Address Details */}\n                                    <div className=\"space-y-3\">\n                                        <div className=\"flex gap-3\">\n                                            <MapPin className=\"h-4 w-4 text-slate-400 mt-0.5 flex-shrink-0\" />\n                                            <div className=\"flex-1 min-w-0\">\n                                                <p className=\"text-sm text-slate-700 leading-relaxed\">\n                                                    {address.street1}\n                                                    {address.street2 && <>, {address.street2}</>}\n                                                </p>\n                                                <p className=\"text-sm text-slate-600 mt-0.5\">\n                                                    {address.city}, {address.state} {address.zip}\n                                                </p>\n                                                <p className=\"text-sm text-slate-500 mt-0.5\">\n                                                    {address.country}\n                                                </p>\n                                            </div>\n                                        </div>\n\n                                        {address.phone && (\n                                            <div className=\"flex gap-3\">\n                                                <Phone className=\"h-4 w-4 text-slate-400 flex-shrink-0\" />\n                                                <p className=\"text-sm text-slate-700\">{address.phone}</p>\n                                            </div>\n                                        )}\n                                    </div>\n                                </div>\n                            </motion.div>\n                        ))}\n                    </div>\n                )}\n            </div>\n            <AddressFormModal\n                isOpen={isAddressModalOpen}\n                onClose={() => setIsAddressModalOpen(false)}\n                initialAddress={editingAddress}\n                onAddressAdded={() => {\n                    refresh();\n                }}\n                onAddressUpdated={() => {\n                    refresh();\n                }}\n            />\n\n            <ConfirmModal\n                isOpen={!!addressToDelete}\n                onClose={() => setAddressToDelete(null)}\n                onConfirm={handleConfirmDelete}\n                title=\"Delete Address\"\n                message={`Are you sure you want to delete ${addressToDelete?.name}'s address? This action cannot be undone.`}\n                confirmText=\"Delete\"\n                cancelText=\"Cancel\"\n                variant=\"danger\"\n                isLoading={deletingId === addressToDelete?.id}\n            />\n        </>\n    );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { Bell, Trash2, AlertTriangle } from 'lucide-react';\nimport { Button } from './ui/Button';\nimport { Modal } from './ui/Modal';\nimport { useRouter } from 'next/navigation';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { useAuth } from '@/providers/AuthProvider';\nimport { UsersApi } from '@/lib/Apis/apis/users-api';\nimport { AXIOS_CONFIG } from '@/lib/Apis/sharedConfig';\n\nexport function AccountSettingsTab() {\n    const router = useRouter();\n    const { buildPath } = useBasePath();\n    const { logout } = useAuth();\n    const [showDeleteModal, setShowDeleteModal] = useState(false);\n    const [isDeleting, setIsDeleting] = useState(false);\n    const [deleteError, setDeleteError] = useState<string | null>(null);\n\n    const handleDeleteAccount = async () => {\n        setIsDeleting(true);\n        setDeleteError(null);\n        try {\n            const usersApi = new UsersApi(AXIOS_CONFIG);\n            await usersApi.deleteMyProfile();\n            // Logout and redirect to home\n            logout();\n            router.push(buildPath('/'));\n        } catch (error: any) {\n            setDeleteError(\n                error?.response?.data?.message || 'Failed to delete account. Please try again.'\n            );\n            setIsDeleting(false);\n        }\n    };\n\n    return (\n        <div className=\"space-y-6\">\n            <div className=\"rounded-2xl border border-slate-200 bg-white p-6\">\n                <div className=\"flex items-center gap-2 mb-4\">\n                    <Bell className=\"h-5 w-5 text-hsecondary\" />\n                    <h3 className=\"text-lg font-semibold text-hsecondary\">Notifications</h3>\n                </div>\n                <div className=\"space-y-3\">\n                    <div className=\"flex items-center justify-between rounded-lg border border-slate-200 bg-slate-50 px-4 py-3\">\n                        <div>\n                            <p className=\"text-sm font-medium text-hsecondary\">Notification Preferences</p>\n                            <p className=\"text-xs text-hmuted\">Manage your notification settings</p>\n                        </div>\n                        <Button\n                            variant=\"outline-solid\"\n                            size=\"sm\"\n                            onClick={() => router.push(buildPath('/account/notifications'))}\n                        >\n                            Manage\n                        </Button>\n                    </div>\n                </div>\n            </div>\n\n            <div className=\"rounded-2xl border border-slate-200 bg-white p-6\">\n                <div className=\"space-y-3\">\n                    <div className=\"flex items-center justify-between rounded-lg border border-red-100 bg-red-50 px-4 py-3\">\n                        <div>\n                            <p className=\"text-sm font-medium text-red-900\">Delete Account</p>\n                            <p className=\"text-xs text-red-600\">Permanently delete your account and data</p>\n                        </div>\n                        <Button\n                            variant=\"outline-solid\"\n                            size=\"sm\"\n                            className=\"border-red-200 text-red-600 hover:bg-red-50\"\n                            onClick={() => setShowDeleteModal(true)}\n                        >\n                            <Trash2 className=\"h-4 w-4\" />\n                            Delete\n                        </Button>\n                    </div>\n                </div>\n            </div>\n\n            {/* Delete Account Confirmation Modal */}\n            <Modal\n                isOpen={showDeleteModal}\n                onClose={() => {\n                    setShowDeleteModal(false);\n                    setDeleteError(null);\n                }}\n                title=\"Delete Account\"\n            >\n                <div className=\"space-y-4\">\n                    <div className=\"flex items-start gap-3 rounded-lg border border-red-200 bg-red-50 p-4\">\n                        <AlertTriangle className=\"h-5 w-5 text-red-600 mt-0.5 flex-shrink-0\" />\n                        <div>\n                            <p className=\"text-sm font-semibold text-red-900\">Warning: This action is permanent</p>\n                            <p className=\"text-sm text-red-700 mt-1\">\n                                Deleting your account will permanently remove all your data, including:\n                            </p>\n                            <ul className=\"text-sm text-red-700 mt-2 ml-4 list-disc space-y-1\">\n                                <li>Personal information and profile</li>\n                                <li>Order history and tracking</li>\n                                <li>Saved addresses and payment methods</li>\n                                <li>Wishlist items</li>\n                            </ul>\n                        </div>\n                    </div>\n\n                    {deleteError && (\n                        <div className=\"rounded-lg border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-700\">\n                            <span className=\"font-semibold\">Error: </span>\n                            {deleteError}\n                        </div>\n                    )}\n\n                    <p className=\"text-sm text-slate-600\">\n                        Are you absolutely sure you want to delete your account? This action cannot be undone.\n                    </p>\n\n                    <div className=\"flex gap-3 pt-2\">\n                        <Button\n                            variant=\"outline-solid\"\n                            onClick={() => {\n                                setShowDeleteModal(false);\n                                setDeleteError(null);\n                            }}\n                            disabled={isDeleting}\n                            className=\"flex-1\"\n                        >\n                            Cancel\n                        </Button>\n                        <Button\n                            onClick={handleDeleteAccount}\n                            isLoading={isDeleting}\n                            disabled={isDeleting}\n                            className=\"flex-1 bg-red-600 hover:bg-red-700 text-white\"\n                        >\n                            {isDeleting ? 'Deleting...' : 'Delete Account'}\n                        </Button>\n                    </div>\n                </div>\n            </Modal>\n        </div>\n    );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { useRouter, useSearchParams } from 'next/navigation';\nimport {\n  User,\n  Package,\n  MapPin,\n  Settings,\n  // Star,\n} from 'lucide-react';\nimport { useAuth } from '@/providers/AuthProvider';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { TabNavigation } from '@/components/TabNavigation';\nimport { AccountOverviewTab } from '@/components/AccountOverviewTab';\nimport { AccountOrdersTab } from '@/components/AccountOrdersTab';\nimport { AccountAddressesTab } from '@/components/AccountAddressesTab';\nimport { AccountSettingsTab } from '@/components/AccountSettingsTab';\n// import { AccountReviewsTab } from '@/components/AccountReviewsTab';\n\nconst tabs = [\n  { id: 'overview', label: 'Overview', icon: User },\n  { id: 'orders', label: 'Orders', icon: Package },\n  // Reviews are temporarily hidden.\n  // { id: 'reviews', label: 'My Reviews', icon: Star },\n  // { id: 'payment', label: 'Payment', icon: CreditCard },\n  { id: 'addresses', label: 'Addresses', icon: MapPin },\n  { id: 'settings', label: 'Settings', icon: Settings },\n];\n\n// TOGGLE THIS TO SWITCH DESIGNS\nconst USE_NEW_DESIGN = true;\n\n/* ---------------------------------- */\n/* Old Layout Component               */\n/* ---------------------------------- */\nfunction OldLayout({\n  user,\n  handleLogout,\n  isLoggingOut,\n  tabs,\n  activeTab,\n  setActiveTab,\n  renderTabContent\n}: any) {\n  return (\n    <div className=\"min-h-screen bg-linear-to-b from-[#F8FAFC] to-[#EBF4FB]\">\n      {/* Header */}\n      <div className=\"\">\n        <div className=\"container mx-auto px-4 py-4\">\n          <div className=\"flex items-center justify-between\">\n            <div>\n              <h1 className=\"text-2xl font-semibold text-hsecondary\">My Account</h1>\n              <p className=\"text-sm text-hmuted\">\n                Manage your profile, orders, and preferences\n              </p>\n            </div>\n            <button\n              onClick={handleLogout}\n              disabled={isLoggingOut}\n              className=\"text-red-500 hover:text-red-700 text-sm font-medium\"\n            >\n              Log Out\n            </button>\n          </div>\n        </div>\n      </div>\n\n      {/* Tab Navigation */}\n      <TabNavigation tabs={tabs} activeTab={activeTab} onTabChange={setActiveTab} />\n\n      {/* Tab Content */}\n      <div className=\"container mx-auto max-w-7xl\">\n        <div className=\"rounded-2xl shadow-xs\">\n          {renderTabContent()}\n        </div>\n      </div>\n    </div>\n  );\n}\n\n/* ---------------------------------- */\n/* New Layout Component               */\n/* ---------------------------------- */\nfunction NewLayout({\n  user,\n  handleLogout,\n  isLoggingOut,\n  tabs,\n  activeTab,\n  setActiveTab,\n  renderTabContent\n}: any) {\n  return (\n    <div className=\"min-h-screen bg-gray-50/50\">\n      {/* Premium Header - Reusing Shop Screen Design */}\n      <div className=\"relative overflow-hidden bg-white pb-12 pt-8 md:pt-16 border-b border-gray-100\">\n        {/* Decorative Background Elements */}\n        <div className=\"absolute inset-0 pointer-events-none overflow-hidden\">\n          <div className=\"absolute top-0 left-1/2 -translate-x-1/2 w-[1200px] h-[600px] bg-hprimary/5 rounded-[50%] blur-3xl -translate-y-1/2\" />\n          <div className=\"absolute top-0 right-0 w-[600px] h-[600px] bg-hsecondary/5 rounded-full blur-3xl -translate-y-1/3 translate-x-1/3\" />\n        </div>\n\n        <div className=\"container mx-auto px-4 relative z-1\">\n          <div className=\"flex flex-col md:flex-row items-center justify-between gap-6 max-w-7xl mx-auto\">\n            <div className=\"text-center md:text-left space-y-4\">\n              {/* Badge */}\n              <div className=\"flex justify-center md:justify-start\">\n                <span className=\"inline-flex items-center gap-2 rounded-full border border-hprimary/20 bg-hprimary/5 px-4 py-1.5 text-xs font-bold uppercase tracking-widest text-hprimary shadow-xs\">\n                  <User className=\"h-3.5 w-3.5\" />\n                  My Account\n                </span>\n              </div>\n\n              <h1 className=\"text-3xl md:text-5xl font-extrabold text-slate-900 tracking-tight leading-[1.1]\">\n                Welcome back, <br className=\"hidden md:block\" />\n                <span className=\"bg-clip-text  text-hsecondary/80\">\n                  {user.firstname || 'Member'}\n                </span>\n              </h1>\n              <p className=\"text-lg text-slate-600 max-w-2xl mx-auto md:mx-0 leading-relaxed\">\n                Manage your orders, prescriptions, and account settings all in one place.\n              </p>\n            </div>\n          </div>\n        </div>\n      </div>\n\n      {/* Main Content Grid */}\n      <div className=\"container mx-auto max-w-7xl px-4 py-8\">\n        <div className=\"flex flex-col lg:flex-row gap-8\">\n\n          {/* Mobile Navigation (Horizontal Tabs) */}\n          <div className=\"lg:hidden\">\n            <TabNavigation tabs={tabs} activeTab={activeTab} onTabChange={setActiveTab} />\n          </div>\n\n          {/* Desktop Sidebar Navigation */}\n          <aside className=\"hidden lg:block w-72 flex-shrink-0\">\n            <div className=\"bg-white rounded-2xl shadow-sm border border-gray-100 p-4 sticky top-24\">\n              <nav className=\"space-y-1\">\n                {tabs.map((tab: any) => {\n                  const Icon = tab.icon;\n                  const isActive = activeTab === tab.id;\n\n                  return (\n                    <button\n                      key={tab.id}\n                      onClick={() => setActiveTab(tab.id)}\n                      className={`w-full flex items-center gap-3 px-4 py-3.5 rounded-xl transition-all duration-200 font-medium ${isActive\n                        ? 'bg-hsecondary/80 text-white shadow-md shadow-hsecondary/20 translate-x-1'\n                        : 'text-slate-600 hover:bg-hsecondary hover:text-white'\n                        }`}\n                    >\n                      <Icon className={`w-5 h-5 ${isActive ? 'text-white' : 'text-slate-400'}`} />\n                      {tab.label}\n                    </button>\n                  );\n                })}\n\n                <div className=\"my-4 border-t border-gray-100\" />\n\n                <button\n                  onClick={handleLogout}\n                  disabled={isLoggingOut}\n                  className=\"w-full flex items-center gap-3 px-4 py-3.5 rounded-xl text-red-600 hover:bg-red-50 transition-colors font-medium\"\n                >\n                  <Settings className=\"w-5 h-5 opacity-0\" /> {/* Spacer icon for alignment if needed, using Settings for now or just padding */}\n                  Log Out\n                </button>\n              </nav>\n            </div>\n          </aside>\n\n          {/* Tab Content Area */}\n          <main className=\"flex-1 min-w-0\">\n            {/* Wrappers to ensure consistent height matching the sidebar visually */}\n            {/* <div className={`${activeTab === 'reviews'? '' : 'bg-white rounded-2xl shadow-sm border border-gray-100 '} min-h-[500px] ${activeTab === 'overview' ? 'p-0 bg-transparent shadow-none border-none' : 'p-0'}`}> */}\n            <div className={`min-h-[500px] ${activeTab === 'overview' ? 'p-0 bg-transparent shadow-none border-none' : 'p-0'}`}>\n              <div className={activeTab === 'overview' || activeTab === 'settings' ? '' : 'px-6'}>\n                {renderTabContent()}\n              </div>\n            </div>\n          </main>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport default function AccountPage() {\n  const router = useRouter();\n  const { user, logout, isLoading } = useAuth();\n  const { buildPath } = useBasePath();\n  const searchParams = useSearchParams();\n  const [activeTab, setActiveTab] = useState(() => searchParams.get('tab') || 'overview');\n  const [isLoggingOut, setIsLoggingOut] = useState(false);\n\n  // The account route stays mounted when only the query string changes, so keep\n  // the visible tab in sync with navbar links such as ?tab=orders and /account.\n  React.useEffect(() => {\n    const requestedTab = searchParams.get('tab') || 'overview';\n    const isKnownTab = tabs.some((tab) => tab.id === requestedTab);\n    setActiveTab(isKnownTab ? requestedTab : 'overview');\n  }, [searchParams]);\n\n  // Listen for tab switch events from child components\n  React.useEffect(() => {\n    const handleTabSwitch = (event: CustomEvent) => {\n      setActiveTab(event.detail);\n    };\n    window.addEventListener('switchTab', handleTabSwitch as EventListener);\n    return () => {\n      window.removeEventListener('switchTab', handleTabSwitch as EventListener);\n    };\n  }, []);\n\n  const handleLogout = async () => {\n    setIsLoggingOut(true);\n    try {\n      await logout();\n      router.push(buildPath('/'));\n    } catch (error: any) {\n      console.error('Logout failed:', error);\n    } finally {\n      setIsLoggingOut(false);\n    }\n  };\n\n  if (!user) {\n    if (isLoading) return null;\n    router.push(buildPath(`/login?redirect=${encodeURIComponent(typeof window !== 'undefined' ? window.location.pathname : '/account')}`));\n    return null;\n  }\n\n  const renderTabContent = () => {\n    switch (activeTab) {\n      case 'overview':\n        return <AccountOverviewTab />;\n      case 'orders':\n        return <AccountOrdersTab />;\n      // Reviews are temporarily hidden.\n      // case 'reviews':\n      //   return <AccountReviewsTab />;\n      case 'addresses':\n        return <AccountAddressesTab />;\n      case 'settings':\n        return <AccountSettingsTab />;\n      default:\n        return <AccountOverviewTab />;\n    }\n  };\n\n  const layoutProps = {\n    user,\n    handleLogout,\n    isLoggingOut,\n    tabs,\n    activeTab,\n    setActiveTab,\n    renderTabContent\n  };\n\n  if (USE_NEW_DESIGN) {\n    return <NewLayout {...layoutProps} />;\n  }\n\n  return <OldLayout {...layoutProps} />;\n}\n","'use client';\n\nimport { phoneRegex, zipRegex } from '@/lib/validations/address';\n\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { motion } from 'framer-motion';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { z } from 'zod';\nimport {\n  Crown,\n  Edit3,\n  Globe,\n  Home,\n  MapPin,\n  Phone,\n  Plus,\n  Sparkles,\n  Star,\n  Trash2,\n  User,\n} from 'lucide-react';\nimport { Button } from '@/components/ui/Button';\nimport { Input } from '@/components/ui/Input';\nimport { Modal } from '@/components/ui/Modal';\nimport { EmptyState } from '@/components/EmptyState';\nimport { useAddresses } from '@/hooks/useAddresses';\nimport { Address, AddressAddressTypeEnum, CreateAddressDtoAddressTypeEnum, UpdateAddressDto, UpdateAddressDtoAddressTypeEnum } from '@/lib/Apis';\nimport { useNotification } from '@/providers/NotificationProvider';\n\n\nconst addressFormSchema = z.object({\n  fullName: z.string().min(2, 'Please enter a full name').max(100, 'Full name must be at most 100 characters'),\n  phone: z.string()\n    .min(1, 'Phone number is required')\n    .refine(val => phoneRegex.test(val.trim()), {\n      message: 'Invalid phone number. Include international calling code (e.g., +1 or +41)',\n    }),\n  addressLine1: z.string().min(4, 'Address line 1 is required').max(200, 'Address must be at most 200 characters'),\n  addressLine2: z.string().max(200, 'Address must be at most 200 characters').optional(),\n  city: z.string().min(2, 'City is required').max(100, 'City must be at most 100 characters'),\n  state: z.string().min(2, 'State / Region is required').max(100, 'State must be at most 100 characters'),\n  zipCode: z.string()\n    .min(1, 'Postal code is required')\n    .max(20, 'ZIP code must be at most 20 characters')\n    .refine(val => zipRegex.test(val), {\n      message: 'Please enter a valid ZIP code (e.g., 10001 or 10001-6789)',\n    }),\n  country: z.string().min(2, 'Country is required').max(100, 'Country must be at most 100 characters'),\n  addressType: z.enum(['Billing', 'Shipping', 'Both']).default('Shipping'),\n  isDefault: z.boolean().optional(),\n});\n\ntype AddressFormValues = z.infer<typeof addressFormSchema>;\n\nconst FORM_DEFAULTS: AddressFormValues = {\n  fullName: '',\n  phone: '',\n  addressLine1: '',\n  addressLine2: '',\n  city: '',\n  state: '',\n  zipCode: '',\n  country: 'United States',\n  addressType: AddressAddressTypeEnum.Both,\n  isDefault: false,\n};\n\nfunction formatAddressSnippet(address: Address) {\n  return [address.street1, address.street2, `${address.city}, ${address.state} ${address.zip}`, address.country]\n    .filter(Boolean)\n    .join(' • ');\n}\n\nfunction getAddressTypeCopy(type?: AddressAddressTypeEnum) {\n  switch (type) {\n    case 'Billing':\n      return { label: 'Billing', icon: <Home className=\"h-4 w-4\" /> };\n    case 'Both':\n      return { label: 'Billing & Shipping', icon: <Globe className=\"h-4 w-4\" /> };\n    case 'Shipping':\n    default:\n      return { label: 'Shipping', icon: <MapPin className=\"h-4 w-4\" /> };\n  }\n}\n\nexport function AddressesScreen() {\n  const {\n    addresses,\n    defaultAddress,\n    isLoading,\n    error,\n    addAddress,\n    updateAddress,\n    removeAddress,\n    markAsDefault,\n    refresh,\n  } = useAddresses();\n\n  const [isModalOpen, setIsModalOpen] = useState(false);\n  const [editingAddress, setEditingAddress] = useState<Address | null>(null);\n  const notification = useNotification();\n\n  const {\n    register,\n    handleSubmit,\n    reset,\n    formState: { errors, isSubmitting },\n  } = useForm<AddressFormValues>({\n    resolver: zodResolver(addressFormSchema),\n    defaultValues: FORM_DEFAULTS,\n  });\n\n  useEffect(() => {\n    if (editingAddress) {\n      reset({\n        fullName: editingAddress.name,\n        phone: editingAddress.phone,\n        addressLine1: editingAddress.street1,\n        addressLine2: editingAddress.street2,\n        city: editingAddress.city,\n        state: editingAddress.state,\n        zipCode: editingAddress.zip,\n        country: editingAddress.country,\n        addressType: editingAddress.addressType as AddressAddressTypeEnum,\n        isDefault: editingAddress.isDefault ?? false,\n      });\n    } else {\n      reset(FORM_DEFAULTS);\n    }\n  }, [editingAddress, reset]);\n\n  const openCreateModal = () => {\n    setEditingAddress(null);\n    setIsModalOpen(true);\n  };\n\n  const openEditModal = (address: Address) => {\n    setEditingAddress(address);\n    setIsModalOpen(true);\n  };\n\n  const closeModal = () => {\n    setIsModalOpen(false);\n  };\n\n  // Helper function to normalize address fields for comparison\n  const normalizeAddress = (addr: { street1: string; city: string; state: string; zip: string }) => {\n    return {\n      street1: addr.street1.trim().toLowerCase().replace(/\\s+/g, ' '),\n      city: addr.city.trim().toLowerCase(),\n      state: addr.state.trim().toLowerCase(),\n      zip: addr.zip.trim().replace(/\\s+/g, ''),\n    };\n  };\n\n  // Check for duplicate address\n  const isDuplicateAddress = (values: AddressFormValues, excludeId?: string) => {\n    const normalized = normalizeAddress({\n      street1: values.addressLine1,\n      city: values.city,\n      state: values.state,\n      zip: values.zipCode,\n    });\n\n    return addresses.some((addr) => {\n      if (excludeId && addr.id === excludeId) return false;\n      const existing = normalizeAddress(addr);\n      return (\n        existing.street1 === normalized.street1 &&\n        existing.city === normalized.city &&\n        existing.state === normalized.state &&\n        existing.zip === normalized.zip\n      );\n    });\n  };\n\n  const onSubmit = async (values: AddressFormValues) => {\n    // Check for duplicate address when adding new address\n    if (!editingAddress && isDuplicateAddress(values)) {\n      const confirmAdd = window.confirm(\n        'An address with this street, city, state, and ZIP already exists.\\n\\nDo you want to add it anyway?'\n      );\n      if (!confirmAdd) return;\n    }\n\n    const payload: UpdateAddressDto = {\n      name: values.fullName,\n      phone: values.phone,\n      street1: values.addressLine1,\n      street2: values.addressLine2 || '',\n      city: values.city,\n      state: values.state,\n      zip: values.zipCode,\n      country: values.country,\n      isDefault: values.isDefault ?? false,\n      addressType: values.addressType as UpdateAddressDtoAddressTypeEnum,\n    };\n\n    try {\n      if (editingAddress) {\n        const response = await updateAddress(editingAddress.id, payload);\n        if (response) {\n          notification.success('Address updated successfully');\n          closeModal();\n        } else {\n          notification.error('Unable to update address');\n        }\n      } else {\n        const response = await addAddress({\n          name: values.fullName,\n          phone: values.phone,\n          street1: values.addressLine1,\n          street2: values.addressLine2 || '',\n          city: values.city,\n          state: values.state,\n          zip: values.zipCode,\n          country: values.country,\n          addressType: values.addressType as CreateAddressDtoAddressTypeEnum,\n          isDefault: addresses.length === 0 || (values.isDefault ?? false),\n        });\n        if (response) {\n          notification.success('Address added successfully');\n          closeModal();\n        } else {\n          notification.error('Failed to add address');\n        }\n      }\n    } catch (error: any) {\n      console.error('Error saving address:', error);\n      notification.error(\n        error?.response?.data?.message || error?.message || 'Failed to save address. Please try again.'\n      );\n    }\n  };\n\n\n  const handleDelete = async (address: Address) => {\n    const confirmDelete = window.confirm(\n      `Remove ${address.name}'s address?\\nYou can add it back at any time.`\n    );\n    if (!confirmDelete) return;\n\n    try {\n      await removeAddress(address.id);\n      notification.success('Address removed successfully');\n    } catch (error) {\n      console.error('Error in handleDelete:', error);\n      notification.error(\n        error instanceof Error ? error.message : 'Failed to remove address. Please try again.',\n      );\n    }\n  };\n\n  const handleSetDefault = async (address: Address) => {\n    try {\n      await markAsDefault(address.id);\n      notification.success(`${address.name} is now your default address`);\n    } catch (error) {\n      notification.error(\n        error instanceof Error ? error.message : 'Failed to set default address. Try again.',\n      );\n    }\n  };\n\n  const stats = useMemo(() => {\n    const shippingCount = addresses.filter((address) => address.addressType !== 'Billing').length;\n    const billingCount = addresses.filter((address) => address.addressType !== 'Shipping').length;\n    return [\n      {\n        id: 'total',\n        label: 'Saved addresses',\n        value: addresses.length,\n        helper: 'All delivery and billing locations',\n      },\n      {\n        id: 'shipping',\n        label: 'Shipping ready',\n        value: shippingCount,\n        helper: 'Optimized for fast dispatch',\n      },\n      {\n        id: 'billing',\n        label: 'Billing profiles',\n        value: billingCount,\n        helper: 'Simplifies checkout',\n      },\n    ];\n  }, [addresses]);\n\n  return (\n    <div className=\"min-h-screen bg-slate-50 text-slate-900\">\n      <div className=\"container mx-auto px-4 pb-16 pt-10\">\n        <div className=\"rounded-3xl border border-slate-200 bg-white/95 p-6 shadow-xl shadow-primary-50\">\n          <div className=\"flex flex-col gap-4 md:flex-row md:items-center md:justify-between\">\n            <div className=\"space-y-2\">\n              <div className=\"inline-flex items-center gap-2 rounded-full bg-slate-900 text-white px-4 py-1 text-xs font-semibold uppercase tracking-[0.32em]\">\n                <MapPin className=\"h-4 w-4\" />\n                Address book\n              </div>\n              <h1 className=\"text-3xl font-semibold md:text-4xl\">Manage where your care arrives</h1>\n              <p className=\"max-w-2xl text-sm text-slate-600\">\n                Save home, office, or loved ones&apos; addresses and choose a default for faster checkout and delivery.\n              </p>\n              <div className=\"flex flex-wrap gap-3 text-xs text-slate-500\">\n                <span className=\"inline-flex items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-2\">\n                  <Sparkles className=\"h-4 w-4 text-hprimary-600\" />\n                  Default: {defaultAddress ? defaultAddress.name : 'Not set'}\n                </span>\n              </div>\n            </div>\n            <div className=\"flex items-center gap-3\">\n\n              <Button\n                variant=\"outline-solid\"\n                size=\"md\"\n                className=\"border-slate-300 text-slate-800 hover:bg-white\"\n                onClick={openCreateModal}\n              >\n                <Plus className=\"h-5 w-5\" />\n                Add address\n              </Button>\n            </div>\n          </div>\n\n          <div className=\"mt-6 grid gap-4 sm:grid-cols-3\">\n            {stats.map((stat) => (\n              <div\n                key={stat.id}\n                className=\"rounded-2xl border border-slate-200 bg-slate-50/70 px-4 py-3 text-sm text-slate-600\"\n              >\n                <p className=\"text-xs font-semibold uppercase tracking-[0.28em] text-slate-500\">\n                  {stat.label}\n                </p>\n                <div className=\"mt-1 flex items-center justify-between\">\n                  <p className=\"text-slate-800\">{stat.helper}</p>\n                  <span className=\"text-xl font-semibold text-slate-900\">{stat.value}</span>\n                </div>\n              </div>\n            ))}\n          </div>\n        </div>\n\n        <div className=\"mt-10\">\n          {isLoading ? (\n            <div className=\"grid gap-4 sm:grid-cols-2 xl:grid-cols-3\">\n              {Array.from({ length: 3 }).map((_, index) => (\n                <div\n                  key={index}\n                  className=\"h-56 animate-pulse rounded-3xl border border-slate-100 bg-white\"\n                />\n              ))}\n            </div>\n          ) : error ? (\n            <div className=\"rounded-3xl border border-red-100 bg-red-50 p-6 text-sm text-red-700\">\n              {error.message}\n            </div>\n          ) : addresses.length === 0 ? (\n            <div className=\"rounded-3xl border border-slate-100 bg-white p-12 shadow-xs\">\n              <EmptyState\n                icon={MapPin}\n                title=\"No addresses yet\"\n                description=\"Save a shipping or billing address to speed through checkout the next time you order.\"\n                actionLabel=\"Add your first address\"\n                onAction={openCreateModal}\n              />\n            </div>\n          ) : (\n            <div className=\"grid gap-4 sm:grid-cols-2 xl:grid-cols-3\">\n              {addresses.map((address) => {\n                const typeCopy = getAddressTypeCopy(address.addressType);\n                return (\n                  <motion.div\n                    key={address.id}\n                    initial={{ opacity: 0, y: 24 }}\n                    animate={{ opacity: 1, y: 0 }}\n                    className=\"group relative flex h-full flex-col rounded-3xl border border-slate-200 bg-white p-6 shadow-xs transition hover:-translate-y-1 hover:border-hprimary-200 hover:shadow-lg\"\n                  >\n                    {address.isDefault && (\n                      <span className=\"absolute right-6 top-6 inline-flex items-center gap-2 rounded-full bg-amber-100 px-3 py-1 text-xs font-semibold text-amber-700\">\n                        <Crown className=\"h-4 w-4\" />\n                        Default\n                      </span>\n                    )}\n                    <div className=\"flex items-center gap-3\">\n                      <span className=\"rounded-full bg-hprimary-50 p-3 text-hprimary-600\">\n                        <User className=\"h-5 w-5\" />\n                      </span>\n                      <div>\n                        <p className=\"text-base font-semibold text-slate-900\">\n                          {address.name}\n                        </p>\n                        <p className=\"text-xs uppercase tracking-[0.3em] text-slate-400\">\n                          {typeCopy.label}\n                        </p>\n                      </div>\n                    </div>\n\n                    <div className=\"mt-6 flex flex-1 flex-col gap-3 text-sm text-slate-600\">\n                      <p>{formatAddressSnippet(address)}</p>\n                      <p className=\"inline-flex items-center gap-2 text-slate-500\">\n                        <Phone className=\"h-4 w-4 text-slate-400\" />\n                        {address.phone || 'Not provided'}\n                      </p>\n                    </div>\n\n                    <div className=\"mt-6 flex items-center justify-between gap-3\">\n                      <button\n                        type=\"button\"\n                        onClick={() => openEditModal(address)}\n                        className=\"inline-flex items-center gap-2 rounded-full border border-slate-200 px-3 py-1 text-sm font-medium text-slate-600 transition hover:border-hprimary-300 hover:text-hprimary-600\"\n                      >\n                        <Edit3 className=\"h-4 w-4\" />\n                        Edit\n                      </button>\n                      <div className=\"flex items-center gap-2\">\n                        {!address.isDefault && (\n                          <button\n                            type=\"button\"\n                            onClick={() => handleSetDefault(address)}\n                            className=\"inline-flex items-center gap-2 rounded-full border border-amber-200 px-3 py-1 text-sm font-semibold text-amber-600 transition hover:border-amber-300 hover:text-amber-700\"\n                          >\n                            <Star className=\"h-4 w-4\" />\n                            Make default\n                          </button>\n                        )}\n                        <button\n                          type=\"button\"\n                          onClick={() => handleDelete(address)}\n                          className=\"inline-flex items-center gap-2 rounded-full border border-red-200 px-3 py-1 text-sm font-semibold text-red-600 transition hover:border-red-300 hover:text-red-700\"\n                        >\n                          <Trash2 className=\"h-4 w-4\" />\n                          Delete\n                        </button>\n                      </div>\n                    </div>\n                  </motion.div>\n                );\n              })}\n            </div>\n          )}\n        </div>\n      </div>\n\n      <Modal\n        isOpen={isModalOpen}\n        onClose={closeModal}\n        title={editingAddress ? 'Edit address' : 'Add new address'}\n        size=\"lg\"\n      >\n        <form onSubmit={handleSubmit(onSubmit)} className=\"space-y-6\">\n          <div className=\"grid gap-4 md:grid-cols-2\">\n            <Input\n              label=\"Full name\"\n              placeholder=\"Taylor Pharmacist\"\n              {...register('fullName')}\n              maxLength={100}\n              error={errors.fullName?.message}\n            />\n            <Input\n              label=\"Phone number\"\n              placeholder=\"+1 415 555 0100\"\n              {...register('phone')}\n              error={errors.phone?.message}\n            />\n          </div>\n          <Input\n            label=\"Address line 1\"\n            placeholder=\"123 Wellness Avenue\"\n            {...register('addressLine1')}\n            maxLength={200}\n            error={errors.addressLine1?.message}\n          />\n          <Input\n            label=\"Address line 2 (optional)\"\n            placeholder=\"Suite, apartment, etc.\"\n            {...register('addressLine2')}\n            maxLength={200}\n            error={errors.addressLine2?.message}\n          />\n          <div className=\"grid gap-4 md:grid-cols-2\">\n            <Input\n              label=\"City\"\n              placeholder=\"Seattle\"\n              {...register('city')}\n              maxLength={100}\n              error={errors.city?.message}\n            />\n            <Input\n              label=\"State / Region\"\n              placeholder=\"Washington\"\n              {...register('state')}\n              maxLength={100}\n              error={errors.state?.message}\n            />\n          </div>\n          <div className=\"grid gap-4 md:grid-cols-2\">\n            <Input\n              label=\"Postal code\"\n              placeholder=\"98101\"\n              {...register('zipCode')}\n              maxLength={20}\n              error={errors.zipCode?.message}\n            />\n            <Input\n              label=\"Country\"\n              placeholder=\"United States\"\n              {...register('country')}\n              maxLength={100}\n              error={errors.country?.message}\n            />\n          </div>\n\n          <div className=\"grid gap-4 md:grid-cols-2\">\n            <label className=\"flex flex-col gap-2 rounded-2xl border border-slate-200 p-4\">\n              <span className=\"text-sm font-semibold text-slate-700\">Address type</span>\n              <select\n                {...register('addressType')}\n                className=\"rounded-xl border border-slate-200 px-3 py-2 text-sm text-slate-700 focus:border-hprimary-400 focus:outline-hidden focus:ring-2 focus:ring-hprimary-500/20\"\n              >\n                <option value=\"Shipping\">Shipping</option>\n                <option value=\"Billing\">Billing</option>\n                <option value=\"Both\">Billing & Shipping</option>\n              </select>\n            </label>\n            <label className=\"flex items-center justify-between gap-4 rounded-2xl border border-slate-200 bg-slate-50 px-4 py-3 text-sm font-medium text-slate-700\">\n              <span>Set as default address</span>\n              <input\n                type=\"checkbox\"\n                {...register('isDefault')}\n                className=\"h-4 w-4 rounded-sm border-hprimary-300 text-hprimary-600 focus:ring-hprimary-500\"\n              />\n            </label>\n          </div>\n\n          <div className=\"flex items-center justify-end gap-3\">\n            <Button type=\"button\" variant=\"outline-solid\" onClick={closeModal}>\n              Cancel\n            </Button>\n            <Button type=\"submit\" isLoading={isSubmitting}>\n              {editingAddress ? 'Save changes' : 'Save address'}\n            </Button>\n          </div>\n        </form>\n      </Modal>\n    </div>\n  );\n}\n","'use client';\n\nimport { useMemo } from 'react';\nimport { useQueries } from '@tanstack/react-query';\nimport { ProductsApi, Product } from '@/lib/Apis';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\n\ninterface UseWishlistProductsResult {\n  products: Product[];\n  isLoading: boolean;\n  error: Error | null;\n  refetch: () => void;\n}\n\n/**\n * Fetches full product details for a given list of wishlist product IDs.\n * Uses React Query's useQueries for parallel fetching and caching.\n */\nexport function useWishlistProducts(productIds: string[] = []): UseWishlistProductsResult {\n  const uniqueIds = useMemo(\n    () => Array.from(new Set((productIds || []).filter(Boolean))),\n    [productIds]\n  );\n\n  const results = useQueries({\n    queries: uniqueIds.map((id) => ({\n      queryKey: ['product', typeof id === 'object' ? (id as any)?._id : id],\n      queryFn: async () => {\n        const productId = typeof id === 'object' ? (id as any)?._id : id;\n        const response = await new ProductsApi(AXIOS_CONFIG).getSingleProduct(productId);\n        return response.data;\n      },\n      staleTime: 5 * 60 * 1000, // 5 minutes - shares cache with useProduct\n      enabled: !!id,\n    })),\n  });\n\n  const isLoading = results.some((result) => result.isLoading);\n  const error = results.find((result) => result.error)?.error as Error | null;\n  const products = results\n    .filter((result) => result.data)\n    .map((result) => result.data as Product);\n\n  const refetch = () => {\n    results.forEach((result) => result.refetch());\n  };\n\n  return {\n    products,\n    isLoading,\n    error,\n    refetch,\n  };\n}\n","'use client';\n\nimport { PLACEHOLDER_IMAGE_SRC } from '@/lib/constants/assets';\n\nimport { RecommendedProductsSection } from '@/components/RecommendedProductsSection';\nimport React, { useEffect, useMemo, useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport {\n    Grid,\n    Heart,\n    List,\n    LucideIcon,\n    Package,\n    ShieldCheck,\n    ShoppingBag,\n    Sparkles,\n    Trash2,\n    Trash\n} from 'lucide-react';\nimport { useRouter } from 'next/navigation';\nimport { ProductCard } from '@/components/ProductCard';\nimport { Button } from '@/components/ui/Button';\nimport { useWishlist } from '@/providers/WishlistProvider';\nimport { useWishlistProducts } from '@/hooks/useWishlistProducts';\nimport Image from 'next/image';\nimport { formatPrice } from '@/lib/utils/format';\nimport { Product } from '@/lib/Apis';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { useNotification } from '@/providers/NotificationProvider';\nimport { ConfirmModal } from '@/components/ui/ConfirmModal';\n\ntype SortOption = 'featured' | 'price-low' | 'price-high' | 'name' | 'availability';\n\nconst SORT_OPTIONS: { value: SortOption; label: string }[] = [\n    { value: 'featured', label: 'Most loved' },\n    { value: 'price-low', label: 'Price: Low to High' },\n    { value: 'price-high', label: 'Price: High to Low' },\n    { value: 'name', label: 'Name A-Z' },\n    { value: 'availability', label: 'Availability' },\n];\n\n\n\nexport default function WishlistScreen() {\n    const router = useRouter();\n    const { buildPath } = useBasePath();\n    const {\n        products: wishlistItems,\n        getWishlistCount,\n        clearWishlist,\n        refreshWishlist,\n    } = useWishlist();\n    const [isConfirmModalOpen, setIsConfirmModalOpen] = useState(false);\n    const notification = useNotification();\n\n    const wishlistCount = getWishlistCount?.() ?? 0;\n    const { products: wishlistProducts, isLoading, error } = useWishlistProducts(\n        wishlistItems as string[]\n    );\n\n\n    const [selectedVariants, setSelectedVariants] = useState<Record<string, string | null>>({});\n    const [onlyInStock, setOnlyInStock] = useState(false);\n    const [sortOption, setSortOption] = useState<SortOption>('featured');\n\n    useEffect(() => {\n        if (wishlistProducts.length === 0) return;\n\n        setSelectedVariants((prev) => {\n            const next = { ...prev };\n            let changed = false;\n            wishlistProducts.forEach((p) => {\n                const pid = p._id || p.id;\n                const currentId = next[pid];\n\n                if (p.variants?.length) {\n                    const currentVariant = p.variants.find((v: any) => (v.id || v._id) === currentId);\n                    const isCurrentInStock = currentVariant && (currentVariant.inventoryCount ?? 0) > 0;\n\n                    // If onlyInStock is enabled or availability sort is active,\n                    // and current selection is missing or out of stock,\n                    // force select an in-stock variant.\n                    if ((onlyInStock || sortOption === 'availability') && !isCurrentInStock) {\n                        const inStockVariant = p.variants.find((v: any) => (v.inventoryCount ?? 0) > 0);\n                        if (inStockVariant) {\n                            const nextId = inStockVariant.id || inStockVariant._id || null;\n                            if (nextId !== currentId) {\n                                next[pid] = nextId;\n                                changed = true;\n                            }\n                            return;\n                        }\n                    }\n\n                    // Initial initialization: prefer in-stock even if filter is off\n                    if (currentId === undefined) {\n                        const inStockVariant = p.variants.find((v: any) => (v.inventoryCount ?? 0) > 0);\n                        const defaultVariant = inStockVariant || p.variants[0];\n                        const nextId = defaultVariant.id || defaultVariant._id || null;\n                        next[pid] = nextId;\n                        changed = true;\n                    }\n                }\n            });\n            return changed ? next : prev;\n        });\n    }, [wishlistProducts, onlyInStock, sortOption]);\n\n    useEffect(() => {\n        if (error) {\n            notification.error(\n                'Could not load wishlist',\n                'We had trouble loading your saved products. Please refresh the page or try again shortly.'\n            );\n        }\n    }, [error, notification]);\n\n    const handleClearWishlist = async () => {\n        try {\n            await clearWishlist();\n            await refreshWishlist();\n            setIsConfirmModalOpen(false);\n        } catch (err) {\n            console.error('Error clearing wishlist:', err);\n        }\n    };\n\n    const totalValue = useMemo(\n        () => wishlistProducts.reduce((sum, product) => {\n            const pid = product._id || product.id;\n            const selectedVariantId = selectedVariants[pid];\n            const variant = product.variants?.find((v) => (v.id || v._id) === selectedVariantId) ?? product.variants?.[0];\n            return sum + (variant?.finalPrice ?? product.summary?.minPrice ?? 0);\n        }, 0),\n        [wishlistProducts, selectedVariants]\n    );\n\n    const totalSavings = useMemo(\n        () =>\n            wishlistProducts.reduce((sum, product) => {\n                const pid = product._id || product.id;\n                const selectedVariantId = selectedVariants[pid];\n                const variant = product.variants?.find((v) => (v.id || v._id) === selectedVariantId) ?? product.variants?.[0];\n\n                // Calculate savings if product/variant has discount\n                if (variant?.isDiscounted) {\n                    const regularPrice = variant.retailPrice ?? 0;\n                    const finalPrice = variant.finalPrice ?? 0;\n                    return sum + (regularPrice - finalPrice);\n                }\n                // Fallback to summary if no variants (though ProductCard usually relies on variants)\n                if (product.summary?.hasDiscount) {\n                    const maxPrice = product.summary?.maxPrice ?? 0;\n                    const minPrice = product.summary?.minPrice ?? 0;\n                    return sum + (maxPrice - minPrice);\n                }\n                return sum;\n            }, 0),\n        [wishlistProducts, selectedVariants]\n    );\n\n    const inStockCount = useMemo(\n        () => wishlistProducts.filter((product) => (product.summary?.totalInventory ?? 0) > 0).length,\n        [wishlistProducts]\n    );\n\n    // Helper to check if a product has any in-stock variant\n    const hasInStockVariant = (product: any) => {\n        if (product.variants?.length) {\n            return product.variants.some((v: any) => (v.inventoryCount ?? 0) > 0);\n        }\n        return (product.summary?.totalInventory ?? 0) > 0;\n    };\n\n    // Helper to get total inventory across all variants or from summary\n    const getProductInventory = (product: any) => {\n        if (product.variants?.length) {\n            return product.variants.reduce((sum: number, v: any) => sum + (v.inventoryCount ?? 0), 0);\n        }\n        return product.summary?.totalInventory ?? 0;\n    };\n\n    const processedProducts = useMemo(() => {\n        let list = [...wishlistProducts];\n\n        // Filter by in-stock - using variant-level check (NEE-111)\n        if (onlyInStock) {\n            list = list.filter((product) => hasInStockVariant(product));\n        }\n\n        switch (sortOption) {\n            case 'price-low':\n                list.sort((a, b) => (a.summary?.minPrice ?? 0) - (b.summary?.minPrice ?? 0));\n                break;\n            case 'price-high':\n                list.sort((a, b) => (b.summary?.maxPrice ?? 0) - (a.summary?.maxPrice ?? 0));\n                break;\n            case 'name':\n                list.sort((a, b) => (a.name || '').localeCompare(b.name || ''));\n                break;\n            case 'availability':\n                // Sort by: in-stock first, then by inventory quantity (NEE-110)\n                list.sort((a, b) => {\n                    const aInStock = hasInStockVariant(a);\n                    const bInStock = hasInStockVariant(b);\n\n                    // First prioritize in-stock items\n                    if (aInStock && !bInStock) return -1;\n                    if (!aInStock && bInStock) return 1;\n\n                    // Then sort by inventory quantity\n                    return getProductInventory(b) - getProductInventory(a);\n                });\n                break;\n            case 'featured':\n            default:\n                list.sort((a, b) => (b.summary?.totalSold ?? 0) - (a.summary?.totalSold ?? 0));\n                break;\n        }\n\n        return list;\n    }, [wishlistProducts, onlyInStock, sortOption]);\n\n    const emptyAfterFiltering = !isLoading && wishlistProducts.length > 0 && processedProducts.length === 0;\n\n    return (\n        <div className=\"bg-white\">\n            <div className=\"min-h-screen bg-white max-w-6xl mx-auto\">\n                <div className=\"container mx-auto px-4 py-8\">\n                    <motion.div\n                        initial={{ opacity: 0, y: 24 }}\n                        animate={{ opacity: 1, y: 0 }}\n                        className=\"space-y-6\"\n                    >\n                        <>\n                                <div className=\"mb-8 rounded-3xl bg-gray-50/50 border border-gray-100 p-8\">\n                                    <div className=\"flex flex-col gap-6 md:flex-row md:items-center md:justify-between\">\n                                        <div className=\"space-y-2\">\n                                            <div className=\"flex items-center gap-3\">\n                                                <div className=\"rounded-full bg-hsecondary/5 p-2.5\">\n                                                    <Heart className=\"h-6 w-6 text-hsecondary fill-hsecondary/10\" />\n                                                </div>\n                                                <h1 className=\"text-3xl font-bold tracking-tight text-hsecondary\">Your Wishlist</h1>\n                                            </div>\n                                            <p className=\"text-hmuted max-w-md text-sm leading-relaxed ml-1\">\n                                                Keep track of your favorite items for later. We'll keep them safe here until you're ready to make them yours.\n                                            </p>\n                                        </div>\n\n                                        {wishlistCount > 0 && (\n                                            <div className=\"flex items-center gap-8 px-6 py-4 rounded-2xl bg-white border border-gray-100 shadow-sm\">\n                                                <div>\n                                                    <p className=\"text-xs font-semibold text-hmuted uppercase tracking-wider mb-0.5\">Total Value</p>\n                                                    <p className=\"text-2xl font-bold text-hsecondary\">{formatPrice(totalValue)}</p>\n                                                </div>\n                                                <div className=\"h-8 w-px bg-gray-100\" />\n                                                <div>\n                                                    <p className=\"text-xs font-semibold text-hmuted uppercase tracking-wider mb-0.5\">Items</p>\n                                                    <p className=\"text-2xl font-bold text-hsecondary\">{wishlistCount}</p>\n                                                </div>\n                                            </div>\n                                        )}\n                                    </div>\n                                </div>\n\n                                <div className=\"flex flex-col gap-4 lg:flex-row lg:items-start lg:justify-between mb-6\">\n                                    <div className=\"space-y-1\">\n                                        {onlyInStock && (\n                                            <p className=\"text-sm text-hmuted\">\n                                                Showing items ready to ship\n                                            </p>\n                                        )}\n                                    </div>\n\n                                    <div className=\"flex flex-wrap items-center gap-3\">\n                                        <label className=\"inline-flex cursor-pointer items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-1.5 text-sm font-medium text-slate-600 transition hover:border-hprimary hover:text-hsecondary\">\n                                            <input\n                                                type=\"checkbox\"\n                                                checked={onlyInStock}\n                                                onChange={(event) => setOnlyInStock(event.target.checked)}\n                                                className=\"h-4 w-4 rounded-sm border-slate-300 text-hsecondary focus:ring-hsecondary\"\n                                            />\n                                            Only show in-stock\n                                        </label>\n\n                                        <div className=\"flex items-center gap-2 rounded-full border border-slate-200 bg-slate-50 px-3 py-1.5 text-sm text-slate-600\">\n                                            <span>Sort</span>\n                                            <select\n                                                value={sortOption}\n                                                onChange={(event) => setSortOption(event.target.value as SortOption)}\n                                                className=\"bg-transparent text-sm font-medium text-slate-700 outline-hidden\"\n                                            >\n                                                {SORT_OPTIONS.map((option) => (\n                                                    <option key={option.value} value={option.value}>\n                                                        {option.label}\n                                                    </option>\n                                                ))}\n                                            </select>\n                                        </div>\n\n\n                                        {wishlistCount > 0 && (\n                                            <Button\n                                                variant=\"ghost\"\n                                                className=\"text-sm font-semibold text-slate-500 hover:text-red-500\"\n                                                // onClick={handleClearWishlist}\n                                                onClick={(e) => {\n                                                    e.preventDefault();\n                                                    e.stopPropagation();\n                                                    setIsConfirmModalOpen(true);\n                                                }}\n                                            >\n                                                <Trash2 className=\"h-4 w-4\" />\n                                                Clear all\n                                            </Button>\n                                        )}\n                                    </div>\n                                </div>\n\n                                {isLoading && (\n                                    <div className=\"grid grid-cols-1 gap-5 sm:grid-cols-2 lg:grid-cols-3\">\n                                        {Array.from({ length: Math.min(wishlistCount || 3, 6) }).map((_, index) => (\n                                            <div\n                                                key={index}\n                                                className=\"h-72 animate-pulse rounded-2xl border border-slate-200 bg-slate-100\"\n                                            />\n                                        ))}\n                                    </div>\n                                )}\n\n                                {!isLoading && wishlistCount === 0 && (\n                                    <div data-testid=\"empty-wishlist\" className=\"flex min-h-[30vh] items-center justify-center\">\n                                        <div className=\"text-center space-y-6 max-w-md\">\n                                            <div className=\"flex justify-center\">\n                                                <div className=\"rounded-full bg-gray-100 p-6\">\n                                                    <Heart className=\"h-12 w-12 text-hsecondary\" />\n                                                </div>\n                                            </div>\n                                            <div className=\"space-y-2\">\n                                                <h2 className=\"text-2xl font-bold text-hsecondary\">Your wishlist is empty</h2>\n                                                <p className=\"text-hmuted\">\n                                                    Start adding products to your wishlist to see them here.\n                                                </p>\n                                            </div>\n                                            <div className=\"flex flex-wrap justify-center gap-3\">\n                                                <button\n                                                    type=\"button\"\n                                                    onClick={() => router.push(buildPath('/shop'))}\n                                                    className=\"rounded-xl border-2 border-hsecondary bg-hsecondary text-white px-6 py-3 text-sm font-medium transition-colors flex items-center justify-center gap-2 hover:opacity-80\"\n                                                >\n                                                    Discover products\n                                                </button>\n                                            </div>\n                                        </div>\n                                    </div>\n                                )}\n\n\n                                {!isLoading && processedProducts.length > 0 && (\n                                    <>\n                                        <motion.div\n                                            data-testid=\"wishlist-grid\"\n                                            layout\n                                            className=\"grid min-[300px]:grid-cols-2 gap-4 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-3 xl:grid-cols-3\"\n                                        >\n                                            <AnimatePresence>\n                                                {processedProducts.map((product) => (\n                                                    <motion.div\n                                                        key={product.id}\n                                                        layout\n                                                        initial={{ opacity: 0, y: 20 }}\n                                                        animate={{ opacity: 1, y: 0 }}\n                                                        exit={{ opacity: 0, y: -20 }}\n                                                        transition={{ duration: 0.2 }}\n                                                    >\n                                                        <ProductCard\n                                                            product={product as Product}\n                                                            onClickProduct={(p) => router.push(buildPath(`/products/${p._id}`))}\n                                                            isFavorited\n                                                            selectedVariantId={selectedVariants[product._id || product.id] ?? null}\n                                                            onVariantChange={(variantId) => {\n                                                                setSelectedVariants((prev) => ({\n                                                                    ...prev,\n                                                                    [product._id || product.id]: variantId,\n                                                                }));\n                                                            }}\n                                                        />\n                                                    </motion.div>\n                                                ))}\n\n\n                                            </AnimatePresence>\n                                        </motion.div>\n                                    </>\n                                )}\n\n                                {emptyAfterFiltering && (\n                                    <div className=\"flex flex-col items-center justify-center rounded-lg border border-dashed border-gray-200 bg-gray-50 p-12 text-center\">\n                                        <div className=\"flex h-16 w-16 items-center justify-center rounded-full bg-gray-200 text-gray-500\">\n                                            <Package className=\"h-8 w-8\" />\n                                        </div>\n                                        <h3 className=\"mt-6 text-xl font-semibold text-hsecondary\">\n                                            Nothing matches those filters\n                                        </h3>\n                                        <p className=\"mt-2 max-w-md text-sm text-hmuted\">\n                                            Try showing out-of-stock items or adjust your sort order to revisit everything you&apos;ve saved.\n                                        </p>\n                                        <button\n                                            type=\"button\"\n                                            className=\"mt-6 rounded-xl border-2 border-hprimary bg-white px-6 py-3 text-sm font-medium text-hsecondary hover:opacity-80 transition-colors\"\n                                            onClick={() => setOnlyInStock(false)}\n                                        >\n                                            Show all saved products\n                                        </button>\n                                    </div>\n                                )}\n                        </>\n\n                        {/* Recommended Section - Always visible at bottom */}\n                        <RecommendedProductsSection\n                            title=\"Recommended for you\"\n                            subtitle=\"\"\n                            initialLimit={4}\n                            className=\"pt-12 mt-12\"\n                        />\n                    </motion.div>\n                    <ConfirmModal\n                        isOpen={isConfirmModalOpen}\n                        onClose={() => {\n                            setIsConfirmModalOpen(false);\n                        }}\n                        onConfirm={handleClearWishlist}\n                        title=\"Clear Wishlist\"\n                        message=\"Are you sure you want to clear your wishlist? This action cannot be undone.\"\n                        confirmText=\"Clear\"\n                        cancelText=\"Cancel\"\n                        variant=\"danger\"\n                    />\n                </div>\n            </div>\n        </div>\n    );\n}\n","'use client';\n\nimport { useEffect, useState, useCallback, useRef } from 'react';\nimport { useSearchParams } from 'next/navigation';\nimport { ProductsApi } from '@/lib/Apis';\nimport { Product } from '@/lib/Apis';\nimport { ProductCard } from '@/components/ProductCard';\nimport { Skeleton } from '@/components/ui/Skeleton';\nimport { Input } from '@/components/ui/Input';\nimport { Search, X, TrendingUp, Clock, ArrowRight } from 'lucide-react';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { useWishlist } from '@/providers/WishlistProvider';\nimport { useRouter } from 'next/navigation';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { RecommendedProductsSection } from '@/components/RecommendedProductsSection';\n\nfunction levenshtein(a: string, b: string): number {\n    const m = a.length, n = b.length;\n    const dp: number[][] = Array.from({ length: m + 1 }, (_, i) =>\n        Array.from({ length: n + 1 }, (_, j) => (i === 0 ? j : j === 0 ? i : 0))\n    );\n    for (let i = 1; i <= m; i++) {\n        for (let j = 1; j <= n; j++) {\n            dp[i][j] = a[i - 1] === b[j - 1]\n                ? dp[i - 1][j - 1]\n                : 1 + Math.min(dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]);\n        }\n    }\n    return dp[m][n];\n}\n\nfunction findClosestTerm(query: string, candidates: string[]): string | null {\n    const q = query.toLowerCase();\n    const qWords = q.split(/\\s+/);\n    let bestTerm = '';\n    let bestScore = Infinity;\n\n    for (const term of candidates) {\n        const tLower = term.toLowerCase();\n        const tWords = tLower.split(/\\s+/);\n        let termScore = Infinity;\n\n        for (const qw of qWords) {\n            if (qw.length < 3) continue;\n            for (const tw of tWords) {\n                const dist = levenshtein(qw, tw);\n                const ratio = dist / Math.max(qw.length, tw.length);\n                if (ratio < termScore) termScore = ratio;\n            }\n        }\n\n        if (termScore < bestScore) {\n            bestScore = termScore;\n            bestTerm = term;\n        }\n    }\n\n    // Only suggest if edit distance ratio is meaningful (< 0.45)\n    return bestScore < 0.45 ? bestTerm : null;\n}\n\nexport default function SearchPage() {\n    const router = useRouter();\n    const { buildPath } = useBasePath();\n    const searchParams = useSearchParams();\n    const searchQuery = searchParams.get('q') || '';\n    const [products, setProducts] = useState<Product[]>([]);\n    const [isLoading, setIsLoading] = useState(true);\n    const [searchInput, setSearchInput] = useState(searchQuery);\n    const [hasSearched, setHasSearched] = useState(false);\n    const { isInWishlist } = useWishlist();\n    const [suggestions, setSuggestions] = useState<{ term: string; isFuzzy: boolean; product?: Product }[]>([]);\n    const [showSuggestions, setShowSuggestions] = useState(false);\n    const [recentSearches, setRecentSearches] = useState<string[]>([]);\n    const [isMobile, setIsMobile] = useState(false);\n    const [didYouMean, setDidYouMean] = useState<string | null>(null);\n    const [didYouMeanProduct, setDidYouMeanProduct] = useState<Product | null>(null);\n\n    // Track screen size for responsive placeholder\n    useEffect(() => {\n        const mediaQuery = window.matchMedia('(max-width: 768px)');\n        setIsMobile(mediaQuery.matches);\n        \n        const handleChange = (e: MediaQueryListEvent) => {\n        setIsMobile(e.matches);\n        };\n        \n        mediaQuery.addEventListener('change', handleChange);\n        return () => mediaQuery.removeEventListener('change', handleChange);\n    }, []);\n    // Load recent searches from localStorage\n    useEffect(() => {\n        const stored = localStorage.getItem('recent_searches');\n        if (stored) {\n            try {\n                setRecentSearches(JSON.parse(stored));\n            } catch (e) {\n                console.error('Failed to parse recent searches', e);\n            }\n        }\n    }, []);\n\n    // Save search query to recent searches\n    const saveRecentSearch = useCallback((query: string) => {\n        if (!query.trim()) return;\n\n        setRecentSearches((prev) => {\n            const updated = [query, ...prev.filter(s => s !== query)].slice(0, 5);\n            localStorage.setItem('recent_searches', JSON.stringify(updated));\n            return updated;\n        });\n    }, []);\n\n    // Cache of known product names/brands seen from API responses for fuzzy fallback\n    const knownTermsRef = useRef<Set<string>>(new Set());\n    const productsByNameRef = useRef<Map<string, Product>>(new Map());\n\n    const cacheProductTerms = useCallback((products: Product[]) => {\n        products.forEach((p) => {\n            if (p.name) {\n                knownTermsRef.current.add(p.name);\n                productsByNameRef.current.set(p.name.toLowerCase(), p);\n            }\n            if (p.brand) knownTermsRef.current.add(p.brand);\n        });\n    }, []);\n\n    // Seed the term cache on mount so fuzzy fallback works on first search\n    useEffect(() => {\n        const seed = async () => {\n            try {\n                const api = new ProductsApi(AXIOS_CONFIG);\n                const res = await api.smartSearch('', 50);\n                if (res.data?.products) cacheProductTerms(res.data.products);\n            } catch { /* ignore */ }\n        };\n        seed();\n    }, [cacheProductTerms]);\n\n    // Live suggestions: debounced smartSearch as user types, with fuzzy ranking\n    const debounceRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n    useEffect(() => {\n        const q = searchInput.trim();\n        if (q.length < 2) {\n            setSuggestions([]);\n            return;\n        }\n\n        if (debounceRef.current) clearTimeout(debounceRef.current);\n        debounceRef.current = setTimeout(async () => {\n            try {\n                const api = new ProductsApi(AXIOS_CONFIG);\n                const res = await api.smartSearch(q, 10);\n                const rawProducts: Product[] = res.data?.products || [];\n\n                // Feed results into the cache for future fuzzy lookups\n                cacheProductTerms(rawProducts);\n\n                const qLower = q.toLowerCase();\n                const qWords = qLower.split(/\\s+/).filter(w => w.length >= 2);\n                const seen = new Set<string>();\n                const scored: { term: string; score: number; isFuzzy: boolean; product?: Product }[] = [];\n\n                // Map term (lowercase) → first product that owns it\n                const termProductMap = new Map<string, Product>();\n                rawProducts.forEach((product) => {\n                    const name = product.name?.toLowerCase();\n                    if (name && !termProductMap.has(name)) termProductMap.set(name, product);\n                    const brand = product.brand?.toLowerCase();\n                    if (brand && !termProductMap.has(brand)) termProductMap.set(brand, product);\n                    (product.tags || []).forEach((t) => {\n                        const tl = t.toLowerCase();\n                        if (!termProductMap.has(tl)) termProductMap.set(tl, product);\n                    });\n                });\n\n                rawProducts.forEach((product) => {\n                    const candidates = [\n                        product.name,\n                        product.brand,\n                        ...(product.tags || []),\n                    ].filter(Boolean) as string[];\n\n                    candidates.forEach((term) => {\n                        if (seen.has(term)) return;\n                        seen.add(term);\n\n                        const tLower = term.toLowerCase();\n                        const tWords = tLower.split(/\\s+/);\n                        const matchedProduct = termProductMap.get(tLower);\n\n                        // Exact / prefix / substring = highest priority\n                        if (tLower === qLower) { scored.push({ term, score: 100, isFuzzy: false, product: matchedProduct }); return; }\n                        if (tLower.startsWith(qLower)) { scored.push({ term, score: 80, isFuzzy: false, product: matchedProduct }); return; }\n                        if (tLower.includes(qLower)) { scored.push({ term, score: 60, isFuzzy: false, product: matchedProduct }); return; }\n\n                        // Word-level fuzzy via levenshtein\n                        let bestRatio = Infinity;\n                        for (const qw of qWords) {\n                            for (const tw of tWords) {\n                                const ratio = levenshtein(qw, tw) / Math.max(qw.length, tw.length);\n                                if (ratio < bestRatio) bestRatio = ratio;\n                            }\n                        }\n                        // Include fuzzy matches with ratio < 0.45\n                        if (bestRatio < 0.45) {\n                            scored.push({ term, score: Math.round((1 - bestRatio) * 40), isFuzzy: true, product: matchedProduct });\n                        }\n                    });\n                });\n\n                // Fallback: if no exact/prefix/substring matches, check the cached terms\n                const hasDirectMatch = scored.some(s => s.score >= 60);\n                if (!hasDirectMatch && knownTermsRef.current.size > 0) {\n                    const cachedCandidates = Array.from(knownTermsRef.current).filter(\n                        (t) => !seen.has(t)\n                    );\n                    const closest = findClosestTerm(q, cachedCandidates);\n                    if (closest) {\n                        const cachedProduct = productsByNameRef.current.get(closest.toLowerCase());\n                        scored.push({ term: closest, score: 50, isFuzzy: true, product: cachedProduct });\n                    }\n                }\n\n                const top = scored\n                    .sort((a, b) => b.score - a.score)\n                    .slice(0, 5)\n                    .map(({ term, isFuzzy, product }) => ({ term, isFuzzy, product }));\n\n                setSuggestions(top);\n            } catch {\n                setSuggestions([]);\n            }\n        }, 300);\n\n        return () => { if (debounceRef.current) clearTimeout(debounceRef.current); };\n    }, [searchInput, cacheProductTerms]);\n\n    // Sanitize search input to handle special characters\n    const sanitizeSearchInput = useCallback((input: string): string => {\n        // Remove leading/trailing whitespace\n        let sanitized = input.trim();\n\n        // Replace multiple spaces with single space\n        sanitized = sanitized.replace(/\\s+/g, ' ');\n\n        // Escape special regex characters for safe processing\n        // but keep the original input for search API\n        return sanitized;\n    }, []);\n\n    useEffect(() => {\n        const fetchSearchResults = async () => {\n            const sanitizedQuery = sanitizeSearchInput(searchQuery);\n\n            if (!sanitizedQuery) {\n                setProducts([]);\n                setIsLoading(false);\n                setHasSearched(false);\n                return;\n            }\n\n            // Require at least 2 characters for search\n            if (sanitizedQuery.length < 2) {\n                setProducts([]);\n                setIsLoading(false);\n                setHasSearched(false);\n                return;\n            }\n\n            try {\n                setIsLoading(true);\n                setDidYouMean(null);\n                setDidYouMeanProduct(null);\n                const api = new ProductsApi(AXIOS_CONFIG);\n\n                // Use AI-powered smart search for typo tolerance and semantic matching\n                const response = await api.smartSearch(sanitizedQuery, 20);\n\n                if (response.data?.products) {\n                    cacheProductTerms(response.data.products);\n                    const query = sanitizedQuery.toLowerCase();\n                    const queryWords = query.split(/\\s+/).filter(w => w.length >= 3);\n\n                    const scoreProduct = (product: Product): number => {\n                        const name = product.name?.toLowerCase() || '';\n                        const brand = product.brand?.toLowerCase() || '';\n                        const desc = product.description?.toLowerCase() || '';\n                        const tags = product.tags?.map(t => t.toLowerCase()) || [];\n                        const allText = `${name} ${brand} ${desc} ${tags.join(' ')}`;\n\n                        if (name === query) return 100;\n                        if (name.startsWith(query)) return 80;\n                        if (name.includes(query)) return 60;\n                        if (brand === query) return 50;\n                        if (brand.startsWith(query)) return 40;\n                        if (brand.includes(query)) return 30;\n                        if (tags.some(t => t === query)) return 20;\n                        if (tags.some(t => t.includes(query))) return 15;\n                        if (desc.includes(query)) return 10;\n                        // Match individual meaningful words from the query\n                        if (queryWords.length > 0 && queryWords.some(w => allText.includes(w))) return 5;\n                        return 0;\n                    };\n\n                    const transformedProducts = response.data.products\n                        .map((item: Product) => ({ ...item, id: item._id || '' }))\n                        .filter((p: Product) => scoreProduct(p) > 0)\n                        .sort((a: Product, b: Product) => scoreProduct(b) - scoreProduct(a));\n\n                    setProducts(transformedProducts);\n\n                    // Save to recent searches if results found\n                    if (transformedProducts.length > 0) {\n                        saveRecentSearch(sanitizedQuery);\n                    } else if (response.data.products.length > 0) {\n                        // No filtered results but API returned candidates — suggest a correction\n                        const candidates = response.data.products.flatMap((p: Product) =>\n                            [p.name, p.brand].filter(Boolean) as string[]\n                        );\n                        const closest = findClosestTerm(sanitizedQuery, candidates);\n                        setDidYouMean(closest);\n                        if (closest) {\n                            const matchedProduct = response.data.products.find((p: Product) =>\n                                p.name?.toLowerCase() === closest.toLowerCase() ||\n                                p.brand?.toLowerCase() === closest.toLowerCase()\n                            ) || null;\n                            setDidYouMeanProduct(matchedProduct);\n                        }\n                    }\n                } else {\n                    setProducts([]);\n                }\n                setHasSearched(true);\n            } catch (error) {\n                console.error('Error fetching smart search results:', error);\n                if (error instanceof Error) {\n                    console.error('Error details:', error.message);\n                }\n                setProducts([]);\n                setHasSearched(true);\n            } finally {\n                setIsLoading(false);\n            }\n        };\n\n        fetchSearchResults();\n    }, [searchQuery, sanitizeSearchInput, saveRecentSearch]);\n\n    const handleSearch = (e: React.FormEvent) => {\n        e.preventDefault();\n        const sanitized = sanitizeSearchInput(searchInput);\n        if (sanitized) {\n            setShowSuggestions(false);\n            router.push(buildPath(`/search?q=${encodeURIComponent(sanitized)}`));\n        }\n    };\n\n    const clearSearch = () => {\n        setSearchInput('');\n        setShowSuggestions(false);\n    };\n\n    const handleSuggestionClick = (suggestion: string) => {\n        setSearchInput(suggestion);\n        setShowSuggestions(false);\n        router.push(buildPath(`/search?q=${encodeURIComponent(suggestion)}`));\n    };\n\n    const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n        const value = e.target.value;\n        setSearchInput(value);\n        setShowSuggestions(value.trim().length >= 2);\n    };\n\n    const handleInputFocus = () => {\n        if (searchInput.trim().length >= 2) {\n            setShowSuggestions(true);\n        }\n    };\n\n    // Four full-width columns produce the same card width as the shop's\n    // three-column product area beside its desktop filters sidebar.\n    const productGridClassName = 'grid grid-cols-2 gap-4 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 xl:grid-cols-4';\n\n    return (\n        <div className=\"min-h-screen bg-white\">\n            {/* Header Section */}\n            <div className=\"bg-hsecondary/[0.03] border-b border-hsecondary/5\">\n                <div className=\"max-w-[1400px] mx-auto px-4 md:px-8 py-8 md:py-12\">\n                    <div className=\"flex flex-col md:flex-row items-center justify-between gap-6 mb-8\">\n                        <div>\n                            <h1 className=\"text-3xl md:text-4xl font-bold text-hsecondary tracking-tight\">\n                                {searchQuery ? `Results for \"${searchQuery}\"` : 'Search Products'}\n                            </h1>\n                            {products.length > 0 && searchQuery && (\n                                <p className=\"text-hmuted mt-2\">\n                                    Found {products.length} {products.length === 1 ? 'product' : 'products'}\n                                </p>\n                            )}\n                        </div>\n                    </div>\n\n                    <div className=\"max-w-2xl\">\n                        <form onSubmit={handleSearch} className=\"relative\">\n                            <div className=\"relative group\">\n                                <Search className=\"absolute left-4 top-1/2 transform -translate-y-1/2 h-5 w-5 text-gray-400 group-focus-within:text-hprimary transition-colors\" />\n                                <Input\n                                    type=\"text\"\n                                    value={searchInput}\n                                    onChange={handleInputChange}\n                                    onFocus={handleInputFocus}\n                                    onBlur={() => setTimeout(() => setShowSuggestions(false), 200)}\n                                    placeholder={isMobile ? \"Search...\" : \"Search for medicines, vitamins, brands...\"}\n                                    className=\"pl-12 pr-28 py-7 text-lg rounded-2xl border-gray-200 bg-white shadow-sm hover:shadow-md focus:ring-4 focus:ring-hprimary/10 focus:border-hprimary transition-all duration-300\"\n                                    autoComplete=\"off\"\n                                />\n                                <AnimatePresence>\n                                    {searchInput && (\n                                        <div className=\"absolute right-4 top-1/2 transform -translate-y-1/2 flex items-center gap-2\">\n                                            <button\n                                                type=\"button\"\n                                                onClick={clearSearch}\n                                                className=\"p-1 rounded-full hover:bg-gray-100 text-gray-400 hover:text-gray-600 transition-colors\"\n                                            >\n                                                <X className=\"h-5 w-5\" />\n                                            </button>\n                                            <div className=\"w-px h-6 bg-gray-200\" />\n                                            <motion.button\n                                                initial={{ opacity: 0, scale: 0.8, x: -10 }}\n                                                animate={{ opacity: 1, scale: 1, x: 0 }}\n                                                exit={{ opacity: 0, scale: 0.8, x: -10 }}\n                                                type=\"submit\"\n                                                className=\"p-2 bg-hprimary text-white rounded-xl hover:bg-hprimary/90 transition-colors shadow-md flex items-center justify-center\"\n                                                title=\"Search\"\n                                            >\n                                                <ArrowRight className=\"h-5 w-5\" />\n                                            </motion.button>\n                                        </div>\n                                    )}\n                                </AnimatePresence>\n\n                                {/* Search Suggestions Dropdown */}\n                                <AnimatePresence>\n                                    {showSuggestions && (suggestions.length > 0 || recentSearches.length > 0) && (\n                                        <motion.div\n                                            initial={{ opacity: 0, y: 10, scale: 0.98 }}\n                                            animate={{ opacity: 1, y: 0, scale: 1 }}\n                                            exit={{ opacity: 0, y: 10, scale: 0.98 }}\n                                            transition={{ duration: 0.2 }}\n                                            className=\"absolute z-50 w-full mt-3 bg-white rounded-2xl shadow-xl border border-gray-100 overflow-hidden\"\n                                        >\n                                            {/* Real-time Suggestions */}\n                                            {suggestions.length > 0 && (\n                                                <div className=\"p-2\">\n                                                    <div className=\"px-4 py-2 text-xs font-bold text-gray-400 uppercase tracking-wider flex items-center gap-2\">\n                                                        <TrendingUp className=\"h-3 w-3\" />\n                                                        Suggestions\n                                                    </div>\n                                                    {suggestions.map(({ term, isFuzzy, product }, index) => (\n                                                        <div key={index}>\n                                                            <button\n                                                                type=\"button\"\n                                                                onClick={() => handleSuggestionClick(term)}\n                                                                className=\"w-full text-left px-4 py-3 hover:bg-gray-50 rounded-xl transition-colors flex items-center gap-3 group\"\n                                                            >\n                                                                <div className=\"h-8 w-8 rounded-full bg-gray-100 flex items-center justify-center group-hover:bg-hprimary/10 transition-colors\">\n                                                                    <Search className=\"h-4 w-4 text-gray-500 group-hover:text-hprimary\" />\n                                                                </div>\n                                                                <span className=\"font-medium text-gray-700 group-hover:text-gray-900 flex items-center gap-2\">\n                                                                    {isFuzzy && (\n                                                                        <span className=\"text-xs font-normal text-hprimary/70\">Did you mean</span>\n                                                                    )}\n                                                                    <span className={isFuzzy ? 'text-hprimary font-semibold' : ''}>\n                                                                        {term}\n                                                                    </span>\n                                                                    {isFuzzy && <span className=\"text-xs font-normal text-hprimary/70\">?</span>}\n                                                                </span>\n                                                            </button>\n                                                            {product && (\n                                                                <button\n                                                                    type=\"button\"\n                                                                    onClick={() => router.push(buildPath(`/products/${product._id || product.id}`))}\n                                                                    className=\"w-full mx-2 mb-2 p-3 bg-gray-50 hover:bg-gray-100 rounded-xl transition-colors flex items-center gap-3 group\"\n                                                                    style={{ width: 'calc(100% - 16px)' }}\n                                                                >\n                                                                    {product.media?.[0]?.file ? (\n                                                                        <img\n                                                                            src={product.media[0].file}\n                                                                            alt={product.name}\n                                                                            className=\"w-12 h-12 rounded-lg object-cover bg-white border border-gray-100 flex-shrink-0\"\n                                                                        />\n                                                                    ) : (\n                                                                        <div className=\"w-12 h-12 rounded-lg bg-white border border-gray-100 flex items-center justify-center flex-shrink-0\">\n                                                                            <Search className=\"h-5 w-5 text-gray-300\" />\n                                                                        </div>\n                                                                    )}\n                                                                    <div className=\"flex-1 min-w-0 text-left\">\n                                                                        <p className=\"text-sm font-medium text-gray-800 truncate group-hover:text-gray-900\">\n                                                                            {product.name}\n                                                                        </p>\n                                                                        <div className=\"flex items-center gap-2 mt-0.5\">\n                                                                            {product.variants?.[0]?.finalPrice != null && (\n                                                                                <span className=\"text-sm font-semibold text-hprimary\">\n                                                                                    ${product.variants[0].finalPrice.toFixed(2)}\n                                                                                </span>\n                                                                            )}\n                                                                            {product.variants?.[0]?.isDiscounted && product.variants[0].retailPrice != null && (\n                                                                                <span className=\"text-xs text-gray-400 line-through\">\n                                                                                    ${product.variants[0].retailPrice.toFixed(2)}\n                                                                                </span>\n                                                                            )}\n                                                                            {product.brand && (\n                                                                                <span className=\"text-xs text-gray-400\">\n                                                                                    {product.brand}\n                                                                                </span>\n                                                                            )}\n                                                                        </div>\n                                                                    </div>\n                                                                    <ArrowRight className=\"h-4 w-4 text-gray-300 group-hover:text-hprimary transition-colors flex-shrink-0\" />\n                                                                </button>\n                                                            )}\n                                                        </div>\n                                                    ))}\n                                                </div>\n                                            )}\n\n                                            {/* Recent Searches */}\n                                            {recentSearches.length > 0 && !searchInput.trim() && (\n                                                <div className=\"p-2 border-t border-gray-100\">\n                                                    <div className=\"px-4 py-2 text-xs font-bold text-gray-400 uppercase tracking-wider flex items-center gap-2\">\n                                                        <Clock className=\"h-3 w-3\" />\n                                                        Recent Searches\n                                                    </div>\n                                                    {recentSearches.map((search, index) => (\n                                                        <button\n                                                            key={index}\n                                                            type=\"button\"\n                                                            onClick={() => handleSuggestionClick(search)}\n                                                            className=\"w-full text-left px-4 py-3 hover:bg-gray-50 rounded-xl transition-colors flex items-center gap-3 group\"\n                                                        >\n                                                            <div className=\"h-8 w-8 rounded-full bg-gray-100 flex items-center justify-center group-hover:bg-gray-200 transition-colors\">\n                                                                <Clock className=\"h-4 w-4 text-gray-500 group-hover:text-gray-700\" />\n                                                            </div>\n                                                            <span className=\"font-medium text-gray-700 group-hover:text-gray-900\">\n                                                                {search}\n                                                            </span>\n                                                        </button>\n                                                    ))}\n                                                </div>\n                                            )}\n                                        </motion.div>\n                                    )}\n                                </AnimatePresence>\n                            </div>\n                        </form>\n                    </div>\n                </div>\n            </div>\n\n            <div className=\"max-w-[1400px] mx-auto px-4 md:px-8 py-12\">\n                {isLoading ? (\n                    <div className={productGridClassName}>\n                        {[...Array(10)].map((_, i) => (\n                            <div key={i} className=\"space-y-3\">\n                                <Skeleton className=\"aspect-[4/5] w-full rounded-2xl\" />\n                                <Skeleton className=\"h-4 w-3/4\" />\n                                <Skeleton className=\"h-4 w-1/2\" />\n                            </div>\n                        ))}\n                    </div>\n                ) : products.length > 0 ? (\n                    <div className={productGridClassName}>\n                        {products.map((product) => (\n                            <ProductCard\n                                key={product.id}\n                                product={product}\n                                isFavorited={isInWishlist(product.id)}\n                                onClickProduct={(p) => router.push(buildPath(`/products/${p.id}`))}\n                            />\n                        ))}\n                    </div>\n                ) : hasSearched ? (\n                    <div className=\"text-center py-20 bg-gray-50 rounded-[32px]\">\n                        <div className=\"mb-8\">\n                            <div className=\"w-20 h-20 bg-white shadow-sm rounded-full flex items-center justify-center mx-auto mb-6\">\n                                <Search className=\"h-8 w-8 text-gray-300\" />\n                            </div>\n                            <h3 className=\"text-2xl font-bold text-hsecondary mb-3\">\n                                No products found\n                            </h3>\n                            <p className=\"text-hmuted text-lg mb-4 max-w-md mx-auto\">\n                                We couldn&apos;t find any matches for &quot;{searchQuery}&quot;. Try generic terms like \"Pain relief\" or \"Vitamin C\".\n                            </p>\n                            {didYouMean && (\n                                <div className=\"mb-6\">\n                                    <p className=\"text-hmuted text-base mb-4\">\n                                        Did you mean{' '}\n                                        <button\n                                            onClick={() => {\n                                                setSearchInput(didYouMean);\n                                                router.push(buildPath(`/search?q=${encodeURIComponent(didYouMean)}`));\n                                            }}\n                                            className=\"text-hprimary font-semibold underline underline-offset-2 hover:text-hprimary/80 transition-colors\"\n                                        >\n                                            {didYouMean}\n                                        </button>\n                                        ?\n                                    </p>\n                                    {didYouMeanProduct && (\n                                        <button\n                                            onClick={() => router.push(buildPath(`/products/${didYouMeanProduct._id || didYouMeanProduct.id}`))}\n                                            className=\"mx-auto max-w-sm w-full p-4 bg-white hover:bg-gray-50 rounded-2xl border border-gray-200 hover:border-gray-300 transition-all shadow-sm hover:shadow-md flex items-center gap-4 group\"\n                                        >\n                                            {didYouMeanProduct.media?.[0]?.file ? (\n                                                <img\n                                                    src={didYouMeanProduct.media[0].file}\n                                                    alt={didYouMeanProduct.name}\n                                                    className=\"w-16 h-16 rounded-xl object-cover bg-gray-50 border border-gray-100 flex-shrink-0\"\n                                                />\n                                            ) : (\n                                                <div className=\"w-16 h-16 rounded-xl bg-gray-50 border border-gray-100 flex items-center justify-center flex-shrink-0\">\n                                                    <Search className=\"h-6 w-6 text-gray-300\" />\n                                                </div>\n                                            )}\n                                            <div className=\"flex-1 min-w-0 text-left\">\n                                                <p className=\"text-sm font-semibold text-gray-800 truncate group-hover:text-gray-900\">\n                                                    {didYouMeanProduct.name}\n                                                </p>\n                                                <div className=\"flex items-center gap-2 mt-1\">\n                                                    {didYouMeanProduct.variants?.[0]?.finalPrice != null && (\n                                                        <span className=\"text-sm font-bold text-hprimary\">\n                                                            ${didYouMeanProduct.variants[0].finalPrice.toFixed(2)}\n                                                        </span>\n                                                    )}\n                                                    {didYouMeanProduct.variants?.[0]?.isDiscounted && didYouMeanProduct.variants[0].retailPrice != null && (\n                                                        <span className=\"text-xs text-gray-400 line-through\">\n                                                            ${didYouMeanProduct.variants[0].retailPrice.toFixed(2)}\n                                                        </span>\n                                                    )}\n                                                </div>\n                                                {didYouMeanProduct.brand && (\n                                                    <p className=\"text-xs text-gray-400 mt-0.5\">{didYouMeanProduct.brand}</p>\n                                                )}\n                                            </div>\n                                            <ArrowRight className=\"h-5 w-5 text-gray-300 group-hover:text-hprimary transition-colors flex-shrink-0\" />\n                                        </button>\n                                    )}\n                                </div>\n                            )}\n                            <button\n                                onClick={clearSearch}\n                                className=\"px-8 py-3 bg-white text-hsecondary font-semibold rounded-xl border border-gray-200 hover:bg-gray-50 hover:border-gray-300 transition-all shadow-sm\"\n                            >\n                                Clear Search\n                            </button>\n                        </div>\n                    </div>\n                ) : (\n                    <div className=\"text-center py-24\">\n                        <div className=\"w-24 h-24 bg-hsecondary/[0.03] rounded-full flex items-center justify-center mx-auto mb-6\">\n                            <Search className=\"h-10 w-10 text-hprimary\" />\n                        </div>\n                        <h3 className=\"text-2xl font-bold text-hsecondary mb-3\">\n                            Start Searching\n                        </h3>\n                        <p className=\"text-hmuted mb-8 text-lg\">\n                            Enter a search term above to find products\n                        </p>\n                    </div>\n                )}\n            </div>\n\n            {/* Recommendations Section */}\n            <RecommendedProductsSection\n                title=\"You may also like\"\n                subtitle=\"Popular products selected for you\"\n                initialLimit={5}\n                increment={5}\n            />\n        </div>\n    );\n}\n","'use client';\n\nimport { useState } from 'react';\nimport { useRouter } from 'next/navigation';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { Button } from '@/components/ui/Button';\nimport { Input } from '@/components/ui/Input';\nimport { addressSchema, type AddressFormData } from '@/lib/validations/address';\nimport { AddressesApi } from '@/lib/Apis/apis/addresses-api';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { ArrowLeft, MapPin } from 'lucide-react';\nimport { useNotification } from '@/providers/NotificationProvider';\nimport { US_STATES } from '@/lib/constants/us-states';\n\nexport default function NewAddressPage() {\n    const router = useRouter();\n    const [isSubmitting, setIsSubmitting] = useState(false);\n    const notification = useNotification();\n\n    const {\n        register,\n        handleSubmit,\n        formState: { errors }\n    } = useForm<AddressFormData>({\n        resolver: zodResolver(addressSchema),\n        defaultValues: {\n            country: 'United States'\n        }\n    });\n\n    const onSubmit = async (data: AddressFormData) => {\n        setIsSubmitting(true);\n        try {\n            const api = new AddressesApi(AXIOS_CONFIG);\n            const response = await api.createAddressForUser({\n                name: data.name,\n                street1: data.street1,\n                street2: data.street2,\n                city: data.city,\n                state: data.state,\n                zip: data.zip,\n                country: data.country,\n                phone: data.phone,\n            });\n\n            notification.success(\n                'Address added',\n                'Your new address has been saved to your account.'\n            );\n            router.back();\n\n        } catch (error: any) {\n            let errorMessage = 'An unexpected error occurred';\n\n            // Handle specific API errors\n            if (error.response?.data?.message) {\n                errorMessage = error.response.data.message;\n            } else if (error.message) {\n                errorMessage = error.message;\n            }\n\n            // Handle validation errors\n            if (error.response?.status === 400) {\n                errorMessage = error.response.data?.message || 'Please check your address details and try again';\n            }\n\n            // Handle network errors\n            if (error.message === 'Network Error') {\n                errorMessage = 'Unable to connect to the server. Please check your internet connection.';\n            }\n\n            notification.error(\n                'Unable to save address',\n                errorMessage,\n                5000\n            );\n\n            // Show additional guidance for certain error types\n            if (error.response?.status === 422) {\n                notification.info(\n                    'Address validation failed',\n                    'Make sure your address is complete and formatted correctly.',\n                    6000\n                );\n            }\n        } finally {\n            setIsSubmitting(false);\n        }\n    };\n\n    return (\n        <div className=\"min-h-screen bg-slate-50\">\n            <div className=\"relative bg-linear-to-br from-[rgb(var(--header-from))] via-[rgb(var(--header-via))] to-[rgb(var(--header-to))] text-white\">\n                <div className=\"absolute inset-0 bg-[radial-gradient(circle_at_top_left,rgba(255,255,255,0.35),transparent_60%)]\" />\n                <div className=\"relative container mx-auto px-4 py-8\">\n                    <button\n                        onClick={() => router.back()}\n                        className=\"inline-flex items-center gap-2 rounded-lg bg-white/10 px-4 py-2 text-sm font-medium text-white hover:bg-white/20 transition-colors\"\n                    >\n                        <ArrowLeft className=\"h-4 w-4\" />\n                        Back\n                    </button>\n                    <div className=\"mt-6 flex items-center gap-4\">\n                        <div className=\"rounded-full bg-white/10 p-3\">\n                            <MapPin className=\"h-6 w-6\" />\n                        </div>\n                        <div>\n                            <h1 className=\"text-3xl font-bold\">Add New Address</h1>\n                            <p className=\"mt-1 text-white/75\">\n                                Enter your delivery address details below.\n                            </p>\n                        </div>\n                    </div>\n                </div>\n            </div>\n\n            <div className=\"container mx-auto px-4 py-8\">\n                <div className=\"max-w-2xl mx-auto\">\n                    <div className=\"bg-white rounded-2xl shadow-xl p-6\">\n                        <form onSubmit={handleSubmit(onSubmit)} className=\"space-y-6\">\n                            <div className=\"grid grid-cols-1 md:grid-cols-2 gap-4\">\n                                <Input\n                                    label=\"Full name\"\n                                    placeholder=\"John Doe\"\n                                    {...register('name')}\n                                    maxLength={100}\n                                    error={errors.name?.message}\n                                />\n                                <Input\n                                    label=\"Phone number\"\n                                    placeholder=\"+1 415 555 0100\"\n                                    {...register('phone')}\n                                    error={errors.phone?.message}\n                                />\n                                <div className=\"md:col-span-2\">\n                                    <Input\n                                        label=\"Address line 1\"\n                                        placeholder=\"123 Main St\"\n                                        {...register('street1')}\n                                        maxLength={200}\n                                        error={errors.street1?.message}\n                                    />\n                                </div>\n                                <div className=\"md:col-span-2\">\n                                    <Input\n                                        label=\"Address line 2 (optional)\"\n                                        placeholder=\"Apt 4B\"\n                                        {...register('street2')}\n                                        maxLength={200}\n                                    />\n                                </div>\n                                <Input\n                                    label=\"City\"\n                                    placeholder=\"New York\"\n                                    {...register('city')}\n                                    maxLength={100}\n                                    error={errors.city?.message}\n                                />\n                                <div>\n                                    <label className=\"block text-sm font-medium text-gray-700 mb-2\">State</label>\n                                    <select\n                                        {...register('state')}\n                                        className={`w-full px-4 py-3 rounded-lg border-2 transition-all duration-200 focus:outline-hidden focus:ring-4 text-sm bg-white ${errors.state ? 'border-red-500 focus:border-red-600 focus:ring-red-500/20' : 'border-gray-200 focus:border-hprimary-500 focus:ring-hprimary-500/20'}`}\n                                    >\n                                        <option value=\"\">Select state</option>\n                                        {US_STATES.map(s => (\n                                            <option key={s.abbr} value={s.abbr}>{s.name}</option>\n                                        ))}\n                                    </select>\n                                    {errors.state && <p className=\"mt-2 text-sm text-red-600\">{errors.state.message}</p>}\n                                </div>\n                                <Input\n                                    label=\"ZIP code\"\n                                    placeholder=\"10001\"\n                                    {...register('zip')}\n                                    maxLength={20}\n                                    error={errors.zip?.message}\n                                />\n                                <Input\n                                    label=\"Country\"\n                                    {...register('country')}\n                                    disabled\n                                    className=\"bg-gray-50 text-gray-500 cursor-not-allowed\"\n                                />\n                            </div>\n                            <div className=\"flex justify-end gap-4\">\n                                <Button\n                                    type=\"button\"\n                                    variant=\"outline-solid\"\n                                    onClick={() => router.back()}\n                                >\n                                    Cancel\n                                </Button>\n                                <Button type=\"submit\" disabled={isSubmitting}>\n                                    {isSubmitting ? 'Adding Address...' : 'Add Address'}\n                                </Button>\n                            </div>\n                        </form>\n                    </div>\n                </div>\n            </div>\n        </div>\n    );\n}","'use client';\n\nimport React, { useEffect, useState } from 'react';\nimport { motion } from 'framer-motion';\nimport { useForm, Controller } from 'react-hook-form';\nimport { z } from 'zod';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { useRouter } from 'next/navigation';\nimport { Phone, User, CheckCircle2, AlertCircle } from 'lucide-react';\nimport { Input } from '@/components/ui/Input';\nimport { Button } from '@/components/ui/Button';\nimport { useAuth } from '@/providers/AuthProvider';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { dateOfBirthValidation } from '@/lib/validations/auth';\nimport { formatPhoneNumber } from '@/lib/utils/format';\n\n\nconst nameRegex = /^[a-zA-ZÀ-ÿ\\s'-]+$/;\nconst profileSchema = z.object({\n  firstname: z.string().min(2, 'First name is required').max(50, 'First name must be at most 50 characters').regex(nameRegex, 'First name can only contain letters'),\n  lastname: z.string().min(2, 'Last name is required').max(50, 'Last name must be at most 50 characters').regex(nameRegex, 'Last name can only contain letters'),\n  phoneNumber: z\n    .string()\n    .optional()\n    .or(z.literal(''))\n    .refine(\n      (val) => !val || (val.length >= 10 && /^\\+?[1-9][0-9\\s-]{8,18}$/.test(val)),\n      'Invalid phone number format. (e.g., +1 555 123-4567)'\n    ),\n  dateOfBirth: z.string().optional().or(z.literal('')).refine(\n    (val) => {\n      if (!val) return true;\n      const [year, month, day] = val.split('-').map(Number);\n      const date = new Date(year, month - 1, day);\n      const now = new Date();\n      if (isNaN(date.getTime())) return false;\n      if (date.getFullYear() !== year || (date.getMonth() + 1) !== month || date.getDate() !== day) return false;\n      if (date > now) return false;\n      const maxAgeDate = new Date(); maxAgeDate.setFullYear(now.getFullYear() - 120);\n      if (date < maxAgeDate) return false;\n      const minAgeDate = new Date(); minAgeDate.setFullYear(now.getFullYear() - 18);\n      if (date > minAgeDate) return false;\n      return true;\n    },\n    (val) => {\n      if (!val) return { message: '' };\n      const [year, month, day] = val.split('-').map(Number);\n      const date = new Date(year, month - 1, day);\n      const now = new Date();\n      if (isNaN(date.getTime()) || date.getFullYear() !== year || (date.getMonth() + 1) !== month || date.getDate() !== day) return { message: 'Please enter a physically valid date' };\n      if (date > now) return { message: 'Date of birth cannot be in the future' };\n      const maxAgeDate = new Date(); maxAgeDate.setFullYear(now.getFullYear() - 120);\n      if (date < maxAgeDate) return { message: 'Please enter a realistic date of birth (max 120 years)' };\n      return { message: 'You must be at least 18 years old' };\n    }\n  ),\n});\n\ntype ProfileFormData = z.infer<typeof profileSchema>;\n\nexport function EditProfileScreen() {\n  const router = useRouter();\n  const { user, updateUser } = useAuth();\n  const { buildPath } = useBasePath();\n  const [isSubmitting, setIsSubmitting] = useState(false);\n  const [status, setStatus] = useState<{ type: 'success' | 'error'; message: string } | null>(\n    null\n  );\n\n  const maxDate = new Date();\n  maxDate.setFullYear(maxDate.getFullYear() - 18);\n  const maxDateString = maxDate.toISOString().split('T')[0];\n\n  const minDate = new Date();\n  minDate.setFullYear(minDate.getFullYear() - 120);\n  const minDateString = minDate.toISOString().split('T')[0];\n\n  const {\n    register,\n    handleSubmit,\n    control,\n    formState: { errors },\n  } = useForm<ProfileFormData>({\n    resolver: zodResolver(profileSchema),\n    values: {\n      firstname: user?.firstname || '',\n      lastname: user?.lastname || '',\n      phoneNumber: user?.phoneNumber || '',\n      dateOfBirth: user?.dateOfBirth ? new Date(user.dateOfBirth).toISOString().split('T')[0] : '',\n    },\n  });\n\n  useEffect(() => {\n    // Log validation errors if they occur\n    if (Object.keys(errors).length > 0) {\n      console.log('EditProfileScreen Form validation errors:', errors);\n    }\n  }, [errors]);\n\n  useEffect(() => {\n    if (!user) {\n      const redirect = typeof window !== 'undefined' ? window.location.pathname : '/account/edit';\n      router.push(buildPath(`/login?redirect=${encodeURIComponent(redirect)}`));\n    }\n  }, [user, router, buildPath]);\n\n  if (!user) {\n    return null;\n  }\n\n  const getErrorMessage = (error: any): string => {\n    const msg = error.response?.data?.message;\n    const raw = Array.isArray(msg) ? msg.join(' ') : String(msg ?? '');\n    if (raw.includes('E11000') || raw.includes('duplicate key') || error.response?.status === 409) {\n      return 'This email address is already registered to another account. Please use a different email.';\n    }\n    if (Array.isArray(msg)) return msg[0] || 'Failed to update profile';\n    if (typeof msg === 'string') return msg;\n    return 'Failed to update profile';\n  };\n\n  const onSubmit = async (data: ProfileFormData) => {\n    setIsSubmitting(true);\n    setStatus(null);\n    console.log('EditProfileScreen submitting with data:', data);\n    try {\n      await updateUser({\n        firstname: data.firstname,\n        lastname: data.lastname,\n        phoneNumber: data.phoneNumber ? data.phoneNumber.replace(/[\\s-]/g, '') : undefined,\n        dateOfBirth: data.dateOfBirth ? new Date(data.dateOfBirth) : undefined,\n      });\n      setStatus({ type: 'success', message: 'Profile updated successfully' });\n      router.push(buildPath('/account'));\n    } catch (error: any) {\n      setStatus({\n        type: 'error',\n        message: getErrorMessage(error),\n      });\n    } finally {\n      setIsSubmitting(false);\n    }\n  };\n\n  return (\n    <div className=\"min-h-screen bg-slate-50 text-slate-900\">\n      <div className=\"container mx-auto px-4 pb-16 pt-10\">\n        <motion.div\n          initial={{ opacity: 0, y: 18 }}\n          animate={{ opacity: 1, y: 0 }}\n          className=\"mx-auto max-w-3xl rounded-3xl border border-slate-200 bg-white p-8 shadow-xl shadow-primary-50\"\n        >\n          <div className=\"flex items-center gap-3\">\n            <span className=\"flex h-11 w-11 items-center justify-center rounded-2xl bg-hprimary-50 text-hprimary-600\">\n              <User className=\"h-5 w-5\" />\n            </span>\n            <div>\n              <p className=\"text-xs font-semibold uppercase tracking-[0.32em] text-slate-500\">\n                Profile\n              </p>\n              <h1 className=\"text-2xl font-semibold text-slate-900\">Edit core information</h1>\n            </div>\n          </div>\n          <p className=\"mt-3 text-sm text-slate-600\">\n            Update your name, email, and contact information so we can keep your deliveries and\n            pharmacist support aligned with your preferences.\n          </p>\n\n          {status && (\n            <div\n              className={`mt-4 flex items-center gap-3 rounded-xl border-l-4 px-4 py-3 text-sm ${\n                status.type === 'success'\n                  ? 'border-l-green-500 bg-green-50 text-green-800'\n                  : 'border-l-red-500 bg-red-50 text-red-700'\n              }`}\n            >\n              {status.type === 'success'\n                ? <CheckCircle2 className=\"h-4 w-4 shrink-0 text-green-500\" />\n                : <AlertCircle className=\"h-4 w-4 shrink-0 text-red-500\" />\n              }\n              <span>{status.message}</span>\n            </div>\n          )}\n\n          <form onSubmit={handleSubmit(onSubmit)} className=\"mt-8 space-y-6\">\n            <div className=\"grid gap-4 md:grid-cols-2\">\n              <Input\n                label=\"First name\"\n                placeholder=\"Taylor\"\n                {...register('firstname')}\n                maxLength={50}\n                error={errors.firstname?.message}\n              />\n              <Input\n                label=\"Last name\"\n                placeholder=\"Reed\"\n                {...register('lastname')}\n                maxLength={50}\n                error={errors.lastname?.message}\n              />\n            </div>\n\n            <div className=\"relative\">\n              <Controller\n                name=\"phoneNumber\"\n                control={control}\n                render={({ field: { onChange, value } }) => (\n                  <Input\n                    type=\"tel\"\n                    label=\"Phone number (optional)\"\n                    placeholder=\"+1 415 555 0100\"\n                    className=\"pl-10\"\n                    value={value}\n                    onChange={(e) => {\n                      const formatted = formatPhoneNumber(e.target.value);\n                      onChange(formatted);\n                    }}\n                    error={errors.phoneNumber?.message}\n                  />\n                )}\n              />\n              <Phone className=\"absolute left-3 top-[38px] h-4 w-4 text-slate-400 my-2\" />\n            </div>\n\n            <div className=\"relative\">\n              <Input\n                type=\"date\"\n                label=\"Date of Birth (optional)\"\n                className=\"pl-3\"\n                max={maxDateString}\n                min={minDateString}\n                {...register('dateOfBirth')}\n                error={errors.dateOfBirth?.message}\n              />\n            </div>\n\n            <div className=\"flex flex-wrap gap-3\">\n              <Button\n                type=\"submit\" size=\"md\" isLoading={isSubmitting}\n                className=\"border-slate-300 text-slate-800 hover:opacity-95\"\n                variant=\"primary\"\n              >\n                Save changes\n              </Button>\n              <Button\n                type=\"button\"\n                variant=\"outline-solid\"\n                size=\"md\"\n                className=\"border-slate-300 text-slate-800 hover:bg-slate-50\"\n                onClick={() => router.push(buildPath('/account'))}\n              >\n                Cancel\n              </Button>\n            </div>\n          </form>\n        </motion.div>\n      </div >\n    </div >\n  );\n}\n","'use client';\n\nimport React, { useState, useEffect } from 'react';\nimport { Loader2, ArrowLeft } from 'lucide-react';\nimport { useNotificationCenter } from '@/providers/NotificationCenterProvider';\nimport { NotificationType, PreferenceUpdateItemTypeEnum, NotificationSettings } from '@/providers/NotificationCenterProvider';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Button } from '@/components/ui/Button';\nimport { useRouter } from 'next/navigation';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { ConfirmModal } from '@/components/ui/ConfirmModal';\n\ninterface NotificationCategory {\n    name: string;\n    types: Array<{\n        type: NotificationType;\n        label: string;\n        description: string;\n        isComingSoon?: boolean;\n    }>;\n}\n\nconst NOTIFICATION_CATEGORIES: NotificationCategory[] = [\n    {\n        name: 'Order Updates',\n        types: [\n            {\n                type: PreferenceUpdateItemTypeEnum.ORDERCONFIRMATION,\n                label: 'Order Confirmed',\n                description: 'Get notified when your order is confirmed',\n            },\n            {\n                type: PreferenceUpdateItemTypeEnum.ORDERSHIPPED,\n                label: 'Order Shipped',\n                description: 'Track your order when it ships',\n            },\n            {\n                type: PreferenceUpdateItemTypeEnum.ORDERDELIVERED,\n                label: 'Order Delivered',\n                description: 'Know when your order arrives',\n            },\n        ],\n    },\n    {\n        name: 'Security',\n        types: [\n            {\n                type: PreferenceUpdateItemTypeEnum.NEWDEVICELOGIN,\n                label: 'New Device Login',\n                description: 'Alert when logging in from a new device',\n                isComingSoon: true,\n            },\n            {\n                type: PreferenceUpdateItemTypeEnum.TWOFACODE,\n                label: 'Two-Factor Authentication',\n                description: 'Receive 2FA codes',\n                isComingSoon: true,\n            },\n        ],\n    },\n    {\n        name: 'Marketing',\n        types: [\n            {\n                type: PreferenceUpdateItemTypeEnum.ABANDONEDCARTREMINDER,\n                label: 'Abandoned Cart',\n                description: 'Reminders for items left in cart',\n                isComingSoon: true,\n            },\n            {\n                type: PreferenceUpdateItemTypeEnum.PRICEDROPALERT,\n                label: 'Price Drop Alert',\n                description: 'Notify when prices drop on saved items',\n                isComingSoon: true,\n            },\n            {\n                type: PreferenceUpdateItemTypeEnum.BACKINSTOCK,\n                label: 'Back in Stock',\n                description: 'Alert when out-of-stock items return',\n                isComingSoon: true,\n            },\n        ],\n    },\n];\n\n// Custom Minimal Switch Component\nconst Switch = ({ checked, onChange, disabled }: { checked: boolean; onChange: (checked: boolean) => void; disabled?: boolean }) => (\n    <button\n        onClick={() => !disabled && onChange(!checked)}\n        className={`relative w-9 h-5 rounded-full transition-colors duration-200 ease-in-out focus:outline-none ${checked ? 'bg-black' : 'bg-slate-200'\n            } ${disabled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`}\n    >\n        <span\n            className={`absolute top-0.5 left-0.5 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-200 ease-in-out ${checked ? 'translate-x-4' : 'translate-x-0'\n                }`}\n        />\n    </button>\n);\n\nexport function NotificationSettingsScreen() {\n    const router = useRouter();\n    const { buildPath } = useBasePath();\n    const { settings, updateSettings, isLoading } = useNotificationCenter();\n    const [localSettings, setLocalSettings] = useState(settings);\n    const [isSaving, setIsSaving] = useState(false);\n    const [hasChanges, setHasChanges] = useState(false);\n    const [isConfirmModalOpen, setIsConfirmModalOpen] = useState(false);\n\n    useEffect(() => {\n        if (settings) {\n            setLocalSettings(settings);\n        }\n    }, [settings]);\n\n    const getChannelSetting = (type: NotificationType, channel: 'email' | 'push' | 'inApp'): boolean => {\n        const activeSettings = hasChanges ? localSettings : settings;\n        if (!activeSettings?.preferences || !Array.isArray(activeSettings.preferences)) {\n            return false;\n        }\n\n        const normalize = (s: any) => s?.toString().replace(/[^a-zA-Z0-9]/g, '').toUpperCase() || '';\n        const targetType = normalize(type);\n\n        const pref = activeSettings.preferences.find(p => normalize(p.type) === targetType);\n\n        if (!pref) return false;\n\n        const val = (pref.settings as any)?.[channel];\n        return val === true || val === 'true' || val === 1 || val === '1';\n    };\n\n    const updateChannelSetting = (type: NotificationType, channel: 'email' | 'push' | 'inApp', value: boolean) => {\n        setLocalSettings(prev => {\n            const currentSettings = prev || settings || { preferences: [] };\n            const currentPrefs = Array.isArray(currentSettings.preferences) ? currentSettings.preferences : [];\n            const preferences = [...currentPrefs];\n\n            const normalize = (s: any) => s?.toString().replace(/[^a-zA-Z0-9]/g, '').toUpperCase() || '';\n            const targetType = normalize(type);\n\n            const existingIndex = preferences.findIndex(p => normalize(p.type) === targetType);\n\n            if (existingIndex >= 0) {\n                preferences[existingIndex] = {\n                    ...preferences[existingIndex],\n                    settings: {\n                        ...preferences[existingIndex].settings,\n                        [channel]: value,\n                    },\n                };\n            } else {\n                preferences.push({\n                    type,\n                    settings: {\n                        email: channel === 'email' ? value : true,\n                        push: channel === 'push' ? value : true,\n                        inApp: channel === 'inApp' ? value : true,\n                    },\n                });\n            }\n\n            return { ...currentSettings, preferences };\n        });\n\n        setHasChanges(true);\n    };\n\n    const handleSave = async () => {\n        if (!localSettings) return;\n\n        setIsSaving(true);\n        try {\n            await updateSettings(localSettings);\n            setHasChanges(false);\n        } catch (error) {\n            console.error('Failed to save settings:', error);\n            alert('Failed to save settings. Please try again.');\n        } finally {\n            setIsSaving(false);\n        }\n    };\n\n    const handleDisableAll = () => {\n        const preferences: NotificationSettings['preferences'] = [];\n\n        NOTIFICATION_CATEGORIES.forEach(category => {\n            category.types.forEach(notifType => {\n                preferences.push({\n                    type: notifType.type,\n                    settings: {\n                        email: false,\n                        push: false,\n                        inApp: false,\n                    },\n                });\n            });\n        });\n\n        setLocalSettings(prev => ({\n            ...(prev || settings || { preferences: [] }),\n            preferences\n        }));\n        setHasChanges(true);\n        setIsConfirmModalOpen(false);\n    };\n\n    if (isLoading && !settings) {\n        return (\n            <div className=\"flex h-[50vh] flex-col items-center justify-center\">\n                <Loader2 className=\"h-6 w-6 animate-spin text-slate-400\" />\n            </div>\n        );\n    }\n\n    return (\n        <div className=\"mx-auto max-w-4xl px-6 py-8\">\n\n            {/* Header */}\n            <div className=\"mb-6 flex items-end justify-between border-b border-slate-100 pb-4\">\n                <div>\n                    <button\n                        onClick={() => router.push(buildPath('/account'))}\n                        className=\"mb-3 flex items-center gap-1.5 text-sm text-slate-500 hover:text-slate-800 transition-colors\"\n                    >\n                        <ArrowLeft className=\"h-4 w-4\" />\n                        Back to Settings\n                    </button>\n                    <h1 className=\"text-2xl font-semibold tracking-tight text-slate-900\">Notifications</h1>\n                    <p className=\"mt-2 text-sm text-slate-500\">\n                        Manage your notification preferences across all channels.\n                    </p>\n                </div>\n            </div>\n\n            {/* Notification Table Header */}\n            <div className=\"hidden grid-cols-12 gap-4 border-b border-slate-100 pb-3 text-xs font-medium uppercase tracking-wider text-slate-400 sm:grid\">\n                <div className=\"col-span-8\">Topic</div>\n                <div className=\"col-span-2 text-center\">Email</div>\n                <div className=\"col-span-2 text-center\">Push</div>\n                {/* <div className=\"col-span-2 text-center\">In-App</div> */}\n            </div>\n\n            {/* Content */}\n            <div className=\"space-y-8 py-4\">\n                {NOTIFICATION_CATEGORIES.map((category) => (\n                    <section key={category.name}>\n                        <h2 className=\"mb-6 text-sm font-semibold text-slate-900\">{category.name}</h2>\n\n                        <div className=\"space-y-4\">\n                            {category.types.map((notifType) => (\n                                <div key={notifType.type} className=\"group grid grid-cols-1 sm:grid-cols-12 gap-y-3 sm:gap-x-4 items-start sm:items-center\">\n                                    {/* Info */}\n                                    <div className=\"sm:col-span-8 pr-4\">\n                                        <div className=\"flex items-center gap-2\">\n                                            <span className={`text-sm font-medium ${notifType.isComingSoon ? 'text-slate-400' : 'text-slate-700'}`}>\n                                                {notifType.label}\n                                            </span>\n                                            {notifType.isComingSoon && (\n                                                <span className=\"rounded bg-slate-100 px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wider text-slate-500\">\n                                                    Soon\n                                                </span>\n                                            )}\n                                        </div>\n                                        <p className=\"mt-0.5 text-xs text-slate-500\">{notifType.description}</p>\n                                    </div>\n\n                                    {/* Toggles */}\n                                    <div className=\"sm:col-span-4 grid grid-cols-2 gap-2 sm:gap-4 bg-slate-50 sm:bg-transparent rounded-lg p-3 sm:p-0\">\n                                        <div className=\"flex items-center justify-start sm:justify-center gap-2\">\n                                            <span className=\"sm:hidden text-xs font-semibold text-slate-700 uppercase tracking-wide\">Email</span>\n                                            <Switch\n                                                checked={getChannelSetting(notifType.type, 'email')}\n                                                onChange={(checked) => updateChannelSetting(notifType.type, 'email', checked)}\n                                                disabled={notifType.isComingSoon}\n                                            />\n                                        </div>\n                                        <div className=\"flex items-center justify-start sm:justify-center gap-2\">\n                                            <span className=\"sm:hidden text-xs font-semibold text-slate-700 uppercase tracking-wide\">Push</span>\n                                            <Switch\n                                                checked={getChannelSetting(notifType.type, 'push')}\n                                                onChange={(checked) => updateChannelSetting(notifType.type, 'push', checked)}\n                                                disabled={notifType.isComingSoon}\n                                            />\n                                        </div>\n                                        {/* \n                                        <div className=\"flex items-center justify-between sm:justify-center col-span-1\">\n                                            <span className=\"sm:hidden text-xs text-slate-400\">In-App</span>\n                                            <Switch\n                                                checked={getChannelSetting(notifType.type, 'inApp')}\n                                                onChange={(checked) => updateChannelSetting(notifType.type, 'inApp', checked)}\n                                                disabled={notifType.isComingSoon}\n                                            />\n                                        </div> \n                                        */}\n                                    </div>\n                                </div>\n                            ))}\n                        </div>\n                    </section>\n                ))}\n            </div>\n\n            <div className=\"mt-12 border-t border-slate-100 pt-8 text-center sm:text-left\">\n                <Button\n                    variant=\"ghost\"\n                    className=\"text-xs text-slate-400 hover:text-red-600 px-0\"\n                    onClick={() => setIsConfirmModalOpen(true)}\n                >\n                    Disable all notifications\n                </Button>\n            </div>\n\n            <ConfirmModal\n                isOpen={isConfirmModalOpen}\n                onClose={() => setIsConfirmModalOpen(false)}\n                onConfirm={handleDisableAll}\n                title=\"Disable All Notifications\"\n                message=\"Are you sure you want to disable all notifications? You can re-enable them individually later.\"\n                confirmText=\"Disable All\"\n                cancelText=\"Cancel\"\n                variant=\"danger\"\n            />\n\n            {hasChanges && (\n                <div className=\"bg-white/80 backdrop-blur-sm fixed bottom-6 left-1/2 -translate-x-1/2 z-50 rounded-xl shadow-lg border border-slate-200 p-2 px-4 flex items-center gap-4 animate-in slide-in-from-bottom-2 fade-in duration-300\">\n                    <span className=\"text-xs font-medium text-slate-600\">Unsaved changes</span>\n                    <div className=\"h-4 w-px bg-slate-200\" />\n                    <Button\n                        onClick={handleSave}\n                        isLoading={isSaving}\n                        disabled={isSaving}\n                        variant=\"primary\"\n                        className=\"h-8 rounded-lg px-4 text-xs font-medium bg-black text-white bg-slate-800 hover:bg-slate-700\"\n                    >\n                        Save\n                    </Button>\n                </div>\n            )}\n        </div>\n    );\n}\n","'use client';\n\nimport { PLACEHOLDER_IMAGE_SRC } from '@/lib/constants/assets';\n\nimport { useState, useEffect } from 'react';\nimport { motion } from 'framer-motion';\nimport {\n    ChevronLeft,\n    Package,\n    Truck,\n    MapPin,\n    CreditCard,\n    ExternalLink,\n    AlertCircle,\n    Repeat,\n} from 'lucide-react';\nimport { useRouter } from 'next/navigation';\nimport { useOrder } from '@/hooks/useOrders';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { useAuth } from '@/providers/AuthProvider';\nimport { useCart } from '@/providers/CartProvider';\nimport { useStore } from '@/context/StoreContext';\nimport { formatPrice, formatDate } from '@/lib/utils/format';\nimport { Badge } from '@/components/ui/Badge';\nimport { Button } from '@/components/ui/Button';\nimport Image from 'next/image';\nimport { ShippingApi } from '@/lib/Apis/apis/shipping-api';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { useOrderProductData } from '@/hooks/useOrderProductImages';\n\ninterface OrderDetailScreenProps {\n    id: string;\n    /** Guest email from query param — enables public track endpoint when user is not authenticated */\n    email?: string;\n}\n\nexport function OrderDetailScreen({ id, email }: OrderDetailScreenProps) {\n    const router = useRouter();\n    const { buildPath } = useBasePath();\n    const { isAuthenticated } = useAuth();\n    // When not authenticated but email is provided, use the public track endpoint.\n    // When neither, redirect to login (handled after loading completes).\n    const guestEmail = !isAuthenticated ? email : undefined;\n    const { order, isLoading, error } = useOrder(id, guestEmail);\n    const { reorderFromOrder, isLoading: isCartLoading } = useCart();\n    const { setCartOpen } = useStore();\n    const [storeAddress, setStoreAddress] = useState<any>(null);\n    const [shipment, setShipment] = useState<any>(null);\n    const [isReordering, setIsReordering] = useState(false);\n    const { images: productImages, names: productNames } = useOrderProductData(order?.items);\n\n    // Fetch store address for pickup orders\n    useEffect(() => {\n        if (order && order.orderType !== 'Delivery' && !order.pickUpAddress) {\n            const fetchStoreAddress = async () => {\n                try {\n                    const api = new ShippingApi(AXIOS_CONFIG);\n                    const res = await api.getStoreAddress();\n                    if (res.data) {\n                        setStoreAddress(res.data);\n                    }\n                } catch (e) {\n                    console.error('[OrderDetail] Failed to fetch store address:', e);\n                }\n            };\n            fetchStoreAddress();\n        }\n    }, [order]);\n\n    // Fetch shipment for delivery orders to get the shipping address (source: shipment table)\n    useEffect(() => {\n        if (order && order.orderType === 'Delivery') {\n            const orderId = order.id || order._id;\n            console.log('[OrderDetail] Fetching shipment for order ID:', orderId);\n            const fetchShipment = async () => {\n                try {\n                    const api = new ShippingApi(AXIOS_CONFIG);\n                    if (orderId) {\n                        const res = await api.getOrderShipment(orderId);\n                        console.log('[OrderDetail] Shipment fetched:', res.data);\n                        if (res.data) {\n                            setShipment(res.data);\n                        }\n                    }\n                } catch (e: any) {\n                    if (e.response?.status === 404) {\n                        console.log('[OrderDetail] No shipment record found in table yet (404). Using fallback address from order object.');\n                    } else {\n                        console.error('[OrderDetail] Failed to fetch shipment:', e);\n                    }\n                }\n            };\n            fetchShipment();\n        }\n    }, [order]);\n\n    if (isLoading) {\n        return (\n            <div className=\"min-h-screen bg-slate-50 flex flex-col items-center justify-center p-4\">\n                <div className=\"w-16 h-16 border-4 border-hprimary-20 border-t-primary rounded-full animate-spin mb-4\" />\n                <p className=\"text-hmuted font-medium animate-pulse\">Retrieving order details...</p>\n            </div>\n        );\n    }\n\n    // Not logged in and no email param — redirect to login\n    if (!isAuthenticated && !email && !isLoading) {\n        router.push(buildPath(`/login?redirect=/account/orders/${id}`));\n        return null;\n    }\n\n    if (error || !order) {\n        return (\n            <div className=\"min-h-screen bg-slate-50 flex flex-col items-center justify-center p-4\">\n                <div className=\"p-4 bg-red-50 rounded-full mb-4\">\n                    <AlertCircle className=\"w-10 h-10 text-red-500\" />\n                </div>\n                <h1 className=\"text-xl font-bold text-hsecondary mb-2\">Order Not Found</h1>\n                <p className=\"text-hmuted mb-6\">We could not find the order you are looking for.</p>\n                <Button onClick={() => router.push(buildPath(isAuthenticated ? '/account' : '/shop'))}>\n                    {isAuthenticated ? 'Back to Account' : 'Back to Shop'}\n                </Button>\n            </div>\n        );\n    }\n\n    const items = order.items || [];\n    const customProducts = (order.customProducts || []) as any[];\n    const totalItemCount = items.length + customProducts.length;\n    const status = order.orderStatus || 'Pending';\n    const isDelivery = order.orderType === 'Delivery';\n\n    const getStatusVariant = (status: string): 'success' | 'warning' | 'primary' | 'danger' | 'gray' => {\n        switch (status.toLowerCase()) {\n            case 'pending': return 'warning';\n            case 'delivered':\n            case 'fulfilled':\n            case 'picked up': return 'success';\n            case 'shipped': return 'primary';\n            case 'cancelled': return 'danger';\n            default: return 'gray';\n        }\n    };\n\n    // Fallback logic for various ways addresses might be stored in the order object\n    const rawOrder = order as any;\n    const shipmentAddress = shipment?.shipmentDetails?.addressTo;\n    const shippingAddress = shipmentAddress || order.shippingInfo?.addressTo || rawOrder.shippingAddress || rawOrder.addressTo;\n    const pickupAddress = order.pickUpAddress || storeAddress;\n    const activeAddress = isDelivery ? shippingAddress : pickupAddress;\n\n    const isCompletedOrder = order.orderStatus &&\n        ['Delivered', 'Picked Up', 'Fulfilled'].includes(order.orderStatus);\n\n    const isUnpaidCard = order.payment?.paymentMethod === 'Card' &&\n        order.payment?.paymentStatus !== 'Paid' &&\n        !!order.payment?.hostedInvoiceUrl;\n\n    const handleReorder = async () => {\n        setIsReordering(true);\n        try {\n            await reorderFromOrder(order);\n            setCartOpen(true);\n        } finally {\n            setIsReordering(false);\n        }\n    };\n\n    return (\n        <div className=\"min-h-screen py-4 pb-24\">\n            {/* Header / Navigation */}\n            <div className=\"container mx-auto px-4 pt-8 max-w-6xl\">\n                <button\n                    onClick={() => router.push(buildPath(isAuthenticated ? '/account?tab=orders' : '/shop'))}\n                    className=\"flex items-center gap-1 text-hsecondary/60 hover:text-hsecondary transition-colors mb-6 text-sm pb-4\"\n                >\n                    <ChevronLeft className=\"w-4 h-4\" />\n                    {isAuthenticated ? 'Back to Order History' : 'Back to Shop'}\n                </button>\n\n                <div className=\"flex flex-col md:flex-row md:items-end justify-between gap-4 mb-8\">\n                    <div>\n                        <div className=\"flex items-center flex-wrap gap-2 mb-2\">\n                            <h1 className=\"text-2xl sm:text-4xl font-medium text-hsecondary\">Order Details</h1>\n                            <Badge variant={getStatusVariant(status)}>{status}</Badge>\n                        </div>\n                        <div className=\"flex items-center flex-wrap gap-x-2 gap-y-1 text-xs text-hsecondary/60 pt-1\">\n                            <Package className=\"w-3 h-3 opacity-60 shrink-0\" />\n                            <span>Order #{id.toUpperCase()}</span>\n                            <span className=\"opacity-40\">•</span>\n                            <span>{formatDate(order.createdAt || new Date(), 'long')}</span>\n                        </div>\n                    </div>\n                    <div className=\"flex flex-wrap gap-3\">\n                        {isAuthenticated && isCompletedOrder && (\n                            <Button\n                                size=\"sm\"\n                                onClick={handleReorder}\n                                disabled={isReordering || isCartLoading}\n                                className=\"bg-hsecondary hover:bg-hsecondary/80 text-hsecondary border-none\"\n                            >\n                                <Repeat className=\"w-4 h-4\" />\n                                {isReordering ? 'Adding...' : 'Reorder'}\n                            </Button>\n                        )}\n                        {isAuthenticated && order.payment?.hostedInvoiceUrl && (\n                            <Button size=\"sm\" onClick={() => window.open(order.payment?.hostedInvoiceUrl, '_blank')} className=\"bg-hsecondary hover:bg-haccent-dark border-none\">\n                                <ExternalLink className=\"w-4 h-4\" />\n                                {isUnpaidCard ? 'Pay Now' : 'Payment Details'}\n                            </Button>\n                        )}\n                    </div>\n                </div>\n            </div>\n\n            <div className=\"container mx-auto px-4 max-w-6xl grid grid-cols-1 lg:grid-cols-3 gap-8\">\n                {/* Left Column: Order Tracking & Items */}\n                <div className=\"lg:col-span-2 space-y-6\">\n                    {/* Items Section */}\n                    <motion.div\n                        initial={{ opacity: 0, y: 20 }}\n                        animate={{ opacity: 1, y: 0 }}\n                        className=\"bg-white rounded-3xl border border-slate-200 shadow-xs overflow-hidden pb-4\"\n                    >\n                        <div className=\"px-4 py-4 sm:p-6 flex items-center justify-between border-b border-slate-100\">\n                            <div className=\"flex items-center gap-3\">\n                                <div className=\"w-10 h-10 bg-hsecondary/6 rounded-full flex items-center justify-center shrink-0\">\n                                    <Package className=\"w-5 h-5 text-hsecondary/60\" />\n                                </div>\n                                <h2 className=\"text-hsecondary text-lg sm:text-xl font-medium\">Order Items</h2>\n                            </div>\n                            <span className=\"text-sm text-hsecondary/40\">\n                                {totalItemCount} {totalItemCount === 1 ? 'Product' : 'Products'}\n                            </span>\n                        </div>\n                        \n                        <div className=\"divide-y divide-slate-100\">\n                            {items.map((item, idx) => {\n                                const variantImage = item.productVariantData?.media?.[0]?.file;\n                                const isVariantImagePlaceholder = !variantImage || variantImage === '/placeholder.png';\n                                const productId = (item.productVariantData as any).productId;\n                                const itemImage = isVariantImagePlaceholder\n                                    ? (productImages[productId] || PLACEHOLDER_IMAGE_SRC)\n                                    : variantImage;\n                                return (\n                                <div key={item._id || idx} className=\"px-4 py-4 sm:px-6 sm:py-5 flex gap-4 group hover:bg-slate-50/50 transition-colors\">\n                                    <div className=\"relative w-14 h-14 sm:w-20 sm:h-20 bg-slate-100 rounded-2xl overflow-hidden shrink-0 border border-slate-100 group-hover:scale-105 transition-transform duration-300\">\n                                        <Image\n                                            src={itemImage}\n                                            alt={item.productVariantData?.name || 'Item'}\n                                            fill\n                                            className=\"object-cover\"\n                                            sizes=\"80px\"\n                                        />\n                                    </div>\n                                    <div className=\"flex-1 flex items-center justify-between min-w-0 gap-4\">\n                                        <div className=\"min-w-0\">\n                                            {(() => {\n                                                const productName = item.productVariantData?.productName || productNames[productId];\n                                                const variantName = item.productVariantData?.name;\n                                                const displayName = productName || variantName;\n                                                const showVariant = variantName && productName && variantName !== productName;\n                                                return (\n                                                    <>\n                                                        <h3 className=\"font-medium text-hsecondary text-base leading-snug line-clamp-2\">\n                                                            {displayName}\n                                                        </h3>\n                                                        {showVariant && (\n                                                            <p className=\"text-sm text-hsecondary/50 mb-1\">{variantName}</p>\n                                                        )}\n                                                    </>\n                                                );\n                                            })()}\n                                            <p className=\"text-sm text-hsecondary/40\">Qty: {item.quantity} &bull; {formatPrice(item.productVariantData?.finalPrice || 0)} each</p>\n                                        </div>\n                                        <span className=\"font-semibold text-hsecondary text-base shrink-0\">{formatPrice((item.productVariantData?.finalPrice || 0) * item.quantity)}</span>\n                                    </div>\n                                </div>\n                                );\n                            })}\n                            {customProducts.map((cp: any, idx: number) => {\n                                const name = typeof cp === 'string' ? cp : (cp.name || 'Custom Item');\n                                const qty = typeof cp === 'object' ? (cp.quantity || 1) : 1;\n                                const price = typeof cp === 'object' ? (cp.price || 0) : 0;\n                                return (\n                                <div key={`custom-${idx}`} className=\"px-4 py-4 sm:px-6 sm:py-5 flex gap-4 group hover:bg-slate-50/50 transition-colors\">\n                                    <div className=\"relative w-14 h-14 sm:w-20 sm:h-20 bg-slate-100 rounded-2xl overflow-hidden shrink-0 border border-slate-100 group-hover:scale-105 transition-transform duration-300\">\n                                        <Image\n                                            src={PLACEHOLDER_IMAGE_SRC}\n                                            alt={name}\n                                            fill\n                                            className=\"object-cover\"\n                                            sizes=\"80px\"\n                                        />\n                                    </div>\n                                    <div className=\"flex-1 flex items-center justify-between min-w-0 gap-4\">\n                                        <div className=\"min-w-0\">\n                                            <h3 className=\"font-medium text-hsecondary text-base leading-snug line-clamp-2\">{name}</h3>\n                                            <p className=\"text-sm text-hsecondary/40\">Qty: {qty} &bull; {formatPrice(price)} each</p>\n                                        </div>\n                                        <span className=\"font-semibold text-hsecondary text-base shrink-0\">{formatPrice(price * qty)}</span>\n                                    </div>\n                                </div>\n                                );\n                            })}\n                        </div>\n                    </motion.div>\n\n                    {/* Order Meta / Info */}\n                    <div className=\"grid grid-cols-1 md:grid-cols-2 gap-6\">\n                        <div className=\"bg-white p-4 sm:p-6 rounded-3xl border border-slate-200 shadow-xs\">\n                            <div className=\"flex items-center gap-3 pb-4 border-b border-slate-100 mb-4\">\n                                <div className=\"w-10 h-10 bg-hsecondary/6 rounded-full flex items-center justify-center shrink-0\">\n                                    <MapPin className=\"w-5 h-5 text-hsecondary/60\" />\n                                </div>\n                                <h3 className=\"text-hsecondary text-lg sm:text-xl font-medium\">{isDelivery ? 'Shipping Address' : 'Pickup Location'}</h3>\n                            </div>\n                            {activeAddress ? (\n                                <div className=\"text-sm text-hsecondary/60 leading-relaxed\">\n                                    <p className=\"font-medium text-hsecondary text-base mb-1\">\n                                        {activeAddress.name}\n                                    </p>\n                                    <p>{activeAddress.street1}</p>\n                                    {activeAddress.street2 && <p>{activeAddress.street2}</p>}\n                                    <p>{activeAddress.city}, {activeAddress.state} {activeAddress.zip}</p>\n                                    <p>{activeAddress.country}</p>\n                                    {activeAddress.phone && (\n                                        <div className=\"mt-2 flex items-center gap-2 text-hsecondary/60 font-medium border-t border-slate-100 py-4 cursor-pointer\" onClick={() => window.open(`tel:${activeAddress.phone}`)}>\n                                            <span className=\"text-text-hsecondary/60 font-normal\">Phone:</span> {activeAddress.phone}\n                                        </div>\n                                    )}\n                                </div>\n                            ) : (\n                                <p className=\"text-sm text-hsecondary/60 italic\">No address recorded</p>\n                            )}\n                        </div>\n                        <div className=\"bg-white p-4 sm:p-6 rounded-3xl border border-slate-200 shadow-xs\">\n                            <div className=\"flex items-center gap-3 pb-4 border-b border-slate-100 mb-4\">\n                                <div className=\"w-10 h-10 bg-hsecondary/6 rounded-full flex items-center justify-center shrink-0\">\n                                    <CreditCard className=\"w-5 h-5 text-hsecondary/60\" />\n                                </div>\n                                <h3 className=\"text-hsecondary text-lg sm:text-xl font-medium\">Payment Method</h3>\n                            </div>\n                            <div className=\"text-sm text-hsecondary leading-relaxed\">\n                                <p className=\"font-medium text-hsecondary text-base mb-1\">\n                                    {order.payment?.paymentMethod ? order.payment.paymentMethod.replace('_', ' ').toUpperCase() : 'N/A'}\n                                </p>\n                                <p className=\"flex items-center gap-2 mt-2\">\n                                    <span className=\"text-[11px] uppercase tracking-widest font-bold text-hsecondary/40\">Status:</span>\n                                    <span\n                                        className=\"text-xs px-2.5 py-1 rounded-full font-medium\"\n                                        style={order.payment?.paymentStatus === 'Paid'\n                                            ? { backgroundColor: '#10B98114', color: '#10B981', border: '1px solid #10B9811A' }\n                                            : { backgroundColor: '#FEF3C780', color: '#92400E', border: '1px solid #92400E1A' }\n                                        }\n                                    >\n                                        {order.payment?.paymentStatus || 'Processing'}\n                                    </span>\n                                </p>\n                                {order.payment?.paymentMethod === 'Card' && (\n                                    <p className=\"mt-2 text-sm text-hsecondary/40 tracking-widest\">\n                                            •••• •••• •••• ••••\n                                    </p>\n                                )}\n                                {isAuthenticated && isUnpaidCard && (\n                                    <button\n                                        onClick={() => window.open(order.payment?.hostedInvoiceUrl, '_blank')}\n                                        className=\"mt-4 w-full flex items-center justify-center gap-2 px-4 py-3 bg-hsecondary text-white rounded-full font-semibold text-sm hover:bg-hsecondary/90 transition-colors\"\n                                    >\n                                        <CreditCard className=\"w-4 h-4\" />\n                                        Pay Now\n                                    </button>\n                                )}\n                            </div>\n                        </div>\n                    </div>\n\n                    {/* Shipment Info Section */}\n                    {isDelivery && shipment && (\n                        <div className=\"bg-white p-4 sm:p-6 rounded-3xl border border-slate-200 shadow-xs md:col-span-2\">\n                            <div className=\"flex flex-col gap-3 pb-4 border-b border-slate-100 mb-4 sm:flex-row sm:items-center sm:justify-between\">\n                                <div className=\"flex min-w-0 items-center gap-3\">\n                                    <div className=\"w-10 h-10 bg-hsecondary/6 rounded-full flex items-center justify-center shrink-0\">\n                                        <Truck className=\"w-5 h-5 text-hsecondary/60\" />\n                                    </div>\n                                    <h3 className=\"text-hsecondary text-lg sm:text-xl font-medium leading-tight\">Shipment Details</h3>\n                                </div>\n                                {shipment.shipmentStatus?.status && (\n                                    <span\n                                        className=\"w-fit max-w-full text-[11px] sm:text-xs px-2.5 py-1 rounded-full font-medium leading-tight break-words sm:shrink-0\"\n                                        style={{ backgroundColor: '#FEF3C780', color: '#92400E', border: '1px solid #92400E1A' }}\n                                    >\n                                        {shipment.shipmentStatus.status}\n                                    </span>\n                                )}\n                            </div>\n                            <div className=\"grid grid-cols-1 md:grid-cols-3 gap-4 sm:gap-6\">\n                                {shipment.rate && (\n                                    <div>\n                                        <p className=\"text-[10px] uppercase tracking-widest font-medium text-hsecondary mb-2\">Carrier & Service</p>\n                                        <div className=\"flex items-center gap-3\">\n                                            {shipment.rate.providerImage75 && (\n                                                <div className=\"w-10 h-10 rounded-xl bg-slate-100 overflow-hidden border border-slate-100 flex items-center justify-center\">\n                                                    <Image\n                                                        src={shipment.rate.providerImage75}\n                                                        alt={shipment.rate.provider || 'Carrier'}\n                                                        width={40}\n                                                        height={40}\n                                                        className=\"object-contain p-1 w-full h-full\"\n                                                    />\n                                                </div>\n                                            )}\n                                            <div>\n                                                <p className=\"text-sm font-medium text-hsecondary\">{shipment.rate.provider}</p>\n                                                <p className=\"text-xs text-hsecondary/40\">{shipment.rate.servicelevel?.name}</p>\n                                            </div>\n                                        </div>\n                                    </div>\n                                )}\n                                {shipment.shipmentStatus?.trackingNumber ? (\n                                    <div>\n                                        <p className=\"text-[10px] uppercase tracking-widest font-medium text-hsecondary mb-2\">Tracking Number</p>\n                                        <p className=\"text-sm font-bold text-hsecondary mb-1 font-mono\">{shipment.shipmentStatus.trackingNumber}</p>\n                                        {shipment.shipmentStatus?.trackingUrlProvider && (\n                                            <a\n                                                href={shipment.shipmentStatus.trackingUrlProvider}\n                                                target=\"_blank\"\n                                                rel=\"noopener noreferrer\"\n                                                className=\"text-xs text-hprimary hover:underline flex items-center gap-1 font-medium\"\n                                            >\n                                                Track Shipment <ExternalLink className=\"w-3 h-3\" />\n                                            </a>\n                                        )}\n                                    </div>\n                                ) : (\n                                    shipment.rate?.durationTerms && (\n                                        <div>\n                                            <p className=\"text-[10px] uppercase tracking-widest font-medium text-hsecondary mb-2\">Delivery Estimate</p>\n                                            <p className=\"text-sm text-hsecondary\">{shipment.rate.durationTerms}</p>\n                                        </div>\n                                    )\n                                )}\n                                {shipment.totalWeight !== undefined && (\n                                    <div>\n                                        <p className=\"text-[10px] uppercase tracking-widest font-medium text-hsecondary mb-2\">Package Weight</p>\n                                        <p className=\"text-sm text-hsecondary\">{shipment.totalWeight} oz</p>\n                                    </div>\n                                )}\n                            </div>\n                        </div>\n                    )}\n                </div>\n\n                {/* Right Column: Order Summary */}\n                <div className=\"space-y-6\">\n                    <motion.div\n                        initial={{ opacity: 0, x: 20 }}\n                        animate={{ opacity: 1, x: 0 }}\n                        className=\"bg-hsecondary p-5 sm:p-8 rounded-3xl border border-slate-200 shadow-xs lg:sticky lg:top-24\"\n                    >\n                        <h2 className=\"text-xl font-medium text-white mb-6\">\n                            Order Summary\n                        </h2>\n\n                        <div className=\"space-y-4 mb-6\">\n                            <div className=\"flex justify-between items-center\">\n                                <span className=\"text-sm text-white/60\">Subtotal</span>\n                                <span className=\"font-medium text-white\">{formatPrice(order.subTotal || 0)}</span>\n                            </div>\n                            <div className=\"flex justify-between items-center\">\n                                <span className=\"text-sm text-white/60\">Shipping</span>\n                                <span className=\"font-medium text-white\">{formatPrice(order.shippingCost || 0)}</span>\n                            </div>\n                            <div className=\"flex justify-between items-center\">\n                                <span className=\"text-sm text-white/60\">Tax</span>\n                                <span className=\"font-medium text-white\">{formatPrice(order.tax || 0)}</span>\n                            </div>\n                            {order.discountedAmount !== undefined && order.discountedAmount > 0 && (\n                                <div className=\"flex justify-between items-center\">\n                                    <span className=\"text-sm text-white/60\">Discount</span>\n                                    <span className=\"font-medium text-white\">-{formatPrice(order.discountedAmount)}</span>\n                                </div>\n                            )}\n                        </div>\n\n                        <div className=\"pt-5 border-t border-white/20\">\n                            <div className=\"flex justify-between items-center\">\n                                <p className=\"text-xs uppercase text-white/60 font-medium\">Grand Total</p>\n                                <div className=\"flex items-center gap-2\">\n                                    <p className=\"text-2xl font-medium text-white\">{formatPrice(order.grandTotal || 0)}</p>\n                                    <span className=\"px-3 py-1 bg-white/10 rounded-full text-[8px] font-bold uppercase tracking-wider text-white/60\">\n                                        USD\n                                    </span>\n                                </div>\n                            </div>\n                        </div>\n                    </motion.div>\n                </div>\n            </div>\n        </div>\n    );\n}\n","'use client';\n\nimport React, { useState, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { Search, Package, CheckCircle2, Clock, Truck, MapPin, AlertCircle, ChevronRight, ArrowRight } from 'lucide-react';\nimport { Input } from '@/components/ui/Input';\nimport { OrdersApi } from '@/lib/Apis/apis/orders-api';\nimport { PopulatedOrder } from '@/lib/Apis/models';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { formatPrice } from '@/lib/utils/format';\n\n// ─── Status badge ─────────────────────────────────────────────────────────────\n\nconst STATUS_CONFIG: Record<string, { color: string; bg: string; icon: React.ReactNode }> = {\n  Pending: { color: 'text-amber-700', bg: 'bg-amber-50 border-amber-200', icon: <Clock className=\"w-4 h-4\" /> },\n  'Picking & Packing': { color: 'text-blue-700', bg: 'bg-blue-50 border-blue-200', icon: <Package className=\"w-4 h-4\" /> },\n  'Ready for Pickup': { color: 'text-purple-700', bg: 'bg-purple-50 border-purple-200', icon: <MapPin className=\"w-4 h-4\" /> },\n  'Picked Up': { color: 'text-green-700', bg: 'bg-green-50 border-green-200', icon: <CheckCircle2 className=\"w-4 h-4\" /> },\n  'Out for Delivery': { color: 'text-indigo-700', bg: 'bg-indigo-50 border-indigo-200', icon: <Truck className=\"w-4 h-4\" /> },\n  Delivered: { color: 'text-green-700', bg: 'bg-green-50 border-green-200', icon: <CheckCircle2 className=\"w-4 h-4\" /> },\n  'On Hold': { color: 'text-orange-700', bg: 'bg-orange-50 border-orange-200', icon: <AlertCircle className=\"w-4 h-4\" /> },\n  Cancelled: { color: 'text-red-700', bg: 'bg-red-50 border-red-200', icon: <AlertCircle className=\"w-4 h-4\" /> },\n};\n\nfunction StatusBadge({ status }: { status: string }) {\n  const cfg = STATUS_CONFIG[status] ?? { color: 'text-gray-700', bg: 'bg-gray-50 border-gray-200', icon: <Package className=\"w-4 h-4\" /> };\n  return (\n    <span className={`inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full border text-sm font-semibold ${cfg.bg} ${cfg.color}`}>\n      {cfg.icon}\n      {status}\n    </span>\n  );\n}\n\n// ─── Timeline item ─────────────────────────────────────────────────────────────\n\ninterface TimelineEntry {\n  title: string;\n  description?: string;\n  date?: string;\n  type?: string;\n}\n\nfunction TimelineItem({ entry, isLast }: { entry: TimelineEntry; isLast: boolean }) {\n  const isDelivered = entry.type === 'delivered' || entry.title?.toLowerCase().includes('delivered');\n  return (\n    <div className=\"flex gap-4\">\n      <div className=\"flex flex-col items-center\">\n        <div className={`w-9 h-9 rounded-full flex items-center justify-center shrink-0 border-2 ${isDelivered ? 'bg-green-500 border-green-500 text-white' : 'bg-white border-gray-300 text-gray-500'}`}>\n          <CheckCircle2 className=\"w-4 h-4\" />\n        </div>\n        {!isLast && <div className=\"w-0.5 flex-1 bg-gray-200 mt-1 mb-1 min-h-[24px]\" />}\n      </div>\n      <div className=\"pb-5 flex-1\">\n        <p className=\"font-semibold text-gray-900 text-sm\">{entry.title}</p>\n        {entry.description && <p className=\"text-sm text-gray-500 mt-0.5\">{entry.description}</p>}\n        {entry.date && (\n          <p className=\"text-xs text-gray-400 mt-1\">{new Date(entry.date).toLocaleString()}</p>\n        )}\n      </div>\n    </div>\n  );\n}\n\n// ─── Main screen ──────────────────────────────────────────────────────────────\n\nexport interface TrackOrderScreenProps {\n  /** Pre-fill the order ID field (e.g. from the confirmation page). */\n  initialOrderId?: string;\n  /** Pre-fill the email field. */\n  initialEmail?: string;\n}\n\nexport function TrackOrderScreen({ initialOrderId = '', initialEmail = '' }: TrackOrderScreenProps) {\n  const [orderId, setOrderId] = useState(initialOrderId);\n  const [email, setEmail] = useState(initialEmail);\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<string | null>(null);\n  const [result, setResult] = useState<PopulatedOrder | null>(null);\n  const resultRef = useRef<HTMLDivElement>(null);\n\n  const handleTrack = async (e?: React.FormEvent) => {\n    e?.preventDefault();\n    const trimmedId = orderId.trim();\n    const trimmedEmail = email.trim();\n    if (!trimmedId || !trimmedEmail) {\n      setError('Please enter both your Order ID and email address.');\n      return;\n    }\n    setIsLoading(true);\n    setError(null);\n    setResult(null);\n    try {\n      const api = new OrdersApi(AXIOS_CONFIG);\n      const res = await api.trackOrder(trimmedId, trimmedEmail);\n      setResult(res.data);\n      setTimeout(() => resultRef.current?.scrollIntoView({ behavior: 'smooth', block: 'start' }), 100);\n    } catch (err: any) {\n      const msg = err?.response?.data?.message || '';\n      if (err?.response?.status === 404 || msg.toLowerCase().includes('not found')) {\n        setError('No order found for that combination. Please check your Order ID and email.');\n      } else {\n        setError(msg || 'Something went wrong. Please try again.');\n      }\n    } finally {\n      setIsLoading(false);\n    }\n  };\n\n  const timeline: TimelineEntry[] = Array.isArray(result?.orderTimeLine)\n    ? result!.orderTimeLine.map((entry: any) =>\n        typeof entry === 'string' ? { title: entry } : entry\n      )\n    : [];\n\n  const items: any[] = Array.isArray(result?.items)\n    ? result!.items.map((item: any) =>\n        typeof item === 'string' ? { name: item } : item\n      )\n    : [];\n\n  return (\n    <div className=\"min-h-screen bg-white pb-16\">\n      <div className=\"max-w-2xl mx-auto px-4 pt-12\">\n        {/* Header */}\n        <div className=\"mb-10\">\n          <p className=\"text-xs font-semibold tracking-[0.2em] text-hprimary/50 uppercase mb-2\">Order Tracking</p>\n          <h1 className=\"text-3xl font-bold text-[#2B4B7C] mb-2\">Track Your Order</h1>\n          <p className=\"text-gray-500 text-sm\">Enter your order ID and email to see real-time status updates.</p>\n        </div>\n\n        {/* Search form */}\n        <form onSubmit={handleTrack} className=\"bg-white border-2 border-gray-100 rounded-[24px] p-6 sm:p-8 space-y-5 mb-8\">\n          <div>\n            <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">\n              Order ID <span className=\"text-red-400\">*</span>\n            </label>\n            <Input\n              placeholder=\"e.g. 6847a3f2c1...\"\n              value={orderId}\n              onChange={(e) => setOrderId(e.target.value)}\n              leftElement={<Package className=\"h-4 w-4 text-gray-400\" />}\n            />\n          </div>\n          <div>\n            <label className=\"block text-sm font-medium text-gray-700 mb-1.5\">\n              Email Address <span className=\"text-red-400\">*</span>\n            </label>\n            <Input\n              type=\"email\"\n              placeholder=\"the email you used at checkout\"\n              value={email}\n              onChange={(e) => setEmail(e.target.value)}\n              leftElement={<Search className=\"h-4 w-4 text-gray-400\" />}\n            />\n          </div>\n\n          {error && (\n            <div className=\"flex items-start gap-3 px-4 py-3 bg-red-50 border border-red-200 rounded-xl text-sm text-red-700\">\n              <AlertCircle className=\"w-4 h-4 shrink-0 mt-0.5\" />\n              {error}\n            </div>\n          )}\n\n          <button\n            type=\"submit\"\n            disabled={isLoading}\n            className=\"w-full flex items-center justify-center gap-2 py-3.5 px-4 rounded-xl bg-hprimary text-white text-sm font-semibold transition-opacity disabled:opacity-60\"\n          >\n            {isLoading ? 'Searching…' : <>Track Order <ArrowRight className=\"h-4 w-4\" /></>}\n          </button>\n        </form>\n\n        {/* Results */}\n        <AnimatePresence>\n          {result && (\n            <motion.div\n              ref={resultRef}\n              key=\"track-result\"\n              initial={{ opacity: 0, y: 20 }}\n              animate={{ opacity: 1, y: 0 }}\n              exit={{ opacity: 0, y: 20 }}\n              className=\"space-y-6\"\n            >\n              {/* Status card */}\n              <div className=\"bg-white border-2 border-gray-100 rounded-[24px] p-6 sm:p-8\">\n                <div className=\"flex flex-wrap items-start justify-between gap-4 mb-4\">\n                  <div>\n                    <p className=\"text-xs font-semibold text-gray-400 uppercase tracking-wide mb-1\">Order ID</p>\n                    <p className=\"font-mono text-sm text-gray-700 break-all\">{(result as any).orderId || result._id || result.id}</p>\n                  </div>\n                  <StatusBadge status={result.orderStatus ?? 'Pending'} />\n                </div>\n                <div className=\"grid grid-cols-2 gap-4 mt-4 pt-4 border-t border-gray-100 text-sm\">\n                  <div>\n                    <p className=\"text-xs font-semibold text-gray-400 uppercase tracking-wide mb-0.5\">Type</p>\n                    <p className=\"font-medium text-gray-700\">{result.orderType}</p>\n                  </div>\n                  <div>\n                    <p className=\"text-xs font-semibold text-gray-400 uppercase tracking-wide mb-0.5\">Date</p>\n                    <p className=\"font-medium text-gray-700\">{result.createdAt ? new Date(result.createdAt).toLocaleDateString() : '—'}</p>\n                  </div>\n                </div>\n              </div>\n\n              {/* Timeline */}\n              {timeline.length > 0 && (\n                <div className=\"bg-white border-2 border-gray-100 rounded-[24px] p-6 sm:p-8\">\n                  <h2 className=\"font-semibold text-[#2B4B7C] text-lg mb-6\">Order Timeline</h2>\n                  <div>\n                    {timeline.map((entry, i) => (\n                      <TimelineItem key={i} entry={entry} isLast={i === timeline.length - 1} />\n                    ))}\n                  </div>\n                </div>\n              )}\n\n              {/* Items */}\n              {items.length > 0 && (\n                <div className=\"bg-white border-2 border-gray-100 rounded-[24px] p-6 sm:p-8\">\n                  <h2 className=\"font-semibold text-[#2B4B7C] text-lg mb-5\">Items Ordered</h2>\n                  <div className=\"space-y-4\">\n                    {items.map((item, i) => (\n                      <div key={i} className=\"flex items-center gap-4\">\n                        {item.image && (\n                          <img\n                            src={item.image}\n                            alt={item.name}\n                            className=\"w-14 h-14 rounded-xl object-cover bg-gray-100 shrink-0\"\n                          />\n                        )}\n                        <div className=\"flex-1 min-w-0\">\n                          <p className=\"font-medium text-gray-900 text-sm truncate\">{item.name}</p>\n                          {item.variantName && (\n                            <p className=\"text-xs text-gray-500 mt-0.5\">{item.variantName}</p>\n                          )}\n                          {item.quantity && (\n                            <p className=\"text-xs text-gray-400 mt-0.5\">Qty: {item.quantity}</p>\n                          )}\n                        </div>\n                        {item.price != null && (\n                          <p className=\"text-sm font-semibold text-gray-900 shrink-0\">{formatPrice(item.price)}</p>\n                        )}\n                      </div>\n                    ))}\n                  </div>\n                </div>\n              )}\n\n              {/* Price breakdown */}\n              <div className=\"bg-white border-2 border-gray-100 rounded-[24px] p-6 sm:p-8\">\n                <h2 className=\"font-semibold text-[#2B4B7C] text-lg mb-5\">Price Summary</h2>\n                <div className=\"space-y-3 text-sm\">\n                  <div className=\"flex justify-between\">\n                    <span className=\"text-gray-500\">Subtotal</span>\n                    <span className=\"font-medium text-gray-900\">{formatPrice(result.subTotal ?? 0)}</span>\n                  </div>\n                  {(result.shippingCost ?? 0) > 0 && (\n                    <div className=\"flex justify-between\">\n                      <span className=\"text-gray-500\">Shipping</span>\n                      <span className=\"font-medium text-gray-900\">{formatPrice(result.shippingCost ?? 0)}</span>\n                    </div>\n                  )}\n                  {(result.tax ?? 0) > 0 && (\n                    <div className=\"flex justify-between\">\n                      <span className=\"text-gray-500\">Tax</span>\n                      <span className=\"font-medium text-gray-900\">{formatPrice(result.tax ?? 0)}</span>\n                    </div>\n                  )}\n                  {(result.discountedAmount ?? 0) > 0 && (\n                    <div className=\"flex justify-between\">\n                      <span className=\"text-gray-500\">Discount</span>\n                      <span className=\"font-medium text-green-600\">− {formatPrice(result.discountedAmount ?? 0)}</span>\n                    </div>\n                  )}\n                  <div className=\"flex justify-between pt-3 border-t border-gray-100\">\n                    <span className=\"font-semibold text-gray-900\">Total</span>\n                    <span className=\"font-bold text-[#2B4B7C] text-base\">{formatPrice(result.grandTotal ?? 0)}</span>\n                  </div>\n                </div>\n              </div>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n    </div>\n  );\n}\n","'use client';\n\nimport React from 'react';\nimport { motion } from 'framer-motion';\nimport {\n    Package,\n    CreditCard,\n    Lock,\n    ShoppingCart,\n    TrendingDown,\n    Bell as BellIcon,\n    Check,\n    Trash2\n} from 'lucide-react';\nimport { NotificationData, NotificationType } from '@/providers/NotificationCenterProvider';\nimport { useRouter } from 'next/navigation';\nimport { useBasePath } from '@/providers/BasePathProvider';\n\ninterface NotificationCardProps {\n    notification: NotificationData;\n    onMarkAsRead: (id: string) => void;\n    onDelete: (id: string) => void;\n    onClose?: () => void;\n}\n\n/* ---------------------------------- */\n/* Helpers                            */\n/* ---------------------------------- */\n\nconst getNotificationIcon = (type: NotificationType) => {\n    const className = 'w-5 h-5';\n\n    switch (type) {\n        case 'ORDER_CONFIRMATION':\n        case 'ORDER_SHIPPED':\n        case 'ORDER_DELIVERED':\n            return <Package className={className} />;\n        case 'PAYMENT_FAILED':\n        case 'REFUND_PROCESSED':\n            return <CreditCard className={className} />;\n        case 'PASSWORD_RESET':\n        case 'NEW_DEVICE_LOGIN':\n        case 'TWO_FA_CODE':\n            return <Lock className={className} />;\n        case 'ABANDONED_CART_REMINDER':\n            return <ShoppingCart className={className} />;\n        case 'PRICE_DROP_ALERT':\n            return <TrendingDown className={className} />;\n        case 'BACK_IN_STOCK':\n        default:\n            return <BellIcon className={className} />;\n    }\n};\n\nconst getNotificationColor = (type: NotificationType) => {\n    switch (type) {\n        case 'ORDER_CONFIRMATION':\n        case 'ORDER_DELIVERED':\n        case 'REFUND_PROCESSED':\n            return 'bg-green-100 text-green-600';\n        case 'ORDER_SHIPPED':\n            return 'bg-blue-100 text-blue-600';\n        case 'PAYMENT_FAILED':\n            return 'bg-red-100 text-red-600';\n        case 'PASSWORD_RESET':\n        case 'NEW_DEVICE_LOGIN':\n        case 'TWO_FA_CODE':\n            return 'bg-purple-100 text-purple-600';\n        case 'ABANDONED_CART_REMINDER':\n        case 'PRICE_DROP_ALERT':\n        case 'BACK_IN_STOCK':\n            return 'bg-orange-100 text-orange-600';\n        default:\n            return 'bg-slate-100 text-slate-700';\n    }\n};\n\nconst formatRelativeTime = (dateString: string): string => {\n    const date = new Date(dateString);\n    const diff = Date.now() - date.getTime();\n    const mins = Math.floor(diff / 60000);\n    const hours = Math.floor(diff / 3600000);\n    const days = Math.floor(diff / 86400000);\n\n    if (mins < 1) return 'Just now';\n    if (mins < 60) return `${mins} min ago`;\n    if (hours < 24) return `${hours} hour${hours > 1 ? 's' : ''} ago`;\n    if (days < 7) return `${days} day${days > 1 ? 's' : ''} ago`;\n\n    return date.toLocaleDateString();\n};\n\n/* ---------------------------------- */\n/* Component                          */\n/* ---------------------------------- */\n\nexport function NotificationCard({\n    notification,\n    onMarkAsRead,\n    onDelete,\n    onClose\n}: NotificationCardProps) {\n    const router = useRouter();\n    const { buildPath } = useBasePath();\n\n    const handleClick = () => {\n        // Mark as read if needed\n        if (!notification.isRead) {\n            onMarkAsRead(notification._id);\n        }\n\n        // Close the dropdown immediately to provide instant feedback\n        if (onClose) {\n            onClose();\n        }\n\n        // Navigate if there's a link\n        if (notification.data?.orderId) {\n            router.push(buildPath(`/account/orders/${notification.data.orderId}`));\n        } else if (notification.data?.productId) {\n            router.push(buildPath(`/products/${notification.data.productId}`));\n        }\n    };\n\n    const handleDelete = (e: React.MouseEvent) => {\n        e.stopPropagation();\n        onDelete(notification._id);\n    };\n\n    return (\n        <motion.div\n            layout\n            initial={{ opacity: 0, y: 10 }}\n            animate={{ opacity: 1, y: 0 }}\n            exit={{ opacity: 0, height: 0, marginBottom: 0 }}\n            className={`group relative flex gap-3 py-6 px-2 rounded-lg hover:bg-gray-50 transition-colors cursor-pointer ${notification.isRead ? '' : 'bg-gray-100/40'}`}\n            onClick={handleClick}\n        >\n            {/* Unread Indicator Dot */}\n            {/* {!notification.isRead && (\n                <div className=\"flex-shrink-0 w-1.5 h-1.5 rounded-full bg-gray-900 mt-2.5\" />\n            )}\n            {notification.isRead && (\n                <div className=\"flex-shrink-0 w-2 h-2\" />\n            )} */}\n\n            {/* Icon Circle */}\n            <div\n                className={`flex-shrink-0 w-12 h-12 rounded-xl flex items-center justify-center ${getNotificationColor(notification.type)}`}\n            >\n                {getNotificationIcon(notification.type)}\n            </div>\n\n            {/* Right Section: Content + Timestamp */}\n            <div className=\"flex-1 flex flex-col min-w-0\">\n                {/* Top Row: Title + Timestamp */}\n                <div className=\"flex items-start justify-between gap-2\">\n                    <h4 className=\"text-sm font-semibold text-gray-800 leading-tight\">\n                        {notification.title}\n                    </h4>\n                    <span className=\"text-xs text-gray-500 font-medium whitespace-nowrap flex-shrink-0\">\n                        {formatRelativeTime(notification.createdAt)}\n                    </span>\n                </div>\n                {/* Bottom Row: Description */}\n                <p className=\"text-sm text-gray-500 line-clamp-2 leading-snug mt-0.5\">\n                    {notification.body}\n                </p>\n            </div>\n\n            {/* Action Buttons - Overlaid on hover */}\n            <div className=\"absolute top-2 right-2 flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity\">\n                {!notification.isRead && (\n                    <button\n                        onClick={(e) => {\n                            e.stopPropagation();\n                            onMarkAsRead(notification._id);\n                        }}\n                        className=\"p-2 rounded-lg hover:bg-gray-200 transition text-gray-400 hover:text-gray-700 bg-white\"\n                        aria-label=\"Mark as read\"\n                    >\n                        <Check className=\"w-4 h-4\" />\n                    </button>\n                )}\n                <button\n                    onClick={handleDelete}\n                    className=\"p-2 rounded-lg hover:bg-red-100 transition text-gray-400 hover:text-red-600 bg-white\"\n                    aria-label=\"Delete notification\"\n                >\n                    <Trash2 className=\"w-4 h-4\" />\n                </button>\n            </div>\n        </motion.div>\n    );\n}\n","'use client';\n\nimport React, {\n    useEffect,\n    useRef,\n    useCallback,\n    useState,\n} from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { X, BellOff, ChevronRight, CheckCheck } from 'lucide-react';\nimport { useNotificationCenter } from '@/providers/NotificationCenterProvider';\nimport { NotificationCard } from './NotificationCard';\nimport { useRouter } from 'next/navigation';\nimport { useBasePath } from '@/providers/BasePathProvider';\n\nconst modalVariants = {\n    hidden: { opacity: 0, y: -8, scale: 0.96 },\n    visible: { opacity: 1, y: 0, scale: 1 },\n    exit: { opacity: 0, y: -8, scale: 0.96 },\n};\n\nexport function NotificationModal() {\n    const {\n        isDrawerOpen,\n        closeDrawer,\n        notifications,\n        unreadCount,\n        isLoading,\n        markAsRead,\n        markAllAsRead,\n        deleteNotification,\n        loadMore,\n        hasMore,\n    } = useNotificationCenter();\n\n    const router = useRouter();\n    const { buildPath } = useBasePath();\n\n    const [filterTab, setFilterTab] = useState<'all' | 'unread'>('all');\n\n    const scrollRef = useRef<HTMLDivElement>(null);\n    const modalRef = useRef<HTMLDivElement>(null);\n    const lastScrollTrigger = useRef(0);\n\n    /* ---------------------------- Handlers ---------------------------- */\n\n    const handleScroll = useCallback(() => {\n        if (!scrollRef.current || isLoading || !hasMore) return;\n\n        const now = Date.now();\n        if (now - lastScrollTrigger.current < 300) return;\n\n        const { scrollTop, scrollHeight, clientHeight } = scrollRef.current;\n        if ((scrollTop + clientHeight) / scrollHeight > 0.8) {\n            lastScrollTrigger.current = now;\n            loadMore();\n        }\n    }, [isLoading, hasMore, loadMore]);\n\n    const handleViewAll = useCallback(() => {\n        closeDrawer();\n        router.push(buildPath('/account/notifications'));\n    }, [closeDrawer, router, buildPath]);\n\n    const filteredNotifications = filterTab === 'unread'\n        ? notifications.filter(n => !n.isRead)\n        : notifications;\n\n\n    useEffect(() => {\n        if (!isDrawerOpen) return;\n\n        modalRef.current?.focus();\n\n        const onKeyDown = (e: KeyboardEvent) => {\n            if (e.key === 'Escape') closeDrawer();\n        };\n\n        document.addEventListener('keydown', onKeyDown);\n        return () => document.removeEventListener('keydown', onKeyDown);\n    }, [isDrawerOpen, closeDrawer]);\n\n    useEffect(() => {\n        if (!isDrawerOpen) return;\n\n        const handleClickOutside = (e: MouseEvent) => {\n            const bellButton = document.getElementById('notification-bell-button');\n            if (\n                modalRef.current &&\n                !modalRef.current.contains(e.target as Node) &&\n                !bellButton?.contains(e.target as Node)\n            ) {\n                closeDrawer();\n            }\n        };\n\n        document.addEventListener('mousedown', handleClickOutside);\n        return () => document.removeEventListener('mousedown', handleClickOutside);\n    }, [isDrawerOpen, closeDrawer]);\n\n    return (\n        <AnimatePresence>\n            {isDrawerOpen && (\n                <>\n                    {/* Backdrop */}\n                    {/* <motion.div\n                        initial={{ opacity: 0 }}\n                        animate={{ opacity: 0.4 }}\n                        exit={{ opacity: 0 }}\n                        className=\"fixed inset-0 bg-black z-40\"\n                    /> */}\n\n                    <motion.div\n                        ref={modalRef}\n                        role=\"dialog\"\n                        aria-modal=\"true\"\n                        aria-labelledby=\"notification-title\"\n                        tabIndex={-1}\n                        variants={modalVariants}\n                        initial=\"hidden\"\n                        animate=\"visible\"\n                        exit=\"exit\"\n                        transition={{ type: 'spring', stiffness: 350, damping: 28 }}\n                        className=\"fixed inset-x-4 top-20 lg:absolute lg:inset-auto lg:top-full lg:right-0 mt-2 lg:w-screen lg:max-w-md bg-white rounded-2xl shadow-[0_20px_50px_-12px_rgba(0,0,0,0.15)] z-[100] flex flex-col overflow-hidden border border-gray-100 origin-top-right rounded-lg border border-slate-200 bg-white shadow-lg\"\n                        style={{ maxHeight: 'calc(100vh - 180px)' }}\n                    >\n                        {/* Elegant arrow pointer connecting to the bell - only show on desktop */}\n                        <div className=\"hidden lg:block absolute -top-1 right-5 w-3 h-3 bg-white border-l border-t border-gray-100 transform rotate-45 z-10\" />\n                        {/* Header */}\n                        <div className=\"px-4 py-4 border-b border-gray-200\">\n                            <div className=\"flex items-center justify-between mb-4\">\n                                <div className=\"flex items-center gap-2\">\n                                    <h2\n                                        id=\"notification-title\"\n                                        className=\"text-lg font-semibold text-gray-900\"\n                                    >\n                                        Notifications\n                                    </h2>\n                                    <span\n                                        aria-live=\"polite\"\n                                        className=\"bg-hsecondary text-white text-xs font-semibold px-2.5 py-0.5 rounded-full\"\n                                    >\n                                        {unreadCount} new\n                                    </span>\n                                </div>\n\n                                <button\n                                    onClick={markAllAsRead}\n                                    title=\"Mark all as read\"\n                                    className=\"text-xs text-gray-500 hover:text-gray-700 font-medium transition\"\n                                >\n                                    <CheckCheck className=\"w-4 h-4 inline-block mr-1\" />\n                                    Mark all read\n                                </button>\n\n                            </div>\n\n                            {/* Tabs */}\n                            <div className=\"grid gap-2 grid-cols-2 bg-hsecondary/5 p-1 rounded-2xl\">\n                                <button\n                                    onClick={() => setFilterTab('all')}\n                                    className={`py-2 rounded-2xl text-sm font-medium transition ${\n                                        filterTab === 'all'\n                                            ? 'bg-hsecondary text-white'\n                                            : 'bg-gray-100 text-gray-700 hover:bg-gray-200'\n                                    }`}\n                                >\n                                    All\n                                </button>\n                                <button\n                                    onClick={() => setFilterTab('unread')}\n                                    className={`px-4 py-2 rounded-2xl text-sm font-medium transition ${\n                                        filterTab === 'unread'\n                                            ? 'bg-hsecondary text-white'\n                                            : 'bg-gray-100 text-gray-700 hover:bg-gray-200'\n                                    }`}\n                                >\n                                    Unread ({filteredNotifications.filter(n => !n.isRead).length})\n                                </button>\n                            </div>\n                        </div>\n\n                        {/* List */}\n                        <div className=\"flex-1 flex flex-col overflow-hidden\">\n                            <div\n                                ref={scrollRef}\n                                onScroll={handleScroll}\n                                className=\"flex-1 overflow-y-auto p-4 space-y-3 bg-white scrollbar-thin scrollbar-thumb-gray-300\"\n                            >\n                                {filteredNotifications.length === 0 && !isLoading ? (\n                                    <div className=\"flex flex-col items-center justify-center py-12 text-center\">\n                                        <BellOff className=\"w-10 h-10 text-gray-300 mb-3\" />\n                                        <p className=\"text-sm font-medium text-gray-600\">\n                                            No notifications yet\n                                        </p>\n                                    </div>\n                                ) : (\n                                    <>\n                                        {filteredNotifications.map((notification) => (\n                                            <NotificationCard\n                                                key={notification._id}\n                                                notification={notification}\n                                                onMarkAsRead={markAsRead}\n                                                onDelete={deleteNotification}\n                                                onClose={closeDrawer}\n                                            />\n                                        ))}\n\n                                        {isLoading && (\n                                            <div className=\"space-y-3 py-2\">\n                                                {[...Array(3)].map((_, i) => (\n                                                    <div\n                                                        key={i}\n                                                        className=\"h-16 rounded-lg bg-gray-200 animate-pulse\"\n                                                    />\n                                                ))}\n                                            </div>\n                                        )}\n                                    </>\n                                )}\n                            </div>\n\n                            {/* Footer with View All Link */}\n                            <div className=\"px-4 py-3 border-t border-gray-200 bg-white\">\n                                <button\n                                    onClick={handleViewAll}\n                                    className=\"w-full text-center text-sm text-gray-600 hover:text-gray-900 font-medium transition flex items-center justify-center gap-1\"\n                                >\n                                    Go to notification center\n                                    <ChevronRight className=\"w-4 h-4\" />\n                                </button>\n                            </div>\n                        </div>\n                    </motion.div>\n                </>\n            )}\n        </AnimatePresence>\n    );\n}\n","'use client';\n\nimport React from 'react';\nimport { Bell } from 'lucide-react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { useNotificationCenter } from '@/providers/NotificationCenterProvider';\n\nimport { NotificationModal } from './NotificationModal';\n\nexport interface NotificationBellProps {\n    className?: string;\n    iconClassName?: string;\n    badgeClassName?: string;\n}\n\nexport function NotificationBell({ className, iconClassName, badgeClassName }: NotificationBellProps) {\n    const { unreadCount, isDrawerOpen, openDrawer, closeDrawer } = useNotificationCenter();\n\n    const handleToggle = (e: React.MouseEvent) => {\n        e.stopPropagation();\n        if (isDrawerOpen) {\n            closeDrawer();\n        } else {\n            openDrawer();\n        }\n    };\n\n    const defaultButtonClass = `relative rounded-xl transition-all duration-300 group flex items-center justify-center ${isDrawerOpen\n        ? 'bg-hprimary-50 text-hprimary-600'\n        : 'hover:bg-gradient-to-br hover:from-hprimary-50 hover:to-hprimary-100/50 text-gray-700'\n        }`;\n\n    const defaultIconClass = `w-6 h-6 transition-colors duration-300 ${isDrawerOpen ? 'text-hprimary-600 bg-gray-100 rounded-lg w-5 h-5 transition-all duration-300' : 'group-hover:text-hprimary-600'\n        }`;\n\n    const defaultBadgeClass = \"absolute -top-3 -right-4 min-w-[20px] h-5 bg-gradient-to-br from-red-500 to-red-600 text-white text-[10px] font-bold rounded-full flex items-center justify-center px-1.5 shadow-lg shadow-red-500/40 border-2 border-white\";\n\n    return (\n        <div className=\"relative\">\n            <motion.button\n                id=\"notification-bell-button\"\n                onClick={handleToggle}\n                onMouseDown={(e) => e.stopPropagation()}\n                className={className || defaultButtonClass}\n                aria-label=\"Notifications\"\n                whileHover={isDrawerOpen ? {} : { scale: 1.05 }}\n                whileTap={{ scale: 0.95 }}\n            >\n                {/* Bell Icon */}\n                <Bell\n                    className={iconClassName || defaultIconClass}\n                    strokeWidth={2}\n                />\n\n                {/* Unread Badge */}\n                <AnimatePresence>\n                    {unreadCount > 0 && (\n                        <>\n                            <motion.span\n                                initial={{ scale: 0, rotate: -180 }}\n                                animate={{ scale: 1, rotate: 0 }}\n                                exit={{ scale: 0, rotate: 180 }}\n                                transition={{\n                                    type: 'spring',\n                                    damping: 15,\n                                    stiffness: 300\n                                }}\n                                className={badgeClassName || defaultBadgeClass}\n                            >\n                                {unreadCount > 20 ? '20+' : unreadCount}\n                            </motion.span>\n                        </>\n                    )}\n                </AnimatePresence>\n            </motion.button>\n\n            {/* Notification Dropdown */}\n            <NotificationModal />\n        </div>\n    );\n}\n","/**\n * Simple utility function to merge class names\n * Handles conditional class names similar to clsx\n */\nexport function cn(...inputs: (string | undefined | null | false | { [key: string]: boolean })[]): string {\n  const classes: string[] = [];\n\n  for (const input of inputs) {\n    if (!input) continue;\n\n    if (typeof input === 'string') {\n      classes.push(input);\n    } else if (typeof input === 'object') {\n      for (const [key, value] of Object.entries(input)) {\n        if (value) {\n          classes.push(key);\n        }\n      }\n    }\n  }\n\n  return classes.join(' ');\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\";\nimport { XIcon } from \"lucide-react\";\n\nimport { cn } from \"./utils\";\n\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n  return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\nfunction SheetTrigger({\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n  return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\nfunction SheetClose({\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Close>) {\n  return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\nfunction SheetPortal({\n  ...props\n}: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n  return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\nconst SheetOverlay = React.forwardRef<\n  React.ElementRef<typeof SheetPrimitive.Overlay>,\n  React.ComponentPropsWithoutRef<typeof SheetPrimitive.Overlay>\n>(({ className, ...props }, ref) => {\n  return (\n    <SheetPrimitive.Overlay\n      data-slot=\"sheet-overlay\"\n      ref={ref}\n      className=\"fixed inset-0 z-50 bg-black/50 fade-in fade-out\"\n      {...props}\n    />\n  );\n});\nSheetOverlay.displayName = SheetPrimitive.Overlay.displayName;\n\nconst SheetContent = React.forwardRef<\n  React.ElementRef<typeof SheetPrimitive.Content>,\n  React.ComponentPropsWithoutRef<typeof SheetPrimitive.Content> & {\n    side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n  }\n>(({ className, children, side = \"right\", ...props }, ref) => {\n  return (\n    <SheetPortal>\n      <SheetOverlay />\n      <SheetPrimitive.Content\n        data-slot=\"sheet-content\"\n        ref={ref}\n        className={cn(\n          \"fixed z-50 gap-4 bg-white shadow-lg\",\n          side === \"top\" && \"inset-x-0 top-0 border-b slide-in-from-top slide-out-to-top\",\n          side === \"bottom\" && \"inset-x-0 bottom-0 border-t slide-in-from-bottom slide-out-to-bottom\",\n          side === \"left\" && \"inset-y-0 left-0 w-3/4 border-r sm:max-w-sm slide-in-from-left slide-out-to-left\",\n          side === \"right\" && \"inset-y-0 right-0 w-3/4 border-l sm:max-w-md slide-in-from-right slide-out-to-right\",\n          className\n        )}\n        {...props}\n      >\n        {children}\n        <SheetPrimitive.Close className=\"ring-offset-background focus:ring-ring data-[state=open]:bg-secondary absolute top-4 right-4 rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none\">\n          <XIcon className=\"size-4\" />\n          <span className=\"sr-only\">Close</span>\n        </SheetPrimitive.Close>\n      </SheetPrimitive.Content>\n    </SheetPortal>\n  );\n});\nSheetContent.displayName = SheetPrimitive.Content.displayName;\n\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sheet-header\"\n      className={cn(\"flex flex-col gap-1.5 p-4\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"sheet-footer\"\n      className={cn(\"mt-auto flex flex-col gap-2 p-4\", className)}\n      {...props}\n    />\n  );\n}\n\nconst SheetTitle = React.forwardRef<\n  React.ElementRef<typeof SheetPrimitive.Title>,\n  React.ComponentPropsWithoutRef<typeof SheetPrimitive.Title>\n>(({ className, ...props }, ref) => {\n  return (\n    <SheetPrimitive.Title\n      data-slot=\"sheet-title\"\n      ref={ref}\n      className={cn(\"text-foreground font-semibold\", className)}\n      {...props}\n    />\n  );\n});\nSheetTitle.displayName = SheetPrimitive.Title.displayName;\n\nconst SheetDescription = React.forwardRef<\n  React.ElementRef<typeof SheetPrimitive.Description>,\n  React.ComponentPropsWithoutRef<typeof SheetPrimitive.Description>\n>(({ className, ...props }, ref) => {\n  return (\n    <SheetPrimitive.Description\n      data-slot=\"sheet-description\"\n      ref={ref}\n      className={cn(\"text-muted-foreground text-sm\", className)}\n      {...props}\n    />\n  );\n});\nSheetDescription.displayName = SheetPrimitive.Description.displayName;\n\nexport {\n  Sheet,\n  SheetTrigger,\n  SheetClose,\n  SheetContent,\n  SheetHeader,\n  SheetFooter,\n  SheetTitle,\n  SheetDescription,\n};\n","import { AlertCircle, Minus, Plus, ShoppingBagIcon, X } from \"lucide-react\";\nimport Link from \"next/link\";\nimport { useRouter } from \"next/navigation\";\nimport { useState } from \"react\";\nimport { useCart } from \"@/providers/CartProvider\";\nimport { useStore } from \"../../context/StoreContext\";\nimport { useBasePath } from \"@/providers/BasePathProvider\";\nimport { Button } from \"../ui/Button\";\nimport {\n  Sheet,\n  SheetContent,\n  SheetDescription,\n  SheetHeader,\n  SheetTitle,\n} from \"../ui/sheet\";\nimport Image from \"next/image\";\nimport { CartItemPopulated } from \"@/lib/Apis\";\nimport { PLACEHOLDER_IMAGE_SRC } from \"@/lib/constants/assets\";\nimport { useProduct } from \"@/hooks/useProducts\";\n\nfunction CartDrawerItem({ item, removeFromCart, updateQuantity, setCartOpen }: {\n  item: CartItemPopulated;\n  removeFromCart: (variantId: string) => Promise<void>;\n  updateQuantity: (variantId: string, quantity: number) => void;\n  setCartOpen: (open: boolean) => void;\n}) {\n  const [isRemoving, setIsRemoving] = useState(false);\n  const { buildPath } = useBasePath();\n\n  const productId =\n    (item as any).productId ||\n    (item as any).product?._id ||\n    (item as any).product?.id ||\n    (item.productVariantData as any)?.productId ||\n    (item.productVariantData as any)?.product?._id ||\n    (item.productVariantData as any)?.product?.id;\n\n  const { product } = useProduct(productId);\n\n  const productName = (item as any).product?.name || product?.name;\n  const variantName = item.productVariantData?.name;\n  const displayName = productName || variantName;\n\n  const isVariantImagePlaceholder =\n    !item.productVariantData?.media?.[0]?.file ||\n    item.productVariantData?.media?.[0]?.file === PLACEHOLDER_IMAGE_SRC;\n\n  const displayImage =\n    (item as any).product?.media?.[0]?.file ||\n    (!isVariantImagePlaceholder ? item.productVariantData?.media?.[0]?.file : null) ||\n    product?.media?.[0]?.file ||\n    PLACEHOLDER_IMAGE_SRC;\n\n  const price = item.productVariantData?.finalPrice || 0;\n  const productHref = buildPath(`/products/${productId}`);\n\n  const handleRemove = async () => {\n    setIsRemoving(true);\n    try {\n      await removeFromCart(item.productVariantId);\n    } finally {\n      setIsRemoving(false);\n    }\n  };\n\n  // Grid: [image] [name + qty] [X + price]\n  return (\n    <div className=\"grid grid-cols-[80px_1fr_auto] gap-3 items-start\">\n      {/* Image */}\n      <Link\n        href={productHref}\n        onClick={() => setCartOpen(false)}\n        className=\"w-20 h-20 rounded-2xl bg-gray-100 overflow-hidden hover:opacity-80 transition-opacity\"\n      >\n        <Image\n          src={displayImage}\n          alt={displayName || \"Product\"}\n          className=\"w-full h-full object-cover\"\n          height={80}\n          width={80}\n        />\n      </Link>\n\n      {/* Name + qty */}\n      <div className=\"min-w-0 pt-0.5\">\n        <Link\n          href={productHref}\n          onClick={() => setCartOpen(false)}\n          className=\"text-sm font-medium text-gray-900 hover:text-hprimary transition-colors line-clamp-2 leading-snug\"\n        >\n          {displayName}\n        </Link>\n        {productName && variantName && (\n          <p className=\"text-xs text-gray-500 mt-0.5 truncate\">{variantName}</p>\n        )}\n        <div className=\"flex items-center gap-2 bg-gray-100 rounded-full px-3 py-1 w-fit mt-2\">\n          <button\n            aria-label=\"Decrease quantity\"\n            onClick={() => updateQuantity(item.productVariantId, Math.max(1, item.quantity - 1))}\n            className=\"text-gray-600 hover:text-gray-900\"\n          >\n            <Minus className=\"w-3 h-3\" />\n          </button>\n          <span className=\"text-sm font-medium w-4 text-center\">{item.quantity}</span>\n          <button\n            aria-label=\"Increase quantity\"\n            onClick={() => updateQuantity(item.productVariantId, item.quantity + 1)}\n            className=\"text-gray-600 hover:text-gray-900\"\n          >\n            <Plus className=\"w-3 h-3\" />\n          </button>\n        </div>\n      </div>\n\n      {/* X + price — dedicated grid column, always visible */}\n      <div className=\"flex flex-col items-end justify-between h-20 pt-0.5 pb-1\">\n        <button\n          aria-label=\"Remove item\"\n          onClick={handleRemove}\n          disabled={isRemoving}\n          className=\"text-gray-400 hover:text-red-500 disabled:opacity-50 transition-colors\"\n        >\n          {isRemoving\n            ? <span className=\"inline-block w-4 h-4 border-2 border-gray-400 border-t-transparent rounded-full animate-spin\" />\n            : <X className=\"w-4 h-4\" />\n          }\n        </button>\n        <span className=\"text-sm font-medium text-gray-900\">${(price * item.quantity).toFixed(2)}</span>\n      </div>\n    </div>\n  );\n}\n\nfunction CartItemSkeleton() {\n  return (\n    <div className=\"grid grid-cols-[80px_1fr_auto] gap-3 items-start animate-pulse\">\n      <div className=\"w-20 h-20 rounded-2xl bg-gray-200\" />\n      <div className=\"pt-0.5 space-y-2\">\n        <div className=\"h-4 bg-gray-200 rounded w-3/4\" />\n        <div className=\"h-3 bg-gray-200 rounded w-1/2\" />\n        <div className=\"h-8 bg-gray-200 rounded-full w-24 mt-2\" />\n      </div>\n      <div className=\"flex flex-col items-end justify-between h-20 pt-0.5 pb-1\">\n        <div className=\"w-4 h-4 bg-gray-200 rounded\" />\n        <div className=\"h-4 bg-gray-200 rounded w-12\" />\n      </div>\n    </div>\n  );\n}\n\nexport function CartDrawer() {\n  const { cart, removeFromCart, updateQuantity, isFetching, cartError, clearCartError } = useCart();\n  const { isCartOpen, setCartOpen } = useStore();\n  const { buildPath } = useBasePath();\n  const router = useRouter();\n  const [showBottomFade, setShowBottomFade] = useState(true);\n\n  function handleScroll(e: React.UIEvent<HTMLDivElement>) {\n    const el = e.currentTarget;\n    const atBottom = el.scrollHeight - el.scrollTop - el.clientHeight < 8;\n    setShowBottomFade(!atBottom);\n  }\n\n  const items = cart?.cartBody?.items || [];\n  const cartTotal = cart?.subTotal || 0;\n\n  return (\n    <Sheet open={isCartOpen} onOpenChange={setCartOpen}>\n      <SheetContent side=\"right\" className=\"flex flex-col p-0 w-[90vw] sm:max-w-md h-full overflow-hidden\">\n        {/* Header */}\n        <SheetHeader className=\"flex-row items-center justify-between gap-2 border-b border-gray-200 px-6 py-4 space-y-0\">\n          <div className=\"flex items-center gap-2\">\n            <ShoppingBagIcon className=\"w-5 h-5 text-gray-700\" />\n            <SheetTitle className=\"text-xl font-medium text-hsecondary\">Your Cart</SheetTitle>\n            <p className=\"text-sm text-gray-500\">({items.length} item{items.length !== 1 ? \"s\" : \"\"})</p>\n          </div>\n          <SheetDescription className=\"sr-only\">Shopping cart contents</SheetDescription>\n        </SheetHeader>\n\n        {cartError && (\n          <div className=\"flex items-start gap-3 mx-4 mt-4 px-4 py-3 bg-red-50 border border-red-200 rounded-xl text-sm text-red-700\">\n            <AlertCircle className=\"w-4 h-4 mt-0.5 shrink-0 text-red-500\" />\n            <span className=\"flex-1\">{cartError}</span>\n            <button onClick={clearCartError} className=\"shrink-0 text-red-400 hover:text-red-600\">\n              <X className=\"w-4 h-4\" />\n            </button>\n          </div>\n        )}\n\n        {/* {isFetching && items.length === 0 ? (\n          <div className=\"relative flex-1 min-h-0\">\n            <div className=\"h-full overflow-y-auto px-6\">\n              <div className=\"py-4 space-y-6\">\n                {[...Array(3)].map((_, i) => <CartItemSkeleton key={i} />)}\n              </div>\n            </div>\n          </div>\n        )} */}\n\n        {isFetching && items.length === 0 ? (\n          <div className=\"relative flex-1 min-h-0\">\n            <div className=\"h-full overflow-y-auto px-6\">\n              <div className=\"py-4 space-y-6\">\n                {[...Array(3)].map((_, i) => <CartItemSkeleton key={i} />)}\n              </div>\n            </div>\n          </div>\n        ) : items.length === 0 ? (\n          <div className=\"flex-1 flex flex-col items-center justify-center px-6 py-12\">\n            <div className=\"w-16 h-16 rounded-full bg-gray-100 flex items-center justify-center mb-4\">\n              <Plus className=\"w-8 h-8 text-gray-400\" />\n            </div>\n            <h3 className=\"text-lg font-medium text-gray-900 mb-2\">Your cart is empty</h3>\n            <p className=\"text-sm text-gray-500 text-center mb-6\">\n              Add items to your cart to get started\n            </p>\n            <Button\n              className=\"bg-hsecondary text-white hover:bg-hsecondary/90 rounded-full\"\n              onClick={() => { setCartOpen(false); router.push(buildPath('/shop')); }}\n            >\n              Continue Shopping\n            </Button>\n          </div>\n        ) : (\n          <>\n            {/* Cart Items */}\n            <div className=\"relative flex-1 min-h-0\">\n              <div\n                onScroll={handleScroll}\n                className=\"h-full overflow-y-auto px-6 [&::-webkit-scrollbar]:w-1.5 [&::-webkit-scrollbar-thumb]:rounded-full [&::-webkit-scrollbar-thumb]:bg-gray-300 [&::-webkit-scrollbar-track]:bg-transparent\"\n              >\n                <div className=\"py-4 space-y-6\">\n                  {items.map((item) => (\n                    <CartDrawerItem\n                      key={item.productVariantId}\n                      item={item}\n                      removeFromCart={removeFromCart}\n                      updateQuantity={updateQuantity}\n                      setCartOpen={setCartOpen}\n                    />\n                  ))}\n                </div>\n              </div>\n              {/* Bottom fade — fades out when scrolled to end */}\n              {showBottomFade && (\n                <div className=\"pointer-events-none absolute bottom-0 left-0 right-0 h-16 bg-linear-to-t from-white to-transparent\" />\n              )}\n            </div>\n\n            {/* Summary */}\n            <div className=\"px-6 py-6 border-t border-gray-200 space-y-4 bg-hmuted/5\">\n              <div className=\"space-y-2 text-sm\">\n                <div className=\"flex justify-between text-gray-600\">\n                  <span>Subtotal</span>\n                  <span>${cartTotal.toFixed(2)}</span>\n                </div>\n                <div className=\"flex justify-between text-gray-600\">\n                  <span>Shipping</span>\n                  <span>Calculated at checkout</span>\n                </div>\n              </div>\n\n              <div className=\"border-t border-gray-200 pt-4 mb-6\">\n                <div className=\"flex justify-between items-baseline mb-1\">\n                  <span className=\"text-base font-normal text-gray-900\">Total</span>\n                  <span className=\"text-2xl font-medium text-gray-900\">${cartTotal.toFixed(2)}</span>\n                </div>\n              </div>\n\n              <Link href={buildPath('/checkout')} className=\"flex w-full mb-3 mx-auto items-center justify-center\">\n                <Button\n                  className=\"w-full rounded-full border-2 border-hsecondary bg-hsecondary hover:bg-hsecondary/90 text-white px-4 py-3 text-sm font-medium transition-colors flex items-center justify-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed\"\n                  onClick={() => setCartOpen(false)}\n                >\n                  Proceed to Checkout\n                  <span>→</span>\n                </Button>\n              </Link>\n\n              <p className=\"text-xs text-center text-gray-500\">\n                or{\" \"}\n                <Link\n                  href={buildPath('/shop')}\n                  onClick={() => setCartOpen(false)}\n                  className=\"text-gray-900 hover:underline font-medium\"\n                >\n                  continue shopping\n                </Link>\n              </p>\n            </div>\n          </>\n        )}\n      </SheetContent>\n    </Sheet>\n  );\n}\n","'use client';\n\nimport React, { useState, useEffect, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { ShoppingCart, User, Menu, X, Search, Heart, ChevronDown, Settings, LogOut, ArrowRight } from 'lucide-react';\nimport { useNotificationCenter } from '@/providers/NotificationCenterProvider';\nimport { useAuth } from '@/providers/AuthProvider';\nimport { useTheme } from '@/providers/ThemeProvider';\nimport { useWishlist } from '@/providers/WishlistProvider';\nimport { useStore } from '../context/StoreContext';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { getInitials } from '@/lib/utils/format';\nimport { useRouter, usePathname } from 'next/navigation';\nimport Link from 'next/link';\nimport Image from 'next/image';\nimport { NotificationBell } from './NotificationBell';\nimport { CartDrawer } from './ui/CartDrawer';\n\nexport function Header() {\n  const { config } = useTheme();\n  const { user, isAuthenticated, logout } = useAuth();\n  const { cart: cartItems, setCartOpen } = useStore();\n  const { getWishlistCount } = useWishlist();\n  const { closeDrawer } = useNotificationCenter();\n  const wishlistCount = getWishlistCount?.() || 0;\n  const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false);\n  const [isSearchOpen, setIsSearchOpen] = useState(false);\n  const [isDropdownOpen, setIsDropdownOpen] = useState(false);\n  const [isLoggingOut, setIsLoggingOut] = useState(false);\n  const [searchQuery, setSearchQuery] = useState('');\n  const { buildPath } = useBasePath();\n  const router = useRouter();\n  const pathname = usePathname();\n  const searchRef = useRef<HTMLDivElement>(null);\n  const dropdownRef = useRef<HTMLDivElement>(null);\n\n  // Close all dropdowns on navigation\n  useEffect(() => {\n    setIsSearchOpen(false);\n    setIsDropdownOpen(false);\n    setIsMobileMenuOpen(false);\n    closeDrawer();\n  }, [pathname, closeDrawer]);\n\n  // Handle click outside search\n  useEffect(() => {\n    if (!isSearchOpen) return;\n\n    const handleClickOutside = (event: MouseEvent) => {\n      if (searchRef.current && !searchRef.current.contains(event.target as Node)) {\n        setIsSearchOpen(false);\n      }\n    };\n\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, [isSearchOpen]);\n\n  // Handle click outside dropdown\n  useEffect(() => {\n    if (!isDropdownOpen) return;\n\n    const handleClickOutside = (event: MouseEvent) => {\n      if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n        setIsDropdownOpen(false);\n      }\n    };\n\n    document.addEventListener('mousedown', handleClickOutside);\n    return () => document.removeEventListener('mousedown', handleClickOutside);\n  }, [isDropdownOpen]);\n\n  const handleLogout = async () => {\n    setIsLoggingOut(true);\n    try {\n      await logout();\n      router.push(buildPath('/'));\n    } catch (error) {\n      console.error('Logout failed:', error);\n    } finally {\n      setIsLoggingOut(false);\n      setIsDropdownOpen(false);\n    }\n  };\n\n  const navLinks = [\n    { href: buildPath('/shop'), label: 'Shop' },\n  ];\n\n  return (\n    <header className=\"sticky top-0 z-50 bg-white/80 backdrop-blur-xl border-b border-gray-200 shadow-xs\">\n      <div className=\"container mx-auto px-4\">\n        <div className=\"relative flex items-center justify-between h-20\">\n          {/* Logo */}\n          <Link href={buildPath('/')} className=\"flex items-center gap-3 z-10\">\n            <div className=\"relative w-12 h-12\">\n              <Image\n                src={config.logo}\n                alt={config.storeName}\n                fill\n                className=\"object-contain\"\n              />\n            </div>\n          </Link>\n\n          {/* Desktop Navigation */}\n          <nav className=\"hidden lg:flex items-center gap-8 z-10\">\n            {navLinks.map((link) => (\n              <Link\n                key={link.href}\n                href={link.href}\n                className=\"text-gray-700 hover:text-hprimary-600 font-medium transition-colors relative group\"\n              >\n                {link.label}\n                <span className=\"absolute bottom-0 left-0 w-0 h-0.5 bg-hprimary-600 group-hover:w-full transition-all duration-300\" />\n              </Link>\n            ))}\n          </nav>\n\n          {/* Actions */}\n          <div className=\"flex items-center gap-4 z-10\">\n            {/* Search */}\n            <div className=\"relative\" ref={searchRef}>\n              <button\n                onClick={() => setIsSearchOpen(!isSearchOpen)}\n                className=\"p-2 hover:bg-gray-100 rounded-lg transition-colors\"\n                aria-label=\"Search\"\n              >\n                <Search className=\"w-5 h-5 text-gray-700\" />\n              </button>\n\n              <AnimatePresence>\n                {isSearchOpen && (\n                  <motion.div\n                    initial={{ opacity: 0, scale: 0.95, y: -10 }}\n                    animate={{ opacity: 1, scale: 1, y: 0 }}\n                    exit={{ opacity: 0, scale: 0.95, y: -10 }}\n                    transition={{ duration: 0.15 }}\n                    className=\"absolute sm:right-0 sm:top-full mt-2 bg-white rounded-lg shadow-lg overflow-hidden z-[60]\"\n                  >\n                    <div className=\"flex items-center p-2 w-64\">\n                      <Search className=\"w-5 h-5 text-gray-400 mr-2 flex-shrink-0\" />\n                      <input\n                        type=\"text\"\n                        value={searchQuery}\n                        onChange={(e) => setSearchQuery(e.target.value)}\n                        onKeyDown={(e) => {\n                          if (e.key === 'Enter') {\n                            const sanitized = searchQuery.trim().replace(/\\s+/g, ' ');\n                            if (sanitized) {\n                              router.push(buildPath(`/search?q=${encodeURIComponent(sanitized)}`));\n                              setIsSearchOpen(false);\n                              setSearchQuery('');\n                            }\n                          }\n                        }}\n                        placeholder=\"Search products...\"\n                        className=\"w-full outline-hidden text-gray-700 placeholder:text-gray-400\"\n                        autoFocus\n                        autoComplete=\"off\"\n                      />\n                      <AnimatePresence>\n                        {searchQuery && (\n                          <div className=\"flex items-center gap-1\">\n                            <button\n                              onClick={() => setSearchQuery('')}\n                              className=\"text-gray-400 hover:text-gray-600 p-1\"\n                            >\n                              <X className=\"w-4 h-4\" />\n                            </button>\n                            <motion.button\n                              initial={{ opacity: 0, scale: 0.8, x: -5 }}\n                              animate={{ opacity: 1, scale: 1, x: 0 }}\n                              exit={{ opacity: 0, scale: 0.8, x: -5 }}\n                              onClick={() => {\n                                const sanitized = searchQuery.trim().replace(/\\s+/g, ' ');\n                                if (sanitized) {\n                                  router.push(buildPath(`/search?q=${encodeURIComponent(sanitized)}`));\n                                  setIsSearchOpen(false);\n                                  setSearchQuery('');\n                                }\n                              }}\n                              className=\"p-1.5 bg-hprimary text-white rounded-md hover:bg-hprimary/90 transition-colors shadow-xs\"\n                            >\n                              <ArrowRight className=\"w-3.5 h-3.5\" />\n                            </motion.button>\n                          </div>\n                        )}\n                      </AnimatePresence>\n                    </div>\n                  </motion.div>\n                )}\n              </AnimatePresence>\n            </div>\n\n            {/* Wishlist, Cart, and Notifications */}\n            <div className=\"flex items-center gap-4\">\n              {/* Notifications - only show when authenticated */}\n              {isAuthenticated && <NotificationBell />}\n\n              <Link href={buildPath('/wishlist')} className=\"hidden lg:flex relative p-2 text-gray-700 hover:text-red-500 transition-colors\">\n                <Heart className=\"w-6 h-6\" />\n                {wishlistCount > 0 && (\n                  <span className=\"absolute -top-1 -right-1 bg-red-500 text-white text-xs font-bold rounded-full w-5 h-5 flex items-center justify-center\">\n                    {wishlistCount}\n                  </span>\n                )}\n              </Link>\n\n              <button aria-label=\"Open cart\" onClick={() => setCartOpen(true)} className=\"hidden lg:flex relative p-2 text-gray-700 hover:text-hprimary-600 transition-colors\">\n                <ShoppingCart className=\"w-6 h-6\" />\n                {cartItems.length > 0 ? (\n                  <span className=\"absolute -top-1 -right-1 bg-red-500 text-white text-xs font-bold rounded-full w-5 h-5 flex items-center justify-center\">\n                    {cartItems.length}\n                  </span>\n                ) : null}\n              </button>\n\n              {/* User Menu */}\n              {isAuthenticated ? (\n                <div className=\"relative\" ref={dropdownRef}>\n                  <button\n                    onClick={() => setIsDropdownOpen(!isDropdownOpen)}\n                    className=\"flex items-center gap-2 rounded-full border border-slate-200 bg-white px-3 py-2 hover:bg-slate-50 transition-colors\"\n                  >\n                    <div className=\"flex h-7 w-7 items-center justify-center rounded-full bg-hprimary-100 text-xs font-semibold text-hprimary-700\">\n                      {getInitials(user?.firstname || '', user?.lastname || '')}\n                    </div>\n                    <ChevronDown className={`h-4 w-4 text-slate-400 transition-transform ${isDropdownOpen ? 'rotate-180' : ''}`} />\n                  </button>\n\n                  {/* Dropdown Menu */}\n                  <AnimatePresence>\n                    {isDropdownOpen && (\n                      <motion.div\n                        initial={{ opacity: 0, scale: 0.95, y: -10 }}\n                        animate={{ opacity: 1, scale: 1, y: 0 }}\n                        exit={{ opacity: 0, scale: 0.95, y: -10 }}\n                        transition={{ duration: 0.15 }}\n                        className=\"absolute right-0 top-full mt-2 w-56 rounded-lg border border-slate-200 bg-white shadow-lg z-[60] origin-top-right\"\n                      >\n                        <div className=\"p-2\">\n                          <div className=\"px-3 py-2 border-b border-slate-200 mb-1\">\n                            <p className=\"text-sm font-medium text-slate-700 truncate\">\n                              {user?.firstname} {user?.lastname}\n                            </p>\n                            <p className=\"text-xs text-slate-500 truncate\">{user?.email}</p>\n                          </div>\n                          <Link\n                            href={buildPath('/account')}\n                            onClick={() => setIsDropdownOpen(false)}\n                            className=\"flex w-full items-center gap-2 rounded-md px-3 py-2 text-sm text-slate-700 hover:bg-slate-100 transition-colors\"\n                          >\n                            <User className=\"h-4 w-4\" />\n                            My Account\n                          </Link>\n                          <div className=\"my-1 border-t border-slate-200\" />\n                          <button\n                            onClick={handleLogout}\n                            disabled={isLoggingOut}\n                            className=\"flex w-full items-center gap-2 rounded-md px-3 py-2 text-sm text-red-600 hover:bg-red-50 transition-colors disabled:opacity-50\"\n                          >\n                            <LogOut className=\"h-4 w-4\" />\n                            {isLoggingOut ? 'Signing out...' : 'Sign Out'}\n                          </button>\n                        </div>\n                      </motion.div>\n                    )}\n                  </AnimatePresence>\n                </div>\n              ) : (\n                <Link\n                  href={buildPath('/login')}\n                  className=\"block px-4 py-2 bg-hprimary text-white rounded-lg hover:bg-hprimary-700 transition-colors font-medium\"\n                >\n                  Sign In\n                </Link>\n              )}\n            </div>\n\n            {/* Mobile Menu Button */}\n            <button\n              className=\"lg:hidden p-2 hover:bg-gray-100 rounded-lg transition-colors\"\n              onClick={() => setIsMobileMenuOpen(!isMobileMenuOpen)}\n            >\n              {isMobileMenuOpen ? (\n                <X className=\"w-6 h-6\" />\n              ) : (\n                <Menu className=\"w-6 h-6\" />\n              )}\n            </button>\n          </div>\n        </div>\n\n        {/* Mobile Menu - Moved outside the flex container */}\n        <AnimatePresence>\n          {isMobileMenuOpen && (\n            <motion.div\n              initial={{ opacity: 0, height: 0 }}\n              animate={{ opacity: 1, height: 'auto' }}\n              exit={{ opacity: 0, height: 0 }}\n              transition={{ duration: 0.2 }}\n              className=\"lg:hidden overflow-hidden border-t border-gray-200 z-[50] top-16 mt-2\"\n            >\n              <nav className=\"flex flex-col gap-1 py-2\">\n                {/* Wishlist and Cart - Mobile Only */}\n                <Link\n                  href={buildPath('/wishlist')}\n                  onClick={() => setIsMobileMenuOpen(false)}\n                  className=\"flex items-center justify-between px-4 py-3 text-gray-700 hover:bg-gray-50 rounded-lg font-medium\"\n                >\n                  <div className=\"flex items-center gap-3\">\n                    <Heart className=\"w-5 h-5\" />\n                    <span>Wishlist</span>\n                  </div>\n                  {wishlistCount > 0 && (\n                    <span className=\"bg-red-500 text-white text-xs font-bold rounded-full w-6 h-6 flex items-center justify-center\">\n                      {wishlistCount}\n                    </span>\n                  )}\n                </Link>\n\n                <button\n                  onClick={() => {\n                    setCartOpen(true);\n                    setIsMobileMenuOpen(false);\n                  }}\n                  className=\"flex w-full items-center justify-between px-4 py-3 text-gray-700 hover:bg-gray-50 rounded-lg font-medium\"\n                >\n                  <div className=\"flex items-center gap-3\">\n                    <ShoppingCart className=\"w-5 h-5\" />\n                    <span>Cart</span>\n                  </div>\n                  {cartItems.length > 0 ? (\n                    <span className=\"bg-red-500 text-white text-xs font-bold rounded-full w-6 h-6 flex items-center justify-center\">\n                      {cartItems.length}\n                    </span>\n                  ) : null}\n                </button>\n\n                {/* Divider */}\n                <div className=\"border-t border-gray-200 my-1\" />\n\n                {/* Navigation Links */}\n                {navLinks.map((link) => (\n                  <Link\n                    key={link.href}\n                    href={link.href}\n                    className=\"px-4 py-3 text-gray-700 hover:bg-gray-50 rounded-lg font-medium\"\n                    onClick={() => setIsMobileMenuOpen(false)}\n                  >\n                    {link.label}\n                  </Link>\n                ))}\n              </nav>\n            </motion.div>\n          )}\n        </AnimatePresence>\n      </div>\n      <CartDrawer />\n    </header>\n  );\n}\n","'use client';\n\nimport { useState, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { ShoppingCart } from 'lucide-react';\nimport { motion } from 'framer-motion';\nimport { useStore } from '../context/StoreContext';\n\nexport function FloatingCartButton() {\n  const { cart: cartItems, setCartOpen } = useStore();\n  const [mounted, setMounted] = useState(false);\n\n  useEffect(() => { setMounted(true); }, []);\n\n  if (!mounted) return null;\n\n  return createPortal(\n    <motion.button\n      aria-label=\"Open cart\"\n      onClick={() => setCartOpen(true)}\n      className=\"fixed bottom-6 right-6 z-40 flex items-center justify-center w-14 h-14 bg-hprimary text-white rounded-full shadow-lg hover:bg-hprimary-700 transition-colors\"\n      whileHover={{ scale: 1.05 }}\n      whileTap={{ scale: 0.95 }}\n    >\n      <ShoppingCart className=\"w-6 h-6\" />\n      {cartItems.length > 0 && (\n        <span className=\"absolute -top-1 -right-1 bg-red-500 text-white text-xs font-bold rounded-full w-5 h-5 flex items-center justify-center\">\n          {cartItems.length}\n        </span>\n      )}\n    </motion.button>,\n    document.body\n  );\n}\n","'use client';\n\nimport React from 'react';\nimport { Mail, Phone, MapPin, Facebook, Twitter, Instagram } from 'lucide-react';\nimport { useTheme } from '@/providers/ThemeProvider';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport Link from 'next/link';\n\nexport function Footer() {\n  const { config } = useTheme();\n  const { buildPath } = useBasePath();\n\n  const footerLinks = {\n    shop: [\n      { label: 'All Products', href: buildPath('/shop') },\n      { label: 'Categories', href: buildPath('/categories') },\n      { label: 'Featured', href: buildPath('/featured') },\n      { label: 'New Arrivals', href: buildPath('/new') },\n    ],\n    account: [\n      { label: 'My Account', href: buildPath('/account') },\n      { label: 'Orders', href: buildPath('/orders') },\n      { label: 'Wishlist', href: buildPath('/wishlist') },\n      { label: 'Cart', href: buildPath('/cart') },\n    ],\n    support: [\n      { label: 'Contact Us', href: buildPath('/contact') },\n      { label: 'FAQs', href: buildPath('/faqs') },\n      { label: 'Shipping Info', href: buildPath('/shipping') },\n      { label: 'Returns', href: buildPath('/returns') },\n    ],\n    legal: [\n      { label: 'Privacy Policy', href: buildPath('/privacy') },\n      { label: 'Terms of Service', href: buildPath('/terms') },\n      { label: 'Cookie Policy', href: buildPath('/cookies') },\n    ],\n  };\n\n  return (\n    <footer className=\"bg-gray-900 text-gray-300 overflow-x-hidden\">\n      <div className=\"max-w-[1920px] mx-auto px-2 sm:px-4 py-8 sm:py-16\">\n        <div className=\"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-8 lg:gap-12\">\n          {/* Brand Column */}\n          <div className=\"lg:col-span-2\">\n            <h3 className=\"text-2xl font-bold text-white mb-4\">{config.storeName}</h3>\n            <p className=\"text-gray-400 mb-6 max-w-md\">\n              Your trusted online store for quality products. We deliver excellence with every order.\n            </p>\n            <div className=\"space-y-3\">\n              <div className=\"flex items-center gap-3\">\n                <Mail className=\"w-5 h-5 text-hprimary-500\" />\n                <span>support@{config.storeName.toLowerCase().replace(/\\s+/g, '')}.com</span>\n              </div>\n              <div className=\"flex items-center gap-3\">\n                <Phone className=\"w-5 h-5 text-hprimary-500\" />\n                <span>+1 (555) 123-4567</span>\n              </div>\n              <div className=\"flex items-center gap-3\">\n                <MapPin className=\"w-5 h-5 text-hprimary-500\" />\n                <span>123 Store Street, City, Country</span>\n              </div>\n            </div>\n          </div>\n\n          {/* Shop Links */}\n          <div>\n            <h4 className=\"text-lg font-semibold text-white mb-4\">Shop</h4>\n            <ul className=\"space-y-2\">\n              {footerLinks.shop.map((link) => (\n                <li key={link.href}>\n                  <Link\n                    href={link.href}\n                    className=\"hover:text-hprimary-500 transition-colors\"\n                  >\n                    {link.label}\n                  </Link>\n                </li>\n              ))}\n            </ul>\n          </div>\n\n          {/* Account Links */}\n          <div>\n            <h4 className=\"text-lg font-semibold text-white mb-4\">Account</h4>\n            <ul className=\"space-y-2\">\n              {footerLinks.account.map((link) => (\n                <li key={link.href}>\n                  <Link\n                    href={link.href}\n                    className=\"hover:text-hprimary-500 transition-colors\"\n                  >\n                    {link.label}\n                  </Link>\n                </li>\n              ))}\n            </ul>\n          </div>\n\n          {/* Support Links */}\n          <div>\n            <h4 className=\"text-lg font-semibold text-white mb-4\">Support</h4>\n            <ul className=\"space-y-2\">\n              {footerLinks.support.map((link) => (\n                <li key={link.href}>\n                  <Link\n                    href={link.href}\n                    className=\"hover:text-hprimary-500 transition-colors\"\n                  >\n                    {link.label}\n                  </Link>\n                </li>\n              ))}\n            </ul>\n          </div>\n        </div>\n\n        {/* Bottom Bar */}\n        <div className=\"border-t border-gray-800 mt-12 pt-8 flex flex-col md:flex-row justify-between items-center gap-4\">\n          <p className=\"text-gray-400 text-sm\">\n            © {new Date().getFullYear()} {config.storeName}. All rights reserved.\n          </p>\n          \n          {/* Social Links */}\n          <div className=\"flex items-center gap-4\">\n            <a\n              href=\"#\"\n              className=\"w-10 h-10 bg-gray-800 hover:bg-hprimary-600 rounded-full flex items-center justify-center transition-colors\"\n            >\n              <Facebook className=\"w-5 h-5\" />\n            </a>\n            <a\n              href=\"#\"\n              className=\"w-10 h-10 bg-gray-800 hover:bg-hprimary-600 rounded-full flex items-center justify-center transition-colors\"\n            >\n              <Twitter className=\"w-5 h-5\" />\n            </a>\n            <a\n              href=\"#\"\n              className=\"w-10 h-10 bg-gray-800 hover:bg-hprimary-600 rounded-full flex items-center justify-center transition-colors\"\n            >\n              <Instagram className=\"w-5 h-5\" />\n            </a>\n          </div>\n        </div>\n      </div>\n    </footer>\n  );\n}\n\n","'use client';\n\nimport { PLACEHOLDER_IMAGE_SRC } from '@/lib/constants/assets';\n\nimport React, { useRef, useState } from 'react';\nimport { motion, useMotionValue, useTransform } from 'framer-motion';\nimport { CreditCard, Repeat, /* Star, */ Trash2 } from 'lucide-react';\nimport { PaymentPaymentMethodEnum, PaymentPaymentStatusEnum, PopulatedOrder } from '@/lib/Apis';\nimport { formatPrice, formatDate } from '@/lib/utils/format';\nimport { Badge } from './ui/Badge';\nimport Image from 'next/image';\nimport { useRouter } from 'next/navigation';\nimport { useBasePath } from '@/providers/BasePathProvider';\nimport { useCart } from '@/providers/CartProvider';\nimport { useStore } from '@/context/StoreContext';\nimport { useOrderProductData } from '@/hooks/useOrderProductImages';\n\ninterface OrderCardProps {\n  order: PopulatedOrder;\n  onDelete?: (id: string) => void;\n}\n\nexport function OrderCard({ order, onDelete }: OrderCardProps) {\n  const router = useRouter();\n  const { buildPath } = useBasePath();\n  const { reorderFromOrder, isLoading: isCartLoading } = useCart();\n  const { setCartOpen } = useStore();\n  const [isDragging, setIsDragging] = useState(false);\n  const [isReordering, setIsReordering] = useState(false);\n  const { images: productImages, names: productNames } = useOrderProductData(order.items);\n  const dragX = useMotionValue(0);\n\n  // Create an opacity transformation based on the drag distance\n  const deleteOpacity = useTransform(dragX, [-100, -20], [1, 0]);\n\n  const config = order.orderStatus;\n  const customProducts = (order.customProducts || []) as any[];\n  const itemCount = (order.items?.length || 0) + customProducts.length;\n  const showPriceBreakdown = (order.shippingCost && order.shippingCost > 0) ||\n    (order.tax && order.tax > 0) ||\n    (order.discountedAmount && order.discountedAmount > 0);\n\n  const isCompletedOrder = order.orderStatus &&\n    ['Delivered', 'Picked Up', 'Fulfilled'].includes(order.orderStatus);\n\n  // Reviews are temporarily hidden.\n  // const handleReviewClick = (e: React.MouseEvent) => {\n  //   e.stopPropagation();\n  //   router.push(buildPath('/reviews'));\n  // };\n\n  const handleReorderClick = async (e: React.MouseEvent) => {\n    e.stopPropagation();\n    setIsReordering(true);\n    try {\n      await reorderFromOrder(order);\n      setCartOpen(true);\n    } finally {\n      setIsReordering(false);\n    }\n  };\n\n  const handleCardClick = () => {\n    if (isDragging) return;\n    router.push(buildPath(`/account/orders/${order._id || order.id}`));\n  };\n\n  return (\n    <div className=\"relative overflow-hidden rounded-lg bg-slate-100\">\n      {/* Delete Background Layer */}\n      <motion.div\n        style={{ opacity: deleteOpacity }}\n        className=\"absolute inset-0 bg-red-600 flex items-center justify-end px-8\"\n      >\n        <div className=\"flex flex-col items-center gap-1 text-white\">\n          <Trash2 className=\"w-6 h-6\" />\n          <span className=\"text-[10px] font-bold uppercase tracking-wider\">Delete</span>\n        </div>\n      </motion.div>\n\n      {/* Swipeable Foreground Card */}\n      <motion.div\n        drag=\"x\"\n        dragDirectionLock\n        dragConstraints={{ left: -100, right: 0 }}\n        dragElastic={0.05}\n        onDragStart={() => setIsDragging(true)}\n        onDragEnd={(_, info) => {\n          // Reset dragging state after a short delay to prevent accidental click\n          setTimeout(() => setIsDragging(false), 50);\n\n          if (info.offset.x < -70 && onDelete && (order._id || order.id)) {\n            onDelete((order._id || order.id) as string);\n          }\n        }}\n        style={{ x: dragX }}\n        whileTap={{ cursor: 'grabbing' }}\n        className=\"relative z-10 bg-white border border-slate-200 p-4 shadow-xs hover:shadow-md transition-shadow cursor-pointer touch-pan-y\"\n        onClick={handleCardClick}\n      >\n        {/* Header - Compact */}\n        <div className=\"mb-4 pb-4 border-b border-gray-200\">\n          {/* Small screens: stacked rows */}\n          <div className=\"sm:flex sm:flex-row sm:items-center sm:justify-between sm:gap-3 flex flex-col gap-2\">\n            {/* Top row: Order number + Badge */}\n            <div className=\"flex items-center justify-between\">\n              <div className=\"flex items-center gap-2\">\n                <h3 className=\"text-base font-bold text-slate-900 group-hover:text-hprimary transition-colors\">\n                  #{((order._id || order.id || '').slice(-8)).toUpperCase()}\n                </h3>\n                <Badge variant={config as any} className=\"sm:hidden\">{config}</Badge>\n              </div>\n              <p className=\"text-lg font-bold text-slate-900 sm:hidden\">{formatPrice(order.grandTotal || 0)}</p>\n            </div>\n            {/* Middle row: Date and items */}\n            <div className=\"flex items-center justify-between\">\n              <span className=\"text-xs text-gray-500\">\n                {formatDate(order.createdAt || new Date(), 'short')}\n              </span>\n              {itemCount > 0 && (\n                <span className=\"text-xs text-gray-500\">{itemCount} {itemCount === 1 ? 'item' : 'items'}</span>\n              )}\n            </div>\n            {/* Bottom row: Price and badge (desktop) */}\n            <div className=\"hidden sm:flex items-center justify-between\">\n              <Badge variant={config as any}>{config}</Badge>\n              <p className=\"text-lg font-bold text-slate-900\">{formatPrice(order.grandTotal || 0)}</p>\n            </div>\n          </div>\n        </div>\n\n        {/* Items List - Compact */}\n        <div className=\"space-y-2 mb-4\">\n          {itemCount > 0 ? (\n            <>\n              {order.items && order.items.slice(0, 3).map((item) => {\n                const itemPrice = item.productVariantData?.finalPrice || 0;\n                const itemTotal = itemPrice * item.quantity;\n                const variantImg = item?.productVariantData?.media?.[0]?.file;\n                const isPlaceholder = !variantImg || variantImg === '/placeholder.png';\n                const productId = (item.productVariantData as any).productId;\n                const itemImage = isPlaceholder\n                  ? (productImages[productId] || PLACEHOLDER_IMAGE_SRC)\n                  : variantImg;\n\n                return (\n                  <div key={item.productVariantId || item._id} className=\"flex items-center gap-2 text-sm\">\n                    <div className=\"relative w-12 h-12 rounded-sm bg-gray-100 shrink-0 overflow-hidden\">\n                      <Image\n                        src={itemImage}\n                        alt={item?.productVariantData?.name || 'Product image'}\n                        fill\n                        className=\"object-cover\"\n                        sizes=\"48px\"\n                      />\n                    </div>\n                    <div className=\"flex-1 min-w-0\">\n                      {(() => {\n                        const productId = (item.productVariantData as any).productId;\n                        const productName = item.productVariantData?.productName || productNames[productId];\n                        const variantName = item.productVariantData?.name;\n                        const displayName = productName || variantName || 'Unknown Product';\n                        const showVariant = variantName && productName && variantName !== productName;\n                        return (\n                          <>\n                            <p className=\"font-medium text-slate-900 truncate text-sm\">{displayName}</p>\n                            {showVariant && <p className=\"text-xs text-gray-500 truncate\">{variantName}</p>}\n                          </>\n                        );\n                      })()}\n                      <p className=\"text-xs text-gray-500\">Qty: {item.quantity}</p>\n                    </div>\n                    <p className=\"font-semibold text-slate-900 text-sm\">{formatPrice(itemTotal)}</p>\n                  </div>\n                );\n              })}\n              {customProducts.slice(0, Math.max(0, 3 - (order.items?.length || 0))).map((cp: any, idx: number) => {\n                const name = typeof cp === 'string' ? cp : (cp.name || 'Custom Item');\n                const qty = typeof cp === 'object' ? (cp.quantity || 1) : 1;\n                const price = typeof cp === 'object' ? (cp.price || 0) : 0;\n                return (\n                  <div key={`custom-${idx}`} className=\"flex items-center gap-2 text-sm\">\n                    <div className=\"relative w-12 h-12 rounded-sm bg-gray-100 shrink-0 overflow-hidden\">\n                      <Image\n                        src={PLACEHOLDER_IMAGE_SRC}\n                        alt={name}\n                        fill\n                        className=\"object-cover\"\n                        sizes=\"48px\"\n                      />\n                    </div>\n                    <div className=\"flex-1 min-w-0\">\n                      <p className=\"font-medium text-slate-900 truncate text-sm\">{name}</p>\n                      <p className=\"text-xs text-gray-500\">Qty: {qty}</p>\n                    </div>\n                    <p className=\"font-semibold text-slate-900 text-sm\">{formatPrice(price * qty)}</p>\n                  </div>\n                );\n              })}\n            </>\n          ) : (\n            <p className=\"text-sm text-gray-500 text-center py-2\">No items found</p>\n          )}\n          {itemCount > 3 && (\n            <p className=\"text-xs text-gray-500 text-center pt-1\">\n              +{itemCount - 3} more {itemCount - 3 === 1 ? 'item' : 'items'}\n            </p>\n          )}\n        </div>\n\n        {/* Price Breakdown - Only if needed */}\n        {showPriceBreakdown && (\n          <div className=\"mb-4 pb-4 border-b border-gray-200 space-y-1 text-xs\">\n            {order.shippingCost !== undefined && order.shippingCost > 0 && (\n              <div className=\"flex justify-between text-gray-600\">\n                <span>Shipping</span>\n                <span>{formatPrice(order.shippingCost)}</span>\n              </div>\n            )}\n            {order.tax !== undefined && order.tax > 0 && (\n              <div className=\"flex justify-between text-gray-600\">\n                <span>Tax</span>\n                <span>{formatPrice(order.tax)}</span>\n              </div>\n            )}\n            {order.discountedAmount !== undefined && order.discountedAmount > 0 && (\n              <div className=\"flex justify-between text-green-600\">\n                <span>Discount</span>\n                <span>-{formatPrice(order.discountedAmount)}</span>\n              </div>\n            )}\n          </div>\n        )}\n\n        {/* Footer Actions */}\n        <div className=\"flex flex-col sm:flex-row items-stretch sm:items-center justify-end gap-2 sm:gap-3 font-medium\">\n          {order.payment?.paymentStatus !== PaymentPaymentStatusEnum.Paid &&\n            order.payment?.paymentMethod === PaymentPaymentMethodEnum.Card && (\n              <button\n                onClick={(e) => {\n                  e.stopPropagation();\n                  window.open(order?.payment?.hostedInvoiceUrl || '', '_blank');\n                }}\n                className=\"inline-flex items-center justify-center gap-2 rounded-full border-2 border-hprimary-500 bg-hprimary-500 hover:bg-hprimary-600 text-white px-4 py-2 text-sm transition-colors\"\n                onPointerDown={(e) => e.stopPropagation()}\n              >\n                <CreditCard className=\"w-4 h-4\" />\n                Pay Now\n              </button>\n            )}\n\n          {isCompletedOrder && (\n            <>\n              <button\n                onClick={handleReorderClick}\n                disabled={isReordering || isCartLoading}\n                className=\"inline-flex items-center justify-center gap-2 rounded-lg border border-hprimary-500 bg-white hover:bg-hprimary-500/5 text-hprimary-500 px-4 py-2 text-sm transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n                onPointerDown={(e) => e.stopPropagation()}\n              >\n                <Repeat className=\"w-4 h-4\" />\n                {isReordering ? 'Adding...' : 'Reorder'}\n              </button>\n              {/* Reviews are temporarily hidden.\n              <button\n                onClick={handleReviewClick}\n                className=\"inline-flex items-center justify-center gap-2 rounded-lg border border-haccent-500 bg-white hover:bg-haccent-500/5 text-haccent-500 px-4 py-2 text-sm transition-colors\"\n                onPointerDown={(e) => e.stopPropagation()}\n              >\n                <Star className=\"w-4 h-4\" />\n                Write Review\n              </button>\n              */}\n            </>\n          )}\n        </div>\n      </motion.div>\n    </div>\n  );\n}\n","'use client';\n\nimport React, { useEffect, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { X, Settings, CheckCheck, BellOff } from 'lucide-react';\nimport { useNotificationCenter } from '@/providers/NotificationCenterProvider';\nimport { NotificationCard } from './NotificationCard';\nimport { useRouter } from 'next/navigation';\nimport { useBasePath } from '@/providers/BasePathProvider';\n\nexport function NotificationDrawer() {\n    const {\n        isDrawerOpen,\n        closeDrawer,\n        notifications,\n        unreadCount,\n        isLoading,\n        markAsRead,\n        markAllAsRead,\n        deleteNotification,\n        loadMore,\n        hasMore,\n    } = useNotificationCenter();\n\n    const router = useRouter();\n    const { buildPath } = useBasePath();\n    const scrollContainerRef = useRef<HTMLDivElement>(null);\n\n\n\n    // Handle scroll for infinite loading\n    const handleScroll = () => {\n        if (!scrollContainerRef.current || isLoading || !hasMore) return;\n\n        const { scrollTop, scrollHeight, clientHeight } = scrollContainerRef.current;\n        const scrollPercentage = (scrollTop + clientHeight) / scrollHeight;\n\n        if (scrollPercentage > 0.8) {\n            loadMore();\n        }\n    };\n\n    // Close drawer on escape key\n    useEffect(() => {\n        const handleEscape = (e: KeyboardEvent) => {\n            if (e.key === 'Escape' && isDrawerOpen) {\n                closeDrawer();\n            }\n        };\n\n        document.addEventListener('keydown', handleEscape);\n        return () => document.removeEventListener('keydown', handleEscape);\n    }, [isDrawerOpen, closeDrawer]);\n\n    // Prevent body scroll when drawer is open\n    useEffect(() => {\n        if (isDrawerOpen) {\n            document.body.style.overflow = 'hidden';\n        } else {\n            document.body.style.overflow = '';\n        }\n\n        return () => {\n            document.body.style.overflow = '';\n        };\n    }, [isDrawerOpen]);\n\n    const handleSettingsClick = () => {\n        closeDrawer();\n        router.push(buildPath('/account/notifications'));\n    };\n\n    return (\n        <AnimatePresence>\n            {isDrawerOpen && (\n                <>\n                    {/* Backdrop */}\n                    <motion.div\n                        initial={{ opacity: 0 }}\n                        animate={{ opacity: 1 }}\n                        exit={{ opacity: 0 }}\n                        className=\"fixed inset-0 bg-black/50 z-40\"\n                        onClick={closeDrawer}\n                    />\n\n                    {/* Drawer */}\n                    <motion.div\n                        initial={{ x: '100%' }}\n                        animate={{ x: 0 }}\n                        exit={{ x: '100%' }}\n                        transition={{ type: 'spring', damping: 25, stiffness: 200 }}\n                        className=\"fixed right-0 top-0 bottom-0 w-full sm:w-[480px] bg-white shadow-2xl z-50 flex flex-col max-w-[480px]\"\n                    >\n                        {/* Header */}\n                        <div className=\"flex items-center justify-between p-4 border-b border-gray-200 bg-white\">\n                            <div className=\"flex items-center gap-3\">\n                                <h2 className=\"text-xl font-bold text-gray-900\">Notifications</h2>\n                                {unreadCount > 0 && (\n                                    <span className=\"bg-red-500 text-white text-xs font-bold px-2 py-1 rounded-full\">\n                                        {unreadCount}\n                                    </span>\n                                )}\n                            </div>\n\n                            <div className=\"flex items-center gap-2\">\n                                {/* Mark all as read */}\n                                {unreadCount > 0 && (\n                                    <button\n                                        onClick={markAllAsRead}\n                                        className=\"p-2 hover:bg-gray-100 rounded-lg transition-colors\"\n                                        title=\"Mark all as read\"\n                                    >\n                                        <CheckCheck className=\"w-5 h-5 text-gray-600\" />\n                                    </button>\n                                )}\n\n                                {/* Settings */}\n                                <button\n                                    onClick={handleSettingsClick}\n                                    className=\"p-2 hover:bg-gray-100 rounded-lg transition-colors\"\n                                    title=\"Notification settings\"\n                                >\n                                    <Settings className=\"w-5 h-5 text-gray-600\" />\n                                </button>\n\n                                {/* Close */}\n                                <button\n                                    onClick={closeDrawer}\n                                    className=\"p-2 hover:bg-gray-100 rounded-lg transition-colors\"\n                                    aria-label=\"Close\"\n                                >\n                                    <X className=\"w-5 h-5 text-gray-600\" />\n                                </button>\n                            </div>\n                        </div>\n\n                        {/* Notification List */}\n                        <div\n                            ref={scrollContainerRef}\n                            onScroll={handleScroll}\n                            className=\"flex-1 overflow-y-auto p-4 space-y-3\"\n                        >\n                            {notifications.length === 0 && !isLoading ? (\n                                // Empty state\n                                <div className=\"flex flex-col items-center justify-center h-full text-center py-12\">\n                                    <div className=\"w-20 h-20 bg-gray-100 rounded-full flex items-center justify-center mb-4\">\n                                        <BellOff className=\"w-10 h-10 text-gray-400\" />\n                                    </div>\n                                    <h3 className=\"text-lg font-semibold text-gray-900 mb-2\">\n                                        No notifications yet\n                                    </h3>\n                                    <p className=\"text-sm text-gray-500 max-w-xs\">\n                                        When you receive notifications, they'll appear here\n                                    </p>\n                                </div>\n                            ) : (\n                                <>\n                                    {notifications.map((notification) => (\n                                        <NotificationCard\n                                            key={notification._id}\n                                            notification={notification}\n                                            onMarkAsRead={markAsRead}\n                                            onDelete={deleteNotification}\n                                        />\n                                    ))}\n\n                                    {/* Loading indicator */}\n                                    {isLoading && (\n                                        <div className=\"flex justify-center py-4\">\n                                            <div className=\"w-6 h-6 border-2 border-hprimary-600 border-t-transparent rounded-full animate-spin\" />\n                                        </div>\n                                    )}\n\n                                    {/* End of list indicator */}\n                                    {!hasMore && notifications.length > 0 && (\n                                        <div className=\"text-center py-4 text-sm text-gray-500\">\n                                            You're all caught up! 🎉\n                                        </div>\n                                    )}\n                                </>\n                            )}\n                        </div>\n                    </motion.div>\n                </>\n            )}\n        </AnimatePresence>\n    );\n}\n","'use client';\n\nimport React from 'react';\nimport { Star } from 'lucide-react';\n\ninterface StarRatingProps {\n  rating: number;\n  maxRating?: number;\n  size?: 'sm' | 'md' | 'lg';\n  showNumber?: boolean;\n  interactive?: boolean;\n  onChange?: (rating: number) => void;\n  className?: string;\n}\n\nconst sizeClasses = {\n  sm: 'size-3',\n  md: 'size-5',\n  lg: 'size-6',\n};\n\nexport function StarRating({\n  rating,\n  maxRating = 5,\n  size = 'md',\n  showNumber = false,\n  interactive = false,\n  onChange,\n  className,\n}: StarRatingProps) {\n  const [hoverRating, setHoverRating] = React.useState(0);\n\n  const handleClick = (index: number) => {\n    if (interactive && onChange) {\n      onChange(index + 1);\n    }\n  };\n\n  const handleMouseEnter = (index: number) => {\n    if (interactive) {\n      setHoverRating(index + 1);\n    }\n  };\n\n  const handleMouseLeave = () => {\n    if (interactive) {\n      setHoverRating(0);\n    }\n  };\n\n  const displayRating = hoverRating || rating;\n\n  return (\n    <div className={'flex items-center gap-1'}>\n      <div className=\"flex items-center\">\n        {Array.from({ length: maxRating }).map((_, index) => {\n          const isFilled = index < Math.floor(displayRating);\n          const isHalfFilled = index === Math.floor(displayRating) && displayRating % 1 !== 0;\n\n          return (\n            <button\n              key={index}\n              type=\"button\"\n              disabled={!interactive}\n              onClick={() => handleClick(index)}\n              onMouseEnter={() => handleMouseEnter(index)}\n              onMouseLeave={handleMouseLeave}\n              className={`transition-all pl-1 ${interactive && 'cursor-pointer hover:scale-110'} ${!interactive && 'cursor-default'\n                }`}\n            >\n              {isHalfFilled ? (\n                <div className=\"relative\">\n                  <Star className={`${sizeClasses[size]} text-gray-300`} />\n                  <div className=\"absolute inset-0 overflow-hidden\" style={{ width: '50%' }}>\n                    <Star className={`${sizeClasses[size]} fill-hsecondary text-hsecondary`} />\n                  </div>\n                </div>\n              ) : (\n                <Star\n                  className={`\n                    ${sizeClasses[size]}\n                    ${isFilled ? 'fill-hsecondary text-hsecondary' : 'text-gray-300'}\n                    ${interactive && hoverRating > 0 && index < hoverRating ? 'fill-haccent-500 text-haccent-500' : ''}\n                  `}\n                />\n              )}\n            </button>\n          );\n        })}\n      </div>\n      {showNumber && (\n        <span className=\"text-sm text-gray-600 ml-1\">\n          {rating.toFixed(1)}\n        </span>\n      )}\n    </div>\n  );\n}\n","'use client';\n\nimport React from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { Review } from '@/lib/Apis/models';\nimport { UsersApi } from '@/lib/Apis/apis/users-api';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { StarRating } from './StarRating';\nimport { MessageCircle } from 'lucide-react';\nimport { formatDistanceToNow } from 'date-fns';\n\ninterface ReviewCardProps {\n  review: Review;\n  showProductInfo?: boolean;\n}\n\nconst AVATAR_COLORS = [\n  'bg-hsecondary/8',\n];\n\nfunction getAvatarColor(id: string): string {\n  let hash = 0;\n  for (let i = 0; i < id.length; i++) {\n    hash = id.charCodeAt(i) + ((hash << 5) - hash);\n  }\n  return AVATAR_COLORS[Math.abs(hash) % AVATAR_COLORS.length];\n}\n\nfunction getInitials(name: string): string {\n  const parts = name.trim().split(' ');\n  if (parts.length >= 2) {\n    return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();\n  }\n  return name.substring(0, 2).toUpperCase();\n}\n\nexport function ReviewCard({ review, showProductInfo = false }: ReviewCardProps) {\n  const reviewDate = new Date(review.createdAt);\n  const replyDate = review.replyDate ? new Date(review.replyDate) : null;\n\n  const rawReview = review as any;\n  const userId: string | undefined = rawReview.userId;\n\n  const { data: userData } = useQuery({\n    queryKey: ['user', userId],\n    queryFn: () => new UsersApi(AXIOS_CONFIG).getSingleUser(userId!),\n    enabled: !!userId,\n    select: (res) => res.data,\n  });\n\n  const fetchedName = userData\n    ? [userData.firstname, userData.lastname].filter(Boolean).join(' ')\n    : undefined;\n\n  const displayName: string =\n    fetchedName ||\n    rawReview.customerName ||\n    rawReview.userName ||\n    rawReview.user?.name ||\n    'Customer';\n\n  const initials = getInitials(displayName);\n  const avatarColor = getAvatarColor(review.id || review._id || displayName);\n\n  return (\n    <div className=\"border border-gray-200 rounded-xl p-5 bg-white\">\n      <div className=\"flex items-start justify-between mb-3\">\n        <div className=\"flex items-center gap-3\">\n          <div className={`w-10 h-10 ${avatarColor} rounded-full flex items-center justify-center shrink-0`}>\n            <span className=\"text-hsecondary text-[13px]\">{initials}</span>\n          </div>\n          <div>\n            <p className=\"font-semibold text-gray-900 text-[14px]\">{displayName}</p>\n            <p className=\"text-xs text-hsecondary opacity-50\">\n              {formatDistanceToNow(reviewDate, { addSuffix: true })}\n            </p>\n          </div>\n        </div>\n        <StarRating rating={review.rating} size=\"sm\" />\n      </div>\n\n      <p className=\"text-gray-700 text-[13px] leading-relaxed\">{review.review}</p>\n\n      {review.reply && (\n        <div className=\"mt-4 pl-4 border-l-2 border-hsecondary bg-gray-50 p-3 rounded\">\n          <div className=\"flex items-center gap-2 mb-2\">\n            <MessageCircle className=\"size-4 text-hsecondary\" />\n            <p className=\"text-xs font-medium text-gray-900\">Store Response</p>\n            {replyDate && (\n              <p className=\"text-xs text-gray-500\">\n                {formatDistanceToNow(replyDate, { addSuffix: true })}\n              </p>\n            )}\n          </div>\n          <p className=\"text-sm text-gray-700\">{review.reply}</p>\n        </div>\n      )}\n    </div>\n  );\n}\n","'use client';\n\nimport { useState, useCallback } from 'react';\nimport { useQuery, useQueryClient } from '@tanstack/react-query';\nimport { ReviewApi } from '@/lib/Apis/apis/review-api';\nimport { getApiConfiguration } from '@/lib/api-adapter';\nimport { Review, CreateReviewDto } from '@/lib/Apis/models';\nimport { useAuth } from '@/providers/AuthProvider';\n\nexport function useProductReviews(productId: string) {\n  const { data, isLoading, error, refetch } = useQuery({\n    queryKey: ['reviews', 'product', productId],\n    queryFn: async () => {\n      const response = await new ReviewApi(getApiConfiguration()).getReviewsByProduct(productId);\n      return response.data || [];\n    },\n    staleTime: 3 * 60 * 1000, // 3 minutes\n    enabled: !!productId,\n  });\n\n  return {\n    reviews: data || [],\n    isLoading,\n    error: error as Error | null,\n    refetch,\n  };\n}\n\nexport function useUserReviews(userId?: string) {\n  const { user } = useAuth();\n  const resolvedUserId = userId || (user as any)?._id || (user as any)?.id;\n\n  const { data, isLoading, error, refetch } = useQuery({\n    queryKey: ['reviews', 'user', resolvedUserId],\n    queryFn: async () => {\n      const response = await new ReviewApi(getApiConfiguration()).getReviewsByUser(resolvedUserId!);\n      return response.data || [];\n    },\n    staleTime: 3 * 60 * 1000, // 3 minutes\n    enabled: !!resolvedUserId,\n  });\n\n  return {\n    reviews: data || [],\n    isLoading,\n    error: error as Error | null,\n    refetch,\n  };\n}\n\nexport function useReviewsByRating(rating: number) {\n  const { data, isLoading, error, refetch } = useQuery({\n    queryKey: ['reviews', 'rating', rating],\n    queryFn: async () => {\n      const response = await new ReviewApi(getApiConfiguration()).getReviewsByRating(rating);\n      return response.data || [];\n    },\n    staleTime: 3 * 60 * 1000, // 3 minutes\n    enabled: rating >= 1 && rating <= 5,\n  });\n\n  return {\n    reviews: data || [],\n    isLoading,\n    error: error as Error | null,\n    refetch,\n  };\n}\n\nexport function useCreateReview() {\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<Error | null>(null);\n  const [success, setSuccess] = useState(false);\n  const queryClient = useQueryClient();\n\n  const createReview = useCallback(async (orderId: string, reviewData: CreateReviewDto) => {\n    setIsLoading(true);\n    setError(null);\n    setSuccess(false);\n\n    try {\n      const response = await new ReviewApi(getApiConfiguration()).createReview(reviewData, orderId);\n      setSuccess(true);\n      // Invalidate reviews cache so new review shows up\n      queryClient.invalidateQueries({ queryKey: ['reviews'] });\n      return response.data;\n    } catch (err) {\n      setError(err as Error);\n      throw err;\n    } finally {\n      setIsLoading(false);\n    }\n  }, [queryClient]);\n\n  const reset = useCallback(() => {\n    setError(null);\n    setSuccess(false);\n    setIsLoading(false);\n  }, []);\n\n  return {\n    createReview,\n    isLoading,\n    error,\n    success,\n    reset,\n  };\n}\n\nexport function useUpdateReview() {\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<Error | null>(null);\n  const queryClient = useQueryClient();\n\n  const updateReview = useCallback(async (reviewId: string, reviewData: any) => {\n    setIsLoading(true);\n    setError(null);\n\n    try {\n      const response = await new ReviewApi(getApiConfiguration()).updateReview(reviewData, reviewId);\n      // Invalidate reviews cache\n      queryClient.invalidateQueries({ queryKey: ['reviews'] });\n      return response.data;\n    } catch (err) {\n      setError(err as Error);\n      throw err;\n    } finally {\n      setIsLoading(false);\n    }\n  }, [queryClient]);\n\n  return {\n    updateReview,\n    isLoading,\n    error,\n  };\n}\n\nexport function useDeleteReview() {\n  const [isLoading, setIsLoading] = useState(false);\n  const [error, setError] = useState<Error | null>(null);\n  const queryClient = useQueryClient();\n\n  const deleteReview = useCallback(async (reviewId: string) => {\n    setIsLoading(true);\n    setError(null);\n\n    try {\n      await new ReviewApi(getApiConfiguration()).removeReview(reviewId);\n      // Invalidate reviews cache\n      queryClient.invalidateQueries({ queryKey: ['reviews'] });\n    } catch (err) {\n      setError(err as Error);\n      throw err;\n    } finally {\n      setIsLoading(false);\n    }\n  }, [queryClient]);\n\n  return {\n    deleteReview,\n    isLoading,\n    error,\n  };\n}\n\nexport function useReviewStats() {\n  const { data, isLoading, error, refetch } = useQuery({\n    queryKey: ['reviewStats'],\n    queryFn: async () => {\n      const response = await new ReviewApi(getApiConfiguration()).getReviewCount();\n      return response.data || 0;\n    },\n    staleTime: 5 * 60 * 1000, // 5 minutes\n  });\n\n  return {\n    count: data || 0,\n    isLoading,\n    error: error as Error | null,\n    refetch,\n  };\n}\n","'use client';\n\nimport React, { useMemo, useState } from 'react';\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport { z } from 'zod';\nimport { StarRating } from './StarRating';\nimport { useCreateReview, useUpdateReview } from '@/hooks/useReviews';\nimport { useNotification } from '@/providers/NotificationProvider';\nimport { Loader2 } from 'lucide-react';\n\nconst reviewSchema = z.object({\n  rating: z.number().min(1, 'Please select a rating').max(5),\n  reviewType: z.string().optional(),\n  review: z\n    .string()\n    .trim()\n    .min(10, 'Review must be at least 10 characters')\n    .max(1000, 'Review must be less than 1000 characters'),\n  productId: z.string().optional(),\n  productVariantId: z.string().optional(),\n});\n\ntype ReviewFormData = z.infer<typeof reviewSchema>;\n\ninterface ReviewFormProps {\n  productId: string;\n  productVariantId?: string;\n  orderId: string;\n  /** If provided the form operates in edit mode */\n  reviewId?: string;\n  initialValues?: { rating: number; reviewType?: string; review: string };\n  onSuccess?: () => void;\n  onCancel?: () => void;\n}\n\nconst RATING_LABELS: Record<number, string> = {\n  1: 'Poor',\n  2: 'Fair',\n  3: 'Good',\n  4: 'Very Good',\n  5: 'Excellent',\n};\n\nexport function ReviewForm({\n  productId,\n  productVariantId,\n  orderId,\n  reviewId,\n  initialValues,\n  onSuccess,\n  onCancel,\n}: ReviewFormProps) {\n  const isEdit = !!reviewId;\n  const [rating, setRating] = useState(initialValues?.rating ?? 0);\n  const { createReview, isLoading: createLoading } = useCreateReview();\n  const { updateReview, isLoading: updateLoading } = useUpdateReview();\n  const notification = useNotification();\n  const isLoading = createLoading || updateLoading;\n\n  const {\n    register,\n    handleSubmit,\n    formState: { errors, isSubmitting, isValid },\n    setValue,\n    watch,\n    reset,\n  } = useForm<ReviewFormData>({\n    resolver: zodResolver(reviewSchema),\n    mode: 'onChange',\n    defaultValues: {\n      productId,\n      productVariantId,\n      rating: initialValues?.rating ?? 0,\n      reviewType: initialValues?.reviewType ?? 'Product Review',\n      review: initialValues?.review ?? '',\n    },\n  });\n\n  const reviewText = watch('review') || '';\n\n  const ratingLabel = useMemo(() => {\n    return rating > 0 ? RATING_LABELS[rating] : '';\n  }, [rating]);\n\n  const onSubmit = async (data: ReviewFormData) => {\n    try {\n      if (isEdit && reviewId) {\n        await updateReview(reviewId, {\n          rating: data.rating,\n          review: data.review,\n          reviewType: data.reviewType ?? 'Product Review',\n        });\n        notification.success('Review updated', 'Your review has been updated.');\n      } else {\n        const reviewPayload = {\n          rating: data.rating,\n          review: data.review,\n          reviewType: data.reviewType ?? 'Product Review',\n          ...(data.productId && { productId: data.productId }),\n          ...(data.productVariantId && { productVariantId: data.productVariantId }),\n        };\n        await createReview(orderId, reviewPayload);\n        notification.success('Review submitted', 'Thank you for your feedback!');\n      }\n\n      reset();\n      setRating(0);\n      onSuccess?.();\n    } catch (error: any) {\n      const status = error?.response?.status;\n      const errorMessage =\n        error?.response?.data?.message || 'Something went wrong. Please try again.';\n\n      if (status === 403) {\n        notification.error('Cannot submit review', 'You can only review your completed orders.');\n      } else if (status === 400) {\n        notification.error('Invalid review', errorMessage);\n      } else {\n        notification.error('Submission failed', errorMessage);\n      }\n    }\n  };\n\n  const handleRatingChange = (newRating: number) => {\n    setRating(newRating);\n    setValue('rating', newRating, { shouldValidate: true });\n  };\n\n  const isSubmitDisabled = isLoading || isSubmitting || !isValid || rating === 0;\n\n  return (\n    <form\n      onSubmit={handleSubmit(onSubmit)}\n      className=\"space-y-6\"\n      aria-label=\"Product Review Form\"\n    >\n      {/* Rating */}\n      <div>\n        <label className=\"block text-sm text-hsecondary/60 mb-3\">\n          Your Rating <span className=\"text-red-400\">*</span>\n        </label>\n\n        <div className=\"flex items-center gap-4\">\n          <StarRating\n            rating={rating}\n            size=\"lg\"\n            interactive\n            onChange={handleRatingChange}\n          />\n\n          {ratingLabel && (\n            <span className=\"text-xs font-medium text-hsecondary/60 opacity-70\">\n              {ratingLabel}\n            </span>\n          )}\n        </div>\n\n        {errors.rating && (\n          <p className=\"text-red-500 text-xs mt-2\">\n            {errors.rating.message}\n          </p>\n        )}\n      </div>\n\n      {/* Review Type */}\n      <div>\n        <label\n          htmlFor=\"reviewType\"\n          className=\"block text-sm text-hsecondary/60 mb-2\"\n        >\n          Review Type\n        </label>\n\n        <select\n          id=\"reviewType\"\n          {...register('reviewType')}\n          className=\"w-full px-4 py-2.5 border border-gray-200 rounded-xl bg-gray-50 text-sm focus:outline-none focus:ring-2 focus:ring-hprimary/30 focus:border-hprimary transition-colors\"\n        >\n          <option value=\"Product Review\">Product Review</option>\n          <option value=\"Quality Review\">Quality Review</option>\n          <option value=\"Service Review\">Service Review</option>\n          <option value=\"Delivery Review\">Delivery Review</option>\n        </select>\n      </div>\n\n      {/* Review Text */}\n      <div>\n        <label\n          htmlFor=\"review\"\n          className=\"block text-sm text-hsecondary/60 mb-2\"\n        >\n          Your Review <span className=\"text-red-400\">*</span>\n        </label>\n\n        <textarea\n          id=\"review\"\n          {...register('review')}\n          rows={5}\n          maxLength={1000}\n          placeholder=\"Share your experience with this product...\"\n          className=\"w-full px-4 py-3 border border-gray-200 rounded-xl bg-gray-50 text-sm placeholder:text-slate-400 focus:outline-none focus:ring-2 focus:ring-hprimary/30 focus:border-hprimary transition-colors resize-none\"\n        />\n\n        <div className=\"flex justify-between mt-1.5 text-xs\">\n          {errors.review ? (\n            <p className=\"text-red-500\">{errors.review.message}</p>\n          ) : (\n            <span className=\"text-gray-400\">Minimum 10 characters</span>\n          )}\n          <span className={reviewText.length > 900 ? 'text-orange-500' : 'text-gray-400'}>\n            {reviewText.length}/1000\n          </span>\n        </div>\n      </div>\n\n      {/* Actions */}\n      <div className=\"flex flex-col sm:flex-row items-stretch sm:items-center gap-3 pt-2\">\n        <button\n          type=\"submit\"\n          disabled={isSubmitDisabled}\n          className=\"inline-flex items-center justify-center gap-2 rounded-full bg-hsecondary px-6 py-2.5 text-sm font-semibold text-white hover:bg-hsecondary/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed\"\n        >\n          {isLoading ? (\n            <>\n              <Loader2 className=\"size-4 animate-spin\" />\n              {isEdit ? 'Saving...' : 'Submitting...'}\n            </>\n          ) : (\n            isEdit ? 'Save Changes' : 'Submit Review'\n          )}\n        </button>\n\n        {onCancel && (\n          <button\n            type=\"button\"\n            onClick={onCancel}\n            disabled={isLoading}\n            className=\"rounded-full border border-gray-200 px-6 py-2.5 text-sm font-semibold text-gray-700 hover:bg-gray-100 transition-colors disabled:opacity-50 text-center\"\n          >\n            Cancel\n          </button>\n        )}\n      </div>\n    </form>\n  );\n}\n","'use client';\n\nimport { Review } from '@/lib/Apis/models';\nimport { StarRating } from './StarRating';\nimport { Star, Pencil } from 'lucide-react';\n\ninterface RatingDistributionProps {\n  reviews: Review[];\n  averageRating?: number;\n  onWriteReview?: () => void;\n}\n\nexport function RatingDistribution({ reviews, averageRating, onWriteReview }: RatingDistributionProps) {\n  const totalReviews = reviews.length;\n\n  const ratingCounts = reviews.reduce(\n    (acc, review) => {\n      const rating = Math.floor(review.rating);\n      acc[rating] = (acc[rating] || 0) + 1;\n      return acc;\n    },\n    {} as Record<number, number>\n  );\n\n  const calculatedAverage =\n    averageRating ||\n    (totalReviews > 0\n      ? reviews.reduce((sum, r) => sum + r.rating, 0) / totalReviews\n      : 0);\n\n  const getRatingPercentage = (rating: number) => {\n    const count = ratingCounts[rating] || 0;\n    return totalReviews > 0 ? (count / totalReviews) * 100 : 0;\n  };\n\n  return (\n    <div className=\"rounded-lg border border-gray-200 p-6\">\n      <div className=\"flex items-start justify-between gap-4 flex-wrap\">\n        <div className=\"flex flex-col md:flex-row gap-8 flex-1\">\n          <div className=\"flex flex-col items-center justify-center md:border-r border-gray-200 md:pr-8\">\n            <div className=\"text-5xl font-medium text-hsecondary mb-2\">\n              {calculatedAverage.toFixed(1)}\n            </div>\n            <StarRating rating={calculatedAverage} size=\"md\" showNumber={false} />\n            <p className=\"text-sm text-hsecondary opacity-50 mt-2\">\n              Based on {totalReviews} {totalReviews === 1 ? 'review' : 'reviews'}\n            </p>\n          </div>\n\n          <div className=\"flex-1 space-y-3\">\n            {[5, 4, 3, 2, 1].map((rating) => {\n              const percentage = getRatingPercentage(rating);\n              const count = ratingCounts[rating] || 0;\n\n              return (\n                <div key={rating} className=\"flex items-center gap-3\">\n                  <div className=\"flex items-center gap-1 w-16\">\n                    <span className=\"text-sm text-hsecondary opacity-50\">{rating} star</span>\n                  </div>\n\n                  <div className=\"flex-1 h-2 bg-gray-200 rounded-full overflow-hidden\">\n                    <div\n                      className=\"h-full bg-hsecondary transition-all duration-300\"\n                      style={{ width: `${percentage}%` }}\n                    />\n                  </div>\n\n                  <span className=\"text-sm text-gray-600 w-12 text-right\">\n                    {count}\n                  </span>\n                </div>\n              );\n            })}\n          </div>\n        </div>\n\n        {onWriteReview && (\n          <button\n            onClick={onWriteReview}\n            className=\"flex items-center gap-2 px-4 py-2 border border-gray-300 rounded-lg text-[13px] font-medium text-white hover:opacity-90 bg-hsecondary hover:border-hsecondary transition-colors shrink-0\"\n          >\n            <Pencil className=\"size-3.5\" />\n            Write a Review\n          </button>\n        )}\n      </div>\n\n      {totalReviews === 0 && (\n        <div className=\"text-center py-8\">\n          <Star className=\"size-12 text-gray-300 mx-auto mb-4\" />\n          <p className=\"text-gray-600 font-medium mb-1\">No reviews yet</p>\n          <p className=\"text-sm text-gray-500\">Be the first to review this product!</p>\n        </div>\n      )}\n    </div>\n  );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { Review } from '@/lib/Apis/models';\nimport { ReviewCard } from './ReviewCard';\nimport { Star } from 'lucide-react';\n\ninterface ReviewsListProps {\n  reviews: Review[];\n  isLoading?: boolean;\n}\n\nconst PAGE_SIZE = 5;\n\nexport function ReviewsList({ reviews, isLoading }: ReviewsListProps) {\n  const [visibleCount, setVisibleCount] = useState(PAGE_SIZE);\n\n  const sortedReviews = React.useMemo(() => {\n    return [...reviews].sort(\n      (a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime()\n    );\n  }, [reviews]);\n\n  const visibleReviews = sortedReviews.slice(0, visibleCount);\n  const hasMore = visibleCount < sortedReviews.length;\n\n  if (isLoading) {\n    return (\n      <div className=\"space-y-4\">\n        {[1, 2, 3].map((i) => (\n          <div\n            key={i}\n            className=\"border border-gray-200 rounded-xl p-5 bg-white animate-pulse\"\n          >\n            <div className=\"flex items-start justify-between mb-3\">\n              <div className=\"flex items-center gap-3\">\n                <div className=\"w-10 h-10 bg-gray-200 rounded-full\" />\n                <div>\n                  <div className=\"h-4 w-24 bg-gray-200 rounded mb-2\" />\n                  <div className=\"h-3 w-16 bg-gray-200 rounded\" />\n                </div>\n              </div>\n              <div className=\"h-4 w-20 bg-gray-200 rounded\" />\n            </div>\n            <div className=\"space-y-2\">\n              <div className=\"h-3 w-full bg-gray-200 rounded\" />\n              <div className=\"h-3 w-3/4 bg-gray-200 rounded\" />\n            </div>\n          </div>\n        ))}\n      </div>\n    );\n  }\n\n  if (sortedReviews.length === 0) {\n    return (\n      <div className=\"text-center py-12 bg-white rounded-xl border border-gray-200\">\n        <Star className=\"size-12 text-gray-300 mx-auto mb-4\" />\n        <p className=\"text-gray-600 font-medium mb-1\">No reviews yet</p>\n        <p className=\"text-sm text-gray-500\">Be the first to review this product!</p>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"space-y-4\">\n      {visibleReviews.map((review) => (\n        <ReviewCard key={review.id || review._id} review={review} />\n      ))}\n\n      {hasMore && (\n        <div className=\"text-center pt-2\">\n          <button\n            onClick={() => setVisibleCount((c) => c + PAGE_SIZE)}\n            className=\"px-6 py-2.5 border border-gray-300 rounded-lg text-[13px] font-medium text-hsecondary hover:border-hsecondary transition-colors\"\n          >\n            Show More Reviews\n          </button>\n        </div>\n      )}\n    </div>\n  );\n}\n","'use client';\n\nimport { useMemo, useState } from 'react';\nimport { useProductReviews, useUserReviews } from '@/hooks/useReviews';\nimport { useCurrentOrders } from '@/hooks/useOrders';\nimport { useAuth } from '@/providers/AuthProvider';\nimport { RatingDistribution } from './RatingDistribution';\nimport { ReviewsList } from './ReviewsList';\nimport { ReviewForm } from './ReviewForm';\n\ninterface ProductReviewsSectionProps {\n  productId: string;\n}\n\nconst COMPLETED_STATUSES = ['Delivered', 'Picked Up', 'Fulfilled'];\nconst getId = (obj: any): string => obj?.id || obj?._id || '';\nconst getVariantId = (item: any): string => item?.productVariantId || item?._id || item?.id || '';\nconst reviewKey = (orderId: string, variantId: string) => `${orderId}:${variantId}`;\n\nexport function ProductReviewsSection({ productId }: ProductReviewsSectionProps) {\n  const { reviews, isLoading, error, refetch } = useProductReviews(productId);\n  const { isAuthenticated } = useAuth();\n  const { orders } = useCurrentOrders();\n  const { reviews: userReviews } = useUserReviews();\n\n  const [showForm, setShowForm] = useState(false);\n\n  // Build the set of already-reviewed order+variant combos\n  const reviewedSet = useMemo(() => {\n    const set = new Set<string>();\n    userReviews.forEach((r: any) => {\n      if (r.orderId && r.productVariantId) {\n        set.add(reviewKey(r.orderId, r.productVariantId));\n      }\n    });\n    return set;\n  }, [userReviews]);\n\n  // Find the first unreviewed completed order item for this product\n  const pendingOrderItem = useMemo(() => {\n    if (!isAuthenticated) return null;\n    for (const order of orders) {\n      if (!order.orderStatus || !COMPLETED_STATUSES.includes(order.orderStatus)) continue;\n      const orderId = getId(order);\n      for (const item of (order.items ?? [])) {\n        const variantData = (item as any).productVariantData || (item as any).variant;\n        const itemProductId = (item as any).productId || variantData?.productId;\n        if (itemProductId !== productId) continue;\n        const variantId = getVariantId(item);\n        if (!reviewedSet.has(reviewKey(orderId, variantId))) {\n          return { orderId, variantId };\n        }\n      }\n    }\n    return null;\n  }, [isAuthenticated, orders, productId, reviewedSet]);\n\n  const canReview = !!pendingOrderItem;\n\n  if (error) {\n    return (\n      <div className=\"text-center py-12\">\n        <p className=\"text-red-600 mb-2\">Failed to load reviews</p>\n        <p className=\"text-sm text-gray-500\">{error.message}</p>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"space-y-6\">\n      <RatingDistribution\n        reviews={reviews}\n        onWriteReview={canReview ? () => setShowForm(true) : undefined}\n      />\n\n      {showForm && pendingOrderItem && (\n        <div className=\"rounded-xl border border-gray-200 p-6 bg-white\">\n          <h3 className=\"text-lg font-semibold text-hsecondary mb-6\">Share Your Experience</h3>\n          <ReviewForm\n            productId={productId}\n            productVariantId={pendingOrderItem.variantId}\n            orderId={pendingOrderItem.orderId}\n            onSuccess={() => {\n              setShowForm(false);\n              refetch();\n            }}\n            onCancel={() => setShowForm(false)}\n          />\n        </div>\n      )}\n\n      {reviews.length > 0 && \n      <ReviewsList reviews={reviews} isLoading={isLoading} />\n      }\n    </div>\n  );\n}\n","'use client';\n\nimport { useMemo, useState, useCallback } from 'react';\nimport { useQuery } from '@tanstack/react-query';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { Star, Pencil, CheckCircle, Check, Loader2, Trash2 } from 'lucide-react';\nimport { PLACEHOLDER_IMAGE_SRC } from '@/lib/constants/assets';\nimport { useUserReviews, useDeleteReview } from '@/hooks/useReviews';\nimport { useCurrentOrders } from '@/hooks/useOrders';\nimport { ReviewForm } from './ReviewForm';\nimport { StarRating } from './StarRating';\nimport Image from 'next/image';\nimport { Review } from '@/lib/Apis/models';\nimport { ProductsApi } from '@/lib/Apis';\nimport { getApiConfiguration } from '@/lib/api-adapter';\n\nconst getId = (obj: any): string => obj?.id || obj?._id || '';\nconst getVariantId = (item: any): string => item?.productVariantId || item?._id || item?.id || '';\nconst reviewKey = (orderId: string, variantId: string) => `${orderId}:${variantId}`;\nconst isProductAvailable = (item: any): boolean => {\n  const variantData = item?.productVariantData || item?.variant;\n  if (!variantData) return false;\n  if (variantData.isActive === false) return false;\n  if ((variantData as any).isDeleted === true) return false;\n  if ((variantData as any).deletedAt) return false;\n  if ((variantData as any).product?.isActive === false) return false;\n  if ((variantData as any).product?.isDeleted === true) return false;\n  if ((variantData as any).product?.deletedAt) return false;\n  return true;\n};\n\ninterface UnifiedItem {\n  productId: string;\n  variantId: string;\n  orderId: string;\n  name: string;\n  variantName?: string;\n  image?: string;\n  review?: Review;\n  orderDate?: string;\n  category?: string;\n}\n\nexport function AccountReviewsTab() {\n  const { reviews, isLoading: reviewsLoading, refetch: refetchReviews } = useUserReviews();\n  const { orders, isLoading: ordersLoading } = useCurrentOrders();\n  const { deleteReview } = useDeleteReview();\n\n  const [filter, setFilter] = useState<'all' | 'reviewed' | 'awaiting'>('all');\n  const [expandedKey, setExpandedKey] = useState<string | null>(null);\n  const [expandedMode, setExpandedMode] = useState<'write' | 'edit' | null>(null);\n  const [deletingId, setDeletingId] = useState<string | null>(null);\n\n  // Collect all unique productIds from completed orders to verify they still exist\n  const productIds = useMemo(() => {\n    const completedStatuses = ['Delivered', 'Picked Up', 'Fulfilled'];\n    const ids = new Set<string>();\n    orders\n      .filter((order) => completedStatuses.includes(order.orderStatus || ''))\n      .forEach((order) => {\n        order.items?.forEach((item: any) => {\n          const variantData = item?.productVariantData || item?.variant;\n          const productId = item.productId || variantData?.productId;\n          if (productId) ids.add(productId);\n        });\n      });\n    return Array.from(ids);\n  }, [orders]);\n\n  // Fetch each ordered product once: drives existence filtering AND supplies the\n  // product image/name fallbacks (mirrors OrderCard's useOrderProductData behaviour).\n  const { data: productData, isLoading: productsCheckLoading } = useQuery({\n    queryKey: ['products', 'existence', productIds],\n    queryFn: async () => {\n      const api = new ProductsApi(getApiConfiguration());\n      const results = await Promise.allSettled(productIds.map((id) => api.getSingleProduct(id)));\n      const existing = new Set<string>();\n      const images: Record<string, string> = {};\n      const names: Record<string, string> = {};\n      results.forEach((r, i) => {\n        if (r.status !== 'fulfilled') return;\n        const id = productIds[i];\n        existing.add(id);\n        const product = r.value?.data as any;\n        const img = product?.media?.[0]?.file;\n        if (img) images[id] = img;\n        if (product?.name) names[id] = product.name;\n      });\n      return { existing, images, names };\n    },\n    enabled: productIds.length > 0,\n    staleTime: 5 * 60 * 1000,\n  });\n\n  const existingProductIds = productData?.existing;\n  const productImages = productData?.images;\n  const productNames = productData?.names;\n\n  const isLoading = reviewsLoading || ordersLoading || productsCheckLoading;\n\n  const reviewMap = useMemo(() => {\n    const map = new Map<string, Review>();\n    reviews.forEach((r) => {\n      if (r.orderId && r.productVariantId) {\n        map.set(reviewKey(r.orderId, r.productVariantId), r);\n      }\n    });\n    return map;\n  }, [reviews]);\n\n  const allItems = useMemo<UnifiedItem[]>(() => {\n    const completedStatuses = ['Delivered', 'Picked Up', 'Fulfilled'];\n    const items: UnifiedItem[] = [];\n    const seen = new Set<string>();\n\n    orders\n      .filter((order) => completedStatuses.includes(order.orderStatus ? order.orderStatus : ''))\n      .forEach((order) => {\n        const orderId = getId(order);\n        const allOrderItems = order.items ?? [];\n        const availableItems = allOrderItems.filter((item: any) => {\n          if (!isProductAvailable(item)) return false;\n          const variantData = item?.productVariantData || item?.variant;\n          const productId = item.productId || variantData?.productId;\n          if (productId && existingProductIds && !existingProductIds.has(productId)) return false;\n          return true;\n        });\n\n        availableItems.forEach((item: any) => {\n          const variantId = getVariantId(item);\n          const key = reviewKey(orderId, variantId);\n          if (seen.has(key)) return;\n          seen.add(key);\n\n          const variantData = item.productVariantData || item.variant;\n          // productId used to look up the fetched product image/name maps\n          const lookupProductId = item.productId || variantData?.productId;\n          const productId = lookupProductId || variantId;\n\n          // Image: variant media first, else the fetched product image (mirrors OrderCard)\n          const variantImg = variantData?.media?.[0]?.file;\n          const isImgPlaceholder = !variantImg || variantImg === '/placeholder.png';\n          const image = isImgPlaceholder\n            ? ((lookupProductId ? productImages?.[lookupProductId] : undefined) || PLACEHOLDER_IMAGE_SRC)\n            : variantImg;\n\n          // Name: title = parent product name, subtitle = variant name (mirrors OrderCard)\n          const variantName = variantData?.name;\n          const productName =\n            variantData?.productName ||\n            (lookupProductId ? productNames?.[lookupProductId] : undefined) ||\n            variantName ||\n            'Product';\n          const category = variantData?.category || variantData?.categoryName || variantData?.type;\n\n          items.push({\n            productId, variantId, orderId, name: productName, variantName, image,\n            review: reviewMap.get(key),\n            orderDate: order.createdAt ? String(order.createdAt) : undefined,\n            category,\n          });\n        });\n      });\n\n    return items;\n  }, [orders, reviewMap, existingProductIds, productImages, productNames]);\n\n  const reviewedCount = useMemo(() => allItems.filter((i) => i.review).length, [allItems]);\n  const filteredItems =\n    filter === 'reviewed' ? allItems.filter((i) => i.review) :\n    filter === 'awaiting' ? allItems.filter((i) => !i.review) :\n    allItems;\n\n  const getItemKey = (item: UnifiedItem) => `${item.orderId}:${item.variantId}`;\n\n  const handleExpand = useCallback((item: UnifiedItem, mode: 'write' | 'edit') => {\n    const key = getItemKey(item);\n    if (expandedKey === key && expandedMode === mode) {\n      setExpandedKey(null);\n      setExpandedMode(null);\n    } else {\n      setExpandedKey(key);\n      setExpandedMode(mode);\n    }\n  }, [expandedKey, expandedMode]);\n\n  const handleFormSuccess = useCallback(() => {\n    setExpandedKey(null);\n    setExpandedMode(null);\n    refetchReviews();\n  }, [refetchReviews]);\n\n  const collapseForm = useCallback(() => {\n    setExpandedKey(null);\n    setExpandedMode(null);\n  }, []);\n\n  const handleDelete = useCallback(async (reviewId: string) => {\n    setDeletingId(reviewId);\n    try {\n      await deleteReview(reviewId);\n      refetchReviews();\n    } finally {\n      setDeletingId(null);\n    }\n  }, [deleteReview, refetchReviews]);\n\n  if (isLoading) {\n    return (\n      <div className=\"p-6\">\n        <div className=\"animate-pulse space-y-4\">\n          <div className=\"h-8 bg-gray-200 rounded w-1/3\" />\n          <div className=\"h-4 bg-gray-100 rounded w-2/3\" />\n          <div className=\"flex gap-3 mt-4\">\n            <div className=\"h-16 w-32 bg-gray-200 rounded-xl\" />\n            <div className=\"h-16 w-36 bg-gray-100 rounded-xl\" />\n          </div>\n          {[1, 2, 3].map((i) => (\n            <div key={i} className=\"h-24 bg-gray-100 rounded-xl\" />\n          ))}\n        </div>\n      </div>\n    );\n  }\n\n  return (\n    <div className=\"space-y-5 overflow-y-auto\">\n      {/* Header */}\n      <div>\n        <h2 className=\"text-3xl font-bold text-hsecondary\">My Reviews</h2>\n        <p className=\"text-sm text-hmuted mt-1\">\n          Review the products you've purchased. Your honest feedback helps other customers.\n        </p>\n      </div>\n\n      {/* Stat Cards */}\n      <div className=\"flex gap-3\">\n        <button\n          onClick={() => setFilter(filter === 'reviewed' ? 'all' : 'reviewed')}\n          className={`flex items-center gap-3 rounded-xl px-4 py-3 transition-colors ${\n            filter === 'reviewed'\n              ? 'border-green-300 bg-green-50 border'\n              : 'border-gray-200 border bg-white hover:border-green-200 hover:bg-green-50/50'\n          }`}\n        >\n          <div className=\"size-10 rounded-full bg-[#10B9811A] flex items-center justify-center shrink-0\">\n            <CheckCircle className=\"size-5 text-[#10B981]\" />\n          </div>\n          <div className=\"text-left\">\n            <p className=\"text-lg sm:text-2xl font-medium text-hsecondary leading-none\">{reviewedCount}</p>\n            <p className=\"text-xs text-hsecondary/40 mt-0.5\">Reviewed</p>\n          </div>\n        </button>\n\n        <button\n          onClick={() => setFilter(filter === 'awaiting' ? 'all' : 'awaiting')}\n          className={`flex items-center gap-3 rounded-xl px-4 py-3 transition-colors ${\n            filter === 'awaiting'\n              ? 'border-amber-300 border bg-amber-50'\n              : 'border-gray-200 border bg-white hover:border-amber-200 hover:bg-amber-50/50'\n          }`}\n        >\n          <div className=\"size-10 rounded-full bg-[#FEF3C6] flex items-center justify-center shrink-0\">\n            <Star className=\"size-5 text-[#E17100]\" />\n          </div>\n          <div className=\"text-left\">\n            <p className=\"text-lg sm:text-2xl font-medium text-hsecondary leading-none\">{allItems.length - reviewedCount}</p>\n            <p className=\"text-xs text-hsecondary/40 mt-0.5\">Awaiting Review</p>\n          </div>\n        </button>\n      </div>\n\n      {/* Items List */}\n      {filteredItems.length === 0 ? (\n        <div className=\"flex flex-col items-center justify-center gap-3 rounded-2xl border border-gray-200 bg-gray-50 py-12 px-6 text-center\">\n          <div className=\"size-14 rounded-full bg-green-100 flex items-center justify-center\">\n            <CheckCircle className=\"size-7 text-green-600\" />\n          </div>\n          <div>\n            <p className=\"font-semibold text-gray-800\">\n              {filter === 'awaiting' ? 'No pending reviews' : filter === 'reviewed' ? 'No reviews yet' : 'All caught up!'}\n            </p>\n            <p className=\"text-sm text-gray-500 mt-0.5\">\n              {filter === 'reviewed'\n                ? 'Start sharing your experience with your purchased products.'\n                : \"You've reviewed all your completed orders.\"}\n            </p>\n          </div>\n        </div>\n      ) : (\n        <div className=\"space-y-3\">\n          {filteredItems.map((item) => {\n            const { review } = item;\n            const itemKey = getItemKey(item);\n            const reviewId = review ? (review as any).id || (review as any)._id : null;\n            const isDeleting = deletingId === reviewId;\n            const isEditMode = expandedKey === itemKey && expandedMode === 'edit';\n            const isWriteMode = expandedKey === itemKey && expandedMode === 'write';\n\n            // Shared product header\n            const productHeader = (\n              <div className=\"flex items-start gap-3 p-4\">\n                {/* Image */}\n                <div className=\"relative w-12 h-12 sm:w-14 sm:h-14 bg-gray-100 rounded-lg shrink-0 overflow-hidden\">\n                  <Image src={item.image || PLACEHOLDER_IMAGE_SRC} alt={item.name} fill className=\"object-cover\" sizes=\"56px\" />\n                </div>\n                {/* Info + Actions */}\n                <div className=\"flex-1 min-w-0\">\n                  <div className=\"flex items-start justify-between gap-2\">\n                    <div className=\"flex-1 min-w-0\">\n                      <p className=\"text-[15px] font-semibold text-hsecondary truncate\">{item.name}</p>\n                      {item.variantName && item.variantName !== item.name && (\n                        <p className=\"text-xs text-hsecondary/60 mt-0.5 truncate\">{item.variantName}</p>\n                      )}\n                      {item.category && (\n                        <p className=\"text-xs text-hsecondary/40 mt-0.5\">{item.category}</p>\n                      )}\n                      <div className=\"flex items-center gap-2 mt-1.5 flex-wrap\">\n                        <span className=\"text-xs text-hsecondary/40\">\n                          Order #{item.orderId.slice(-8).toUpperCase()}\n                          {item.orderDate && ` • ${new Date(item.orderDate).toLocaleDateString('en-US', { month: 'short', day: 'numeric', year: 'numeric' })}`}\n                        </span>\n                        <span className=\"inline-flex items-center gap-1 rounded-full border border-green-200 bg-green-50 px-2 py-0.5 text-[11px] font-medium text-green-700\">\n                          <Check className=\"size-3\" />\n                          Verified\n                        </span>\n                      </div>\n                    </div>\n                    {/* Actions */}\n                    <div className=\"flex items-center gap-1.5 shrink-0\">\n                      <AnimatePresence initial={false}>\n                        {review && !isEditMode && (\n                          <motion.div\n                            key=\"edit-btns\"\n                            initial={{ opacity: 0, scale: 0.9 }}\n                            animate={{ opacity: 1, scale: 1 }}\n                            exit={{ opacity: 0, scale: 0.9 }}\n                            transition={{ duration: 0.2, ease: 'easeOut' }}\n                            className=\"flex items-center gap-1.5\"\n                          >\n                            <button\n                              onClick={() => handleExpand(item, 'edit')}\n                              className=\"inline-flex items-center gap-1.5 rounded-lg border border-gray-200 bg-white px-2.5 py-1.5 text-xs text-gray-600 hover:bg-gray-50 transition-colors\"\n                            >\n                              <Pencil className=\"size-3.5\" />\n                              Edit\n                            </button>\n                            <button\n                              onClick={() => reviewId && handleDelete(reviewId)}\n                              disabled={isDeleting}\n                              className=\"p-1.5 rounded-lg text-gray-400 hover:text-red-500 hover:bg-red-50 transition-colors disabled:opacity-50\"\n                            >\n                              {isDeleting ? <Loader2 className=\"size-3.5 animate-spin\" /> : <Trash2 className=\"size-4\" />}\n                            </button>\n                          </motion.div>\n                        )}\n                      </AnimatePresence>\n                      <AnimatePresence initial={false}>\n                        {!review && !isWriteMode && (\n                          <motion.div\n                            key=\"review-btn\"\n                            initial={{ opacity: 0, scale: 0.9 }}\n                            animate={{ opacity: 1, scale: 1 }}\n                            exit={{ opacity: 0, scale: 0.9 }}\n                            transition={{ duration: 0.2, ease: 'easeOut' }}\n                          >\n                            <button\n                              onClick={() => handleExpand(item, 'write')}\n                              className=\"inline-flex items-center gap-1.5 rounded-full bg-hsecondary px-3 py-2 text-xs font-medium text-white hover:bg-hsecondary/90 transition-colors whitespace-nowrap\"\n                            >\n                              <Star className=\"size-3.5\" />\n                              <span className=\"hidden sm:inline\">Review This Product</span>\n                              <span className=\"sm:hidden\">Review</span>\n                            </button>\n                          </motion.div>\n                        )}\n                      </AnimatePresence>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            );\n\n            // ── Reviewed card ──\n            if (review) {\n              return (\n                <div\n                  key={itemKey}\n                  className=\"rounded-xl border border-gray-200 bg-white shadow-sm overflow-hidden\"\n                >\n                  {productHeader}\n                  <div className=\"border-t border-gray-100\" />\n                  <AnimatePresence mode=\"wait\" initial={false}>\n                    {isEditMode ? (\n                      <motion.div\n                        key=\"edit\"\n                        initial={{ height: 0, opacity: 0 }}\n                        animate={{ height: 'auto', opacity: 1 }}\n                        exit={{ height: 0, opacity: 0 }}\n                        transition={{ duration: 0.3, ease: [0.04, 0.62, 0.23, 0.98] }}\n                        style={{ overflow: 'hidden' }}\n                      >\n                        <div className=\"bg-gray-50 p-4 sm:p-5 rounded-xl m-3 sm:m-6\">\n                          <h3 className=\"font-semibold text-gray-900 mb-5\">Edit your review</h3>\n                          <ReviewForm\n                            productId={item.productId}\n                            productVariantId={item.variantId}\n                            orderId={item.orderId}\n                            reviewId={reviewId}\n                            initialValues={{\n                              rating: review.rating,\n                              reviewType: (review as any).reviewType,\n                              review: review.review,\n                            }}\n                            onSuccess={handleFormSuccess}\n                            onCancel={collapseForm}\n                          />\n                        </div>\n                      </motion.div>\n                    ) : (\n                      <motion.div\n                        key=\"review\"\n                        initial={{ opacity: 0 }}\n                        animate={{ opacity: 1 }}\n                        exit={{ opacity: 0 }}\n                        transition={{ duration: 0.2 }}\n                      >\n                        <div className=\"p-4 pt-3\">\n                          <div className=\"flex items-center gap-2 mb-2\">\n                            <StarRating rating={review.rating} size=\"sm\" />\n                            <span className=\"text-gray-300 text-xs\">•</span>\n                            {review.createdAt && (\n                              <span className=\"text-xs text-hsecondary/40\">\n                                {new Date(review.createdAt).toLocaleDateString('en-US', { month: 'long', day: 'numeric', year: 'numeric' })}\n                              </span>\n                            )}\n                          </div>\n                          {(review as any).title && (\n                            <p className=\"text-sm font-semibold text-gray-900 mb-1\">{(review as any).title}</p>\n                          )}\n                          <p className=\"text-sm text-gray-600 leading-relaxed\">{review.review}</p>\n                        </div>\n                      </motion.div>\n                    )}\n                  </AnimatePresence>\n                </div>\n              );\n            }\n\n            // ── Unreviewed card ──\n            return (\n              <div\n                key={itemKey}\n                className=\"rounded-xl border border-gray-200 bg-white shadow-sm overflow-hidden\"\n              >\n                {productHeader}\n                <div className=\"border-t border-gray-100\" />\n                <AnimatePresence mode=\"wait\" initial={false}>\n                  {isWriteMode ? (\n                    <motion.div\n                      key=\"form\"\n                      initial={{ height: 0, opacity: 0 }}\n                      animate={{ height: 'auto', opacity: 1 }}\n                      exit={{ height: 0, opacity: 0 }}\n                      transition={{ duration: 0.3, ease: [0.04, 0.62, 0.23, 0.98] }}\n                      style={{ overflow: 'hidden' }}\n                    >\n                      <div className=\"bg-gray-50 p-4 sm:p-5 rounded-xl m-3 sm:m-6\">\n                        <h3 className=\"font-semibold text-gray-900 mb-5\">Write your review</h3>\n                        <ReviewForm\n                          productId={item.productId}\n                          productVariantId={item.variantId}\n                          orderId={item.orderId}\n                          onSuccess={handleFormSuccess}\n                          onCancel={collapseForm}\n                        />\n                      </div>\n                    </motion.div>\n                  ) : (\n                    <motion.div\n                      key=\"empty\"\n                      initial={{ opacity: 0 }}\n                      animate={{ opacity: 1 }}\n                      exit={{ opacity: 0 }}\n                      transition={{ duration: 0.2 }}\n                    >\n                      <div className=\"p-4 pt-3 flex items-center gap-2\">\n                        <StarRating rating={0} size=\"sm\" />\n                        <span className=\"text-xs text-gray-400\">Not yet reviewed</span>\n                      </div>\n                    </motion.div>\n                  )}\n                </AnimatePresence>\n              </div>\n            );\n\n          })}\n        </div>\n      )}\n    </div>\n  );\n}\n","'use client';\n\nimport { useQuery, useMutation } from '@tanstack/react-query';\nimport { AXIOS_CONFIG } from '@/lib/Apis/wrapper';\nimport { ServiceFormsApi } from '@/lib/Apis/apis/service-forms-api';\nimport {\n  ServiceForm,\n  ServiceFormCategoryEnum,\n  ServiceConsentTemplate,\n  CreateSubmissionDto,\n  ServiceSubmission,\n} from '@/lib/Apis/models';\n\nconst api = () => new ServiceFormsApi(AXIOS_CONFIG);\n\n// The generated `getSlots` is typed `AxiosResponse<void>`, so we describe the\n// real payload here and cast at the call site.\nexport interface VaccineSlot {\n  time: string;\n  isBooked: boolean;\n}\nexport interface SlotsResult {\n  date: string;\n  slots: VaccineSlot[];\n}\n\n// ── Plain async helpers (use anywhere, e.g. a home-screen banner) ────────────────\n\n/**\n * Fetch the store's active shared-consent vaccines (the ones bookable together in\n * one visit through the shared questionnaire). Framework-agnostic — call it from\n * a banner, a server action, an effect, anywhere. The store key is injected\n * automatically by the shared axios config.\n */\nexport async function fetchVaccines(): Promise<ServiceForm[]> {\n  const res = await api().getPublicForms(ServiceFormCategoryEnum.Vaccine, {\n    params: { shared: 'true' },\n  });\n  // Defensive client-side filter in case the API predates the `shared` param.\n  return (res.data ?? []).filter((v) => v.usesSharedForm !== false);\n}\n\n/**\n * Fetch the store's custom-form vaccines. Each carries its own questionnaire and\n * booking schedule, so they're booked one at a time through their own flow.\n */\nexport async function fetchCustomVaccines(): Promise<ServiceForm[]> {\n  const res = await api().getPublicForms(ServiceFormCategoryEnum.Vaccine, {\n    params: { shared: 'false' },\n  });\n  return (res.data ?? []).filter((v) => v.usesSharedForm === false);\n}\n\n/** Fetch a single service form (e.g. a custom vaccine) with its fields. */\nexport async function fetchVaccineForm(id: string): Promise<ServiceForm> {\n  const res = await api().getForm(id);\n  return res.data;\n}\n\nexport async function fetchConsentTemplate(): Promise<ServiceConsentTemplate> {\n  const res = await api().getConsentTemplate();\n  return res.data;\n}\n\nexport async function submitVaccineConsent(body: CreateSubmissionDto): Promise<ServiceSubmission> {\n  const res = await api().createSubmission(body);\n  return res.data;\n}\n\n// ── React Query hooks ───────────────────────────────────────────────────────────\n\nconst VACCINES_KEY = ['vaccines'] as const;\nconst CUSTOM_VACCINES_KEY = ['custom-vaccines'] as const;\n\nexport function useVaccines() {\n  const { data, isLoading, error, refetch } = useQuery({\n    queryKey: VACCINES_KEY,\n    queryFn: fetchVaccines,\n    staleTime: 5 * 60 * 1000,\n  });\n\n  return {\n    vaccines: data ?? [],\n    isLoading,\n    error: error as Error | null,\n    refetch,\n  };\n}\n\n/** Custom-form vaccines — each booked through its own questionnaire. */\nexport function useCustomVaccines() {\n  const { data, isLoading, error, refetch } = useQuery({\n    queryKey: CUSTOM_VACCINES_KEY,\n    queryFn: fetchCustomVaccines,\n    staleTime: 5 * 60 * 1000,\n  });\n\n  return {\n    vaccines: data ?? [],\n    isLoading,\n    error: error as Error | null,\n    refetch,\n  };\n}\n\n/** A single vaccine form (with fields + schedule), e.g. for the custom booking flow. */\nexport function useVaccineForm(id?: string) {\n  const { data, isLoading, error } = useQuery({\n    queryKey: ['vaccine-form', id],\n    queryFn: () => fetchVaccineForm(id!),\n    enabled: !!id,\n    staleTime: 5 * 60 * 1000,\n  });\n\n  return {\n    form: data ?? null,\n    isLoading,\n    error: error as Error | null,\n  };\n}\n\nexport function useConsentTemplate() {\n  const { data, isLoading, error } = useQuery({\n    queryKey: ['vaccine-consent-template'],\n    queryFn: fetchConsentTemplate,\n    staleTime: 5 * 60 * 1000,\n  });\n\n  return {\n    template: data ?? null,\n    isLoading,\n    error: error as Error | null,\n  };\n}\n\n/**\n * Available booking slots for a vaccine on a date. Pass the shared visit duration so\n * slot length matches a vaccine visit regardless of how many vaccines are selected.\n */\nexport function useVaccineSlots(formId?: string, date?: string, duration?: number) {\n  const { data, isLoading, error, refetch } = useQuery<SlotsResult>({\n    queryKey: ['vaccine-slots', formId, date, duration],\n    queryFn: () =>\n      api()\n        .getSlots(formId!, date!, String(duration ?? ''))\n        .then((r) => r.data as unknown as SlotsResult),\n    enabled: !!formId && !!date,\n    staleTime: 30 * 1000,\n  });\n\n  return {\n    slots: data?.slots ?? [],\n    isLoading,\n    error: error as Error | null,\n    refetch,\n  };\n}\n\nexport function useSubmitVaccineConsent() {\n  return useMutation({\n    mutationFn: (body: CreateSubmissionDto) => submitVaccineConsent(body),\n  });\n}\n","'use client';\n\nimport React from 'react';\nimport { motion } from 'framer-motion';\nimport { Check } from 'lucide-react';\n\nexport interface WizardStep {\n  key: string;\n  label: string;\n  icon?: React.ReactNode;\n}\n\ninterface VaccineStepperProps {\n  steps: WizardStep[];\n  currentIndex: number;\n  onStepClick?: (index: number) => void;\n}\n\n// Generic, theme-aware progress stepper for the booking wizard. Uses the active\n// pharmacy's secondary color via the `hsecondary` dynamic tokens.\nexport function VaccineStepper({ steps, currentIndex, onStepClick }: VaccineStepperProps) {\n  return (\n    <div className=\"w-full\">\n      <div className=\"flex items-center justify-between\">\n        {steps.map((step, index) => {\n          const isActive = index === currentIndex;\n          const isCompleted = index < currentIndex;\n          const isAccessible = index <= currentIndex;\n\n          return (\n            <React.Fragment key={step.key}>\n              <div className=\"flex shrink-0 flex-col items-center\">\n                <motion.button\n                  type=\"button\"\n                  onClick={() => isAccessible && onStepClick?.(index)}\n                  disabled={!isAccessible}\n                  className={`relative flex h-10 w-10 items-center justify-center rounded-full border-2 transition-all duration-300 sm:h-11 sm:w-11\n                    ${isActive\n                      ? 'border-hsecondary-500 bg-hsecondary-500 text-white shadow-lg'\n                      : isCompleted\n                        ? 'border-hsecondary-500 bg-hsecondary-500 text-white'\n                        : 'border-gray-200 bg-white text-gray-400'}\n                    ${isAccessible && !isActive ? 'hover:border-hsecondary-500/50 cursor-pointer' : ''}\n                    ${!isAccessible ? 'cursor-not-allowed' : ''}`}\n                  whileHover={isAccessible ? { scale: 1.05 } : {}}\n                  whileTap={isAccessible ? { scale: 0.95 } : {}}\n                  animate={{ scale: isActive ? 1.08 : 1 }}\n                >\n                  {isCompleted ? (\n                    <motion.span initial={{ scale: 0 }} animate={{ scale: 1 }} transition={{ type: 'spring', stiffness: 500, damping: 30 }}>\n                      <Check className=\"h-5 w-5\" />\n                    </motion.span>\n                  ) : (\n                    step.icon ?? <span className=\"text-sm font-semibold\">{index + 1}</span>\n                  )}\n                </motion.button>\n                <span className={`mt-2 hidden text-xs font-medium transition-colors sm:block ${isActive || isCompleted ? 'text-hsecondary-600' : 'text-gray-400'}`}>\n                  {step.label}\n                </span>\n              </div>\n\n              {index < steps.length - 1 && (\n                <div className=\"mx-1 min-w-0 flex-1 sm:mx-3\">\n                  <div className=\"h-0.5 w-full rounded-full bg-gray-100\">\n                    <motion.div\n                      className=\"h-full rounded-full bg-hsecondary-500\"\n                      initial={{ width: '0%' }}\n                      animate={{ width: index < currentIndex ? '100%' : '0%' }}\n                      transition={{ duration: 0.4, ease: 'easeInOut' }}\n                    />\n                  </div>\n                </div>\n              )}\n            </React.Fragment>\n          );\n        })}\n      </div>\n      {/* Mobile: show only the current step label */}\n      <p className=\"mt-3 text-center text-sm font-medium text-gray-700 sm:hidden\">{steps[currentIndex]?.label}</p>\n    </div>\n  );\n}\n","'use client';\n\nimport React, { useEffect, useRef, useState, useCallback } from 'react';\nimport { Eraser } from 'lucide-react';\nimport { useTheme } from '@/providers/ThemeProvider';\n\ninterface SignaturePadProps {\n  value?: string;\n  onChange: (dataUrl: string) => void;\n  height?: number;\n}\n\n// Dependency-free signature pad on a <canvas>. The ink color follows the active\n// pharmacy theme so signatures match the brand.\nexport function SignaturePad({ value, onChange, height = 170 }: SignaturePadProps) {\n  const { config } = useTheme();\n  const inkColor = config.colors.primaryDark || config.colors.primary || '#1f2a63';\n\n  const canvasRef = useRef<HTMLCanvasElement | null>(null);\n  const drawing = useRef(false);\n  const lastPoint = useRef<{ x: number; y: number } | null>(null);\n  const [hasInk, setHasInk] = useState(Boolean(value));\n\n  const setupCanvas = useCallback(() => {\n    const canvas = canvasRef.current;\n    if (!canvas) return;\n    const ratio = window.devicePixelRatio || 1;\n    const rect = canvas.getBoundingClientRect();\n    canvas.width = rect.width * ratio;\n    canvas.height = rect.height * ratio;\n    const ctx = canvas.getContext('2d');\n    if (!ctx) return;\n    ctx.scale(ratio, ratio);\n    ctx.lineWidth = 2.2;\n    ctx.lineCap = 'round';\n    ctx.lineJoin = 'round';\n    ctx.strokeStyle = inkColor;\n  }, [inkColor]);\n\n  useEffect(() => {\n    setupCanvas();\n    window.addEventListener('resize', setupCanvas);\n    return () => window.removeEventListener('resize', setupCanvas);\n  }, [setupCanvas]);\n\n  const pointFromEvent = (e: React.PointerEvent<HTMLCanvasElement>) => {\n    const rect = e.currentTarget.getBoundingClientRect();\n    return { x: e.clientX - rect.left, y: e.clientY - rect.top };\n  };\n\n  const start = (e: React.PointerEvent<HTMLCanvasElement>) => {\n    e.currentTarget.setPointerCapture(e.pointerId);\n    drawing.current = true;\n    lastPoint.current = pointFromEvent(e);\n  };\n\n  const move = (e: React.PointerEvent<HTMLCanvasElement>) => {\n    if (!drawing.current) return;\n    const ctx = canvasRef.current?.getContext('2d');\n    const p = pointFromEvent(e);\n    if (!ctx || !lastPoint.current) return;\n    ctx.beginPath();\n    ctx.moveTo(lastPoint.current.x, lastPoint.current.y);\n    ctx.lineTo(p.x, p.y);\n    ctx.stroke();\n    lastPoint.current = p;\n    if (!hasInk) setHasInk(true);\n  };\n\n  const end = () => {\n    if (!drawing.current) return;\n    drawing.current = false;\n    lastPoint.current = null;\n    const canvas = canvasRef.current;\n    if (canvas) onChange(canvas.toDataURL('image/png'));\n  };\n\n  const clear = () => {\n    const canvas = canvasRef.current;\n    const ctx = canvas?.getContext('2d');\n    if (!canvas || !ctx) return;\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n    setHasInk(false);\n    onChange('');\n  };\n\n  return (\n    <div className=\"space-y-2\">\n      <div className=\"relative rounded-xl border border-gray-200 bg-white\">\n        <canvas\n          ref={canvasRef}\n          style={{ height, touchAction: 'none' }}\n          className=\"w-full cursor-crosshair rounded-xl\"\n          onPointerDown={start}\n          onPointerMove={move}\n          onPointerUp={end}\n          onPointerLeave={end}\n        />\n        {!hasInk && (\n          <span className=\"pointer-events-none absolute inset-0 flex items-center justify-center text-sm text-gray-400\">\n            Sign here\n          </span>\n        )}\n        <div className=\"pointer-events-none absolute bottom-4 left-5 right-5 border-b border-dashed border-gray-300\" />\n      </div>\n      <div className=\"flex justify-end\">\n        <button\n          type=\"button\"\n          onClick={clear}\n          className=\"inline-flex h-8 items-center gap-1.5 rounded-full px-3 text-xs text-gray-500 transition-colors hover:bg-gray-100 hover:text-gray-700\"\n        >\n          <Eraser className=\"h-3.5 w-3.5\" /> Clear\n        </button>\n      </div>\n    </div>\n  );\n}\n","'use client';\n\nimport React, { useRef } from 'react';\nimport { ImagePlus, X } from 'lucide-react';\n\nexport interface UploadedPhoto {\n  id: string;\n  name: string;\n  dataUrl: string;\n}\n\ninterface PhotoUploadProps {\n  photos: UploadedPhoto[];\n  onChange: (photos: UploadedPhoto[]) => void;\n  max?: number;\n  hint?: string;\n}\n\nconst readAsDataUrl = (file: File) =>\n  new Promise<string>((resolve, reject) => {\n    const reader = new FileReader();\n    reader.onload = () => resolve(reader.result as string);\n    reader.onerror = reject;\n    reader.readAsDataURL(file);\n  });\n\n// Photo capture (e.g. insurance card / ID). Kept as base64 in form state.\nexport function PhotoUpload({ photos, onChange, max = 4, hint }: PhotoUploadProps) {\n  const inputRef = useRef<HTMLInputElement | null>(null);\n\n  const handleFiles = async (files: FileList | null) => {\n    if (!files?.length) return;\n    const room = Math.max(0, max - photos.length);\n    const incoming = Array.from(files).slice(0, room);\n    const added = await Promise.all(\n      incoming.map(async (file) => ({\n        id: `${file.name}-${Date.now()}-${Math.random().toString(36).slice(2, 7)}`,\n        name: file.name,\n        dataUrl: await readAsDataUrl(file),\n      })),\n    );\n    onChange([...photos, ...added]);\n    if (inputRef.current) inputRef.current.value = '';\n  };\n\n  const remove = (id: string) => onChange(photos.filter((p) => p.id !== id));\n\n  return (\n    <div className=\"space-y-3\">\n      <div className=\"flex flex-wrap gap-3\">\n        {photos.map((photo) => (\n          <div key={photo.id} className=\"group relative h-24 w-24 overflow-hidden rounded-xl border border-gray-200\">\n            {/* eslint-disable-next-line @next/next/no-img-element */}\n            <img src={photo.dataUrl} alt={photo.name} className=\"h-full w-full object-cover\" />\n            <button\n              type=\"button\"\n              onClick={() => remove(photo.id)}\n              className=\"absolute right-1 top-1 flex h-5 w-5 items-center justify-center rounded-full bg-white/90 text-gray-500 shadow-sm transition-colors hover:text-red-500\"\n              aria-label={`Remove ${photo.name}`}\n            >\n              <X className=\"h-3 w-3\" />\n            </button>\n          </div>\n        ))}\n\n        {photos.length < max && (\n          <button\n            type=\"button\"\n            onClick={() => inputRef.current?.click()}\n            className=\"flex h-24 w-24 flex-col items-center justify-center gap-1 rounded-xl border border-dashed border-gray-300 text-gray-400 transition-colors hover:border-hprimary-400 hover:bg-hprimary-50 hover:text-hprimary-600\"\n          >\n            <ImagePlus className=\"h-5 w-5\" />\n            <span className=\"text-xs\">Add photo</span>\n          </button>\n        )}\n      </div>\n      <input ref={inputRef} type=\"file\" accept=\"image/*\" multiple className=\"hidden\" onChange={(e) => handleFiles(e.target.files)} />\n      {hint && <p className=\"text-xs text-gray-500\">{hint}</p>}\n    </div>\n  );\n}\n","'use client';\n\nimport React, { useState } from 'react';\nimport { Check } from 'lucide-react';\nimport { ServiceFormField, ServiceFormFieldTypeEnum } from '@/lib/Apis/models';\n\n// ── Field classification (template is fully admin-defined, so we group by type) ──\n\n// Signature/photo are handled by the template's dedicated signatureShown /\n// photoShown flags. The builder collapses them to \"text\" when saving, so we\n// keep them out of the questionnaire by a narrow label heuristic.\nconst SIGN_PHOTO_RE = /signature|sign here|^photo|upload|insurance card|\\bid card\\b/i;\nconst SIGN_RE = /signature|sign here/i;\nconst PHOTO_RE = /^photo|upload|insurance card|\\bid card\\b/i;\n\nexport function isHandledSeparately(field: ServiceFormField): boolean {\n  return field.type === ServiceFormFieldTypeEnum.Text && SIGN_PHOTO_RE.test(field.label || '');\n}\n\n// Custom forms carry signature/photo as collapsed \"text\" fields (the builder\n// flattens them on save), so the booking flow finds them by label to render the\n// dedicated SignaturePad / PhotoUpload controls.\nexport function findSignatureField(fields: ServiceFormField[]): ServiceFormField | undefined {\n  return fields.find(\n    (f) => f.type === ServiceFormFieldTypeEnum.Text && SIGN_RE.test(f.label || ''),\n  );\n}\n\nexport function findPhotoField(fields: ServiceFormField[]): ServiceFormField | undefined {\n  return fields.find(\n    (f) => f.type === ServiceFormFieldTypeEnum.Text && PHOTO_RE.test(f.label || ''),\n  );\n}\n\n// Split the details fields into labelled sections so a long form reads as a few\n// short, scannable blocks. Purely heuristic, so it stays template-driven.\nconst ADDRESS_RE = /address|street|\\bcity\\b|\\bstate\\b|\\bzip\\b|postal|country|apartment|\\bapt\\b|\\bsuite\\b|province|county/i;\nconst ADDITIONAL_RE = /note|comment|reason|additional|anything else|other info|how did you hear/i;\n\nexport interface DetailSection {\n  key: 'personal' | 'address' | 'additional';\n  title: string;\n  fields: ServiceFormField[];\n}\n\nfunction detailSectionKey(f: ServiceFormField): DetailSection['key'] {\n  if (f.type === ServiceFormFieldTypeEnum.Textarea || ADDITIONAL_RE.test(f.label || '')) return 'additional';\n  if (ADDRESS_RE.test(f.label || '')) return 'address';\n  return 'personal';\n}\n\nexport function groupDetailSections(details: ServiceFormField[]): DetailSection[] {\n  const meta: { key: DetailSection['key']; title: string }[] = [\n    { key: 'personal', title: 'Personal info' },\n    { key: 'address', title: 'Address' },\n    { key: 'additional', title: 'Additional info' },\n  ];\n  return meta\n    .map((m) => ({ ...m, fields: details.filter((f) => detailSectionKey(f) === m.key) }))\n    .filter((s) => s.fields.length > 0);\n}\n\n// In the 2-column details grid, long fields take the full width; short ones\n// (age, gender, city, state, zip, dates…) sit two-per-row. Heuristic so it stays\n// fully template-driven without hardcoding specific questions.\nconst FULL_WIDTH_RE = /name|address|street|provider|email|notes?|reason|comment|description|vaccine/i;\nexport function isFullWidthField(field: ServiceFormField): boolean {\n  if (field.type === ServiceFormFieldTypeEnum.Textarea) return true;\n  if (field.type === ServiceFormFieldTypeEnum.Email || field.type === ServiceFormFieldTypeEnum.Phone) return true;\n  return FULL_WIDTH_RE.test(field.label || '');\n}\n\nconst SCREENING_TYPES = new Set<string>([\n  ServiceFormFieldTypeEnum.Radio,\n  ServiceFormFieldTypeEnum.Checkbox,\n]);\n\n// \"Vaccine(s) to be given today\" is already answered in step 1 (vaccine selection),\n// so it's auto-filled and hidden from the questionnaire rather than re-asked.\nconst TEXTUAL_TYPES = new Set<string>([\n  ServiceFormFieldTypeEnum.Text,\n  ServiceFormFieldTypeEnum.Select,\n  ServiceFormFieldTypeEnum.Textarea,\n]);\nexport function isVaccinesTodayField(field: ServiceFormField): boolean {\n  return TEXTUAL_TYPES.has(field.type) && /vaccin/i.test(field.label || '');\n}\n\nexport interface GroupedFields {\n  details: ServiceFormField[];\n  screening: ServiceFormField[];\n}\n\nexport function groupFields(fields: ServiceFormField[]): GroupedFields {\n  const usable = (fields ?? []).filter(\n    (f) => !isHandledSeparately(f) && !isVaccinesTodayField(f),\n  );\n  return {\n    details: usable.filter((f) => !SCREENING_TYPES.has(f.type)),\n    screening: usable.filter((f) => SCREENING_TYPES.has(f.type)),\n  };\n}\n\n// A \"yes/no\" screening field is a radio with Yes/No options. Answering \"yes\"\n// flags it for soft pharmacist review.\nexport function isYesNo(field: ServiceFormField): boolean {\n  return (\n    field.type === ServiceFormFieldTypeEnum.Radio &&\n    (field.options ?? []).map((o) => o.toLowerCase()).join('|') === 'yes|no'\n  );\n}\n\nexport function flaggedYesNoLabels(\n  fields: ServiceFormField[],\n  formData: Record<string, any>,\n): string[] {\n  return fields\n    .filter((f) => isYesNo(f) && String(formData[f.key] ?? '').toLowerCase() === 'yes')\n    .map((f) => f.label);\n}\n\n// Best-effort contact extraction for the submission's top-level patient fields.\nexport function deriveContact(fields: ServiceFormField[], formData: Record<string, any>) {\n  const find = (pred: (f: ServiceFormField) => boolean) => {\n    const f = fields.find(pred);\n    return f ? String(formData[f.key] ?? '').trim() : '';\n  };\n  const nameField = fields.find(\n    (f) => f.type === ServiceFormFieldTypeEnum.Text && /\\bname\\b/i.test(f.label || ''),\n  );\n  const patientName =\n    (nameField ? String(formData[nameField.key] ?? '').trim() : '') ||\n    find((f) => f.type === ServiceFormFieldTypeEnum.Text);\n  return {\n    patientName,\n    patientPhone: find((f) => f.type === ServiceFormFieldTypeEnum.Phone),\n    patientEmail: find((f) => f.type === ServiceFormFieldTypeEnum.Email),\n  };\n}\n\nexport function missingRequired(fields: ServiceFormField[], formData: Record<string, any>): boolean {\n  return fields.some((f) => {\n    if (!f.required) return false;\n    const v = formData[f.key];\n    if (Array.isArray(v)) return v.length === 0;\n    return v == null || String(v).trim() === '';\n  });\n}\n\n// ── Insurance ────────────────────────────────────────────────────────────────────\n// The insurance step always offers the same four routes; the admin only controls\n// whether the step exists and which fields the \"I have my details\" route asks for.\n// Answers ride in the same formData map under these canonical keys.\nexport type InsuranceChoice = 'details' | 'photo' | 'bring' | 'none';\n\nexport const INSURANCE_CHOICE_KEY = 'insuranceOption';\nexport const INSURANCE_PHOTOS_KEY = 'insurancePhotos';\n\nexport const INSURANCE_CHOICES: { value: InsuranceChoice; label: string; hint: string }[] = [\n  { value: 'details', label: 'I have my insurance details', hint: 'Type the codes from your card' },\n  { value: 'photo',   label: 'Upload my insurance card',    hint: 'Add a photo of the front and back' },\n  { value: 'bring',   label: 'I’ll bring my card with me',  hint: 'We’ll scan it when you arrive' },\n  { value: 'none',    label: 'I don’t have insurance',      hint: 'You can still book your visit' },\n];\n\nexport function insuranceChoiceLabel(value: unknown): string {\n  return INSURANCE_CHOICES.find((c) => c.value === value)?.label ?? '';\n}\n\n// ── Renderer ─────────────────────────────────────────────────────────────────────\n\ninterface ConsentFieldProps {\n  field: ServiceFormField;\n  value: any;\n  onChange: (value: any) => void;\n  invalid?: boolean;\n}\n\nconst inputBase =\n  'w-full rounded-xl border bg-white px-3.5 py-2.5 text-sm text-gray-900 outline-none transition-colors placeholder:text-gray-400 focus:border-hprimary-500 focus:ring-2 focus:ring-hprimary-500/20';\n\nexport function ConsentField({ field, value, onChange, invalid }: ConsentFieldProps) {\n  const [touched, setTouched] = useState(false);\n  const borderClass = invalid ? 'border-red-300' : 'border-gray-200';\n  const T = ServiceFormFieldTypeEnum;\n\n  const label = (\n    <label className=\"mb-1.5 block text-sm font-medium text-gray-700\">\n      {field.label}\n      {field.required && <span className=\"ml-0.5 text-red-500\">*</span>}\n    </label>\n  );\n\n  // Yes / No\n  if (isYesNo(field)) {\n    return (\n      <div>\n        {label}\n        <div className=\"flex gap-2\">\n          {['Yes', 'No'].map((opt) => {\n            const selected = String(value ?? '').toLowerCase() === opt.toLowerCase();\n            return (\n              <button\n                key={opt}\n                type=\"button\"\n                onClick={() => onChange(opt.toLowerCase())}\n                className={`flex-1 rounded-xl border px-4 py-2.5 text-sm font-medium transition-all\n                  ${selected\n                    ? 'border-hsecondary-500 bg-hsecondary-500 text-white shadow-sm'\n                    : 'border-gray-200 bg-white text-gray-600 hover:border-hsecondary-400'}`}\n              >\n                {opt}\n              </button>\n            );\n          })}\n        </div>\n      </div>\n    );\n  }\n\n  // Multi-select checkbox group\n  if (field.type === T.Checkbox) {\n    const arr: string[] = Array.isArray(value) ? value : [];\n    const toggle = (opt: string) =>\n      onChange(arr.includes(opt) ? arr.filter((o) => o !== opt) : [...arr, opt]);\n    return (\n      <div>\n        {label}\n        <div className=\"grid grid-cols-1 gap-2 sm:grid-cols-2\">\n          {(field.options ?? []).map((opt) => {\n            const checked = arr.includes(opt);\n            return (\n              <button\n                key={opt}\n                type=\"button\"\n                onClick={() => toggle(opt)}\n                className={`flex items-center gap-2.5 rounded-xl border px-3.5 py-2.5 text-left text-sm transition-all\n                  ${checked ? 'border-hprimary-500 bg-hprimary-50 text-gray-900' : 'border-gray-200 bg-white text-gray-600 hover:border-hprimary-300'}`}\n              >\n                <span className={`flex h-4.5 w-4.5 shrink-0 items-center justify-center rounded-md border transition-colors ${checked ? 'border-hprimary-500 bg-hprimary-500 text-white' : 'border-gray-300 bg-white'}`}>\n                  {checked && <Check className=\"h-3 w-3\" />}\n                </span>\n                {opt}\n              </button>\n            );\n          })}\n        </div>\n      </div>\n    );\n  }\n\n  // Single-select dropdown / radio (non Yes-No)\n  if (field.type === T.Select || field.type === T.Radio) {\n    return (\n      <div>\n        {label}\n        <select\n          value={value ?? ''}\n          onChange={(e) => onChange(e.target.value)}\n          className={`${inputBase} ${borderClass} appearance-none`}\n        >\n          <option value=\"\" disabled>Select…</option>\n          {(field.options ?? []).map((opt) => (\n            <option key={opt} value={opt}>{opt}</option>\n          ))}\n        </select>\n      </div>\n    );\n  }\n\n  if (field.type === T.Textarea) {\n    return (\n      <div>\n        {label}\n        <textarea\n          value={value ?? ''}\n          onChange={(e) => onChange(e.target.value)}\n          placeholder={field.placeholder}\n          rows={3}\n          className={`${inputBase} ${borderClass} resize-none`}\n        />\n      </div>\n    );\n  }\n\n  // Zip / numeric fields arrive as plain \"text\" from the template, so detect them\n  // by label to apply the right keyboard + character restrictions.\n  const labelL = (field.label || '').toLowerCase();\n  const isZip = field.type === T.Text && /\\bzip\\b|postal|post ?code/.test(labelL);\n  const isNumericText = field.type === T.Text && /\\bage\\b|\\bquantity\\b|how many|number of/.test(labelL);\n\n  const htmlType =\n    field.type === T.Email ? 'email'\n    : field.type === T.Phone ? 'tel'\n    : field.type === T.Date ? 'date'\n    : field.type === T.Time ? 'time'\n    : 'text';\n\n  const inputMode: 'tel' | 'email' | 'numeric' | undefined =\n    field.type === T.Phone ? 'tel'\n    : field.type === T.Email ? 'email'\n    : isZip || isNumericText ? 'numeric'\n    : undefined;\n\n  const autoComplete =\n    field.type === T.Phone ? 'tel'\n    : field.type === T.Email ? 'email'\n    : isZip ? 'postal-code'\n    : /\\bname\\b/.test(labelL) ? 'name'\n    : undefined;\n\n  const maxLength = field.type === T.Phone ? 20 : isZip ? 10 : isNumericText ? 3 : undefined;\n\n  // Block invalid characters as they're typed.\n  const sanitize = (raw: string): string => {\n    if (field.type === T.Phone) return raw.replace(/[^\\d+\\-()\\s]/g, '');\n    if (isZip) return raw.replace(/[^\\d-]/g, '');\n    if (isNumericText) return raw.replace(/\\D/g, '');\n    return raw;\n  };\n\n  // Format feedback once the user leaves the field (only when they've typed something).\n  const strVal = String(value ?? '');\n  const formatError =\n    !touched || strVal.trim() === '' ? ''\n    : field.type === T.Email && !/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/.test(strVal) ? 'Enter a valid email address.'\n    : field.type === T.Phone && strVal.replace(/\\D/g, '').length < 7 ? 'Enter a valid phone number.'\n    : isZip && strVal.replace(/\\D/g, '').length < 5 ? 'Enter a valid ZIP code.'\n    : '';\n\n  return (\n    <div>\n      {label}\n      <input\n        type={htmlType}\n        inputMode={inputMode}\n        autoComplete={autoComplete}\n        maxLength={maxLength}\n        value={value ?? ''}\n        onChange={(e) => onChange(sanitize(e.target.value))}\n        onBlur={() => setTouched(true)}\n        placeholder={field.placeholder}\n        className={`${inputBase} ${formatError ? 'border-red-300' : borderClass}`}\n      />\n      {formatError && <p className=\"mt-1.5 text-xs text-red-500\">{formatError}</p>}\n    </div>\n  );\n}\n","'use client';\n\nimport React from 'react';\nimport { BadgeCheck } from 'lucide-react';\n\n// \"Free with most insurance\" reassurance shown in the booking flow (start +\n// confirm steps), mirroring how major pharmacies present vaccine pricing.\nexport function InsuranceDisclaimer({ className = '' }: { className?: string }) {\n  return (\n    <div\n      className={`flex items-start gap-2.5 rounded-xl border border-emerald-100 bg-emerald-50 px-4 py-3 ${className}`}\n    >\n      <BadgeCheck className=\"mt-0.5 h-4 w-4 shrink-0 text-emerald-600\" />\n      <p className=\"text-sm leading-relaxed text-emerald-800\">\n        <span className=\"font-semibold\">Vaccines are free with most insurance plans.</span>{' '}\n        Just bring your insurance card to your visit — no insurance? Ask us about low-cost options.\n      </p>\n    </div>\n  );\n}\n","'use client';\n\nimport React, { useMemo, useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { format, addDays, startOfToday, getDay } from 'date-fns';\nimport {\n  Syringe, Calendar, User, ClipboardList, PenLine, CheckCircle2, Check,\n  ArrowLeft, ArrowRight, Loader2, AlertTriangle, Clock, ShieldCheck, MapPin, FileText,\n  CreditCard, Camera, Wallet, Ban,\n} from 'lucide-react';\nimport { useTheme } from '@/providers/ThemeProvider';\nimport { useAuth } from '@/providers/AuthProvider';\nimport { useVaccines, useConsentTemplate, useVaccineSlots, useSubmitVaccineConsent } from '@/hooks/useVaccines';\nimport { VaccineStepper, WizardStep } from '@/components/vaccine/VaccineStepper';\nimport { SignaturePad } from '@/components/vaccine/SignaturePad';\nimport { PhotoUpload, UploadedPhoto } from '@/components/vaccine/PhotoUpload';\nimport {\n  ConsentField, groupFields, groupDetailSections, deriveContact, missingRequired,\n  isFullWidthField, isVaccinesTodayField, isYesNo, findSignatureField, findPhotoField,\n  INSURANCE_CHOICES, INSURANCE_CHOICE_KEY, INSURANCE_PHOTOS_KEY, type InsuranceChoice,\n} from '@/components/vaccine/consentFields';\nimport { DayAvailabilityDayEnum } from '@/lib/Apis/models';\nimport { InsuranceDisclaimer } from '@/components/vaccine/InsuranceDisclaimer';\n\nconst WEEKDAY_BY_INDEX: DayAvailabilityDayEnum[] = [\n  DayAvailabilityDayEnum.Sunday, DayAvailabilityDayEnum.Monday, DayAvailabilityDayEnum.Tuesday,\n  DayAvailabilityDayEnum.Wednesday, DayAvailabilityDayEnum.Thursday, DayAvailabilityDayEnum.Friday,\n  DayAvailabilityDayEnum.Saturday,\n];\n\nconst DAYS_AHEAD = 30;\n\nconst INSURANCE_ICON: Record<InsuranceChoice, React.ElementType> = {\n  details: CreditCard,\n  photo: Camera,\n  bring: Wallet,\n  none: Ban,\n};\n\nconst SECTION_ICON: Record<string, React.ReactNode> = {\n  personal: <User className=\"h-4 w-4\" />,\n  address: <MapPin className=\"h-4 w-4\" />,\n  additional: <FileText className=\"h-4 w-4\" />,\n};\n\ninterface BookVaccineScreenProps {\n  /** Called when the user leaves via the back arrow on step 1 (e.g. router.back()). */\n  onExit?: () => void;\n}\n\nexport function BookVaccineScreen({ onExit }: BookVaccineScreenProps) {\n  const { config } = useTheme();\n  const { user } = useAuth();\n  const { vaccines, isLoading: vaccinesLoading } = useVaccines();\n  const { template, isLoading: templateLoading } = useConsentTemplate();\n  const submit = useSubmitVaccineConsent();\n\n  // ── Wizard state ────────────────────────────────────────────────────────────\n  const [stepIndex, setStepIndex] = useState(0);\n  const [selectedIds, setSelectedIds] = useState<string[]>([]);\n  const [date, setDate] = useState('');\n  const [time, setTime] = useState('');\n  const [formData, setFormData] = useState<Record<string, any>>({});\n  const [photos, setPhotos] = useState<UploadedPhoto[]>([]);\n  const [insurancePhotos, setInsurancePhotos] = useState<UploadedPhoto[]>([]);\n  const [signature, setSignature] = useState('');\n  const [certified, setCertified] = useState(false);\n  const [showErrors, setShowErrors] = useState(false);\n  const [submitError, setSubmitError] = useState('');\n  const [done, setDone] = useState<{ names: string[]; date?: string; time?: string } | null>(null);\n\n  // Prefill name/phone/email from the signed-in user, once.\n  React.useEffect(() => {\n    if (!user || !template) return;\n    setFormData((prev) => {\n      if (Object.keys(prev).length) return prev;\n      const seeded: Record<string, any> = {};\n      const fullName = [user.firstname, user.lastname].filter(Boolean).join(' ');\n      for (const f of template.fields ?? []) {\n        if (f.type === 'text' && /\\bname\\b/i.test(f.label) && fullName) seeded[f.key] = fullName;\n        if (f.type === 'phone' && user.phoneNumber) seeded[f.key] = user.phoneNumber;\n        if (f.type === 'email' && user.email) seeded[f.key] = user.email;\n      }\n      return seeded;\n    });\n  }, [user, template]);\n\n  // ── Derived ──────────────────────────────────────────────────────────────────\n  const grouped = useMemo(() => groupFields(template?.fields ?? []), [template]);\n  const detailSections = useMemo(() => groupDetailSections(grouped.details), [grouped.details]);\n  const patientName = useMemo(\n    () => deriveContact(template?.fields ?? [], formData).patientName,\n    [template, formData],\n  );\n  // Insurance is its own admin-managed field list, shown as a dedicated step only\n  // when the shared consent form requires it.\n  const signatureField = useMemo(() => findSignatureField(template?.fields ?? []), [template]);\n  const photoField = useMemo(() => findPhotoField(template?.fields ?? []), [template]);\n  const showSignature = !!template?.signatureShown;\n  const showPhoto = !!template?.photoShown;\n  const signatureRequired = showSignature && !!signatureField?.required;\n  const photoRequired = showPhoto && !!photoField?.required;\n\n  const insuranceOn = !!template?.insuranceShown;\n  const insuranceFields = useMemo(\n    () => (insuranceOn ? template?.insuranceFields ?? [] : []),\n    [insuranceOn, template],\n  );\n  const insuranceChoice = (formData[INSURANCE_CHOICE_KEY] ?? '') as InsuranceChoice | '';\n  const visitDuration = template?.visitDuration ?? 15;\n  const enabledDays = useMemo(\n    () => new Set((template?.days ?? []).filter((d) => d.enabled).map((d) => d.day)),\n    [template],\n  );\n  const hasSchedule = enabledDays.size > 0;\n  const excluded = useMemo(() => new Set(template?.excludedDates ?? []), [template]);\n  const primaryId = selectedIds[0];\n\n  const { slots, isLoading: slotsLoading, refetch: refetchSlots } =\n    useVaccineSlots(primaryId, date, visitDuration);\n\n  const selectedVaccines = useMemo(\n    () => vaccines.filter((v) => selectedIds.includes(v.id)),\n    [vaccines, selectedIds],\n  );\n\n  const availableDates = useMemo(() => {\n    if (!hasSchedule) return [];\n    const out: Date[] = [];\n    const today = startOfToday();\n    for (let i = 0; i < DAYS_AHEAD; i++) {\n      const d = addDays(today, i);\n      const iso = format(d, 'yyyy-MM-dd');\n      if (enabledDays.has(WEEKDAY_BY_INDEX[getDay(d)]) && !excluded.has(iso)) out.push(d);\n    }\n    return out;\n  }, [hasSchedule, enabledDays, excluded]);\n\n  // ── Dynamic steps ──────────────────────────────────────────────────────────────\n  const steps: (WizardStep & { key: StepKey })[] = useMemo(() => {\n    const s: (WizardStep & { key: StepKey })[] = [\n      { key: 'select', label: 'Vaccines', icon: <Syringe className=\"h-5 w-5\" /> },\n    ];\n    if (hasSchedule) s.push({ key: 'schedule', label: 'Time', icon: <Calendar className=\"h-5 w-5\" /> });\n    if (grouped.details.length) s.push({ key: 'details', label: 'Details', icon: <User className=\"h-5 w-5\" /> });\n    if (grouped.screening.length) s.push({ key: 'screening', label: 'Health', icon: <ClipboardList className=\"h-5 w-5\" /> });\n    if (insuranceOn) s.push({ key: 'insurance', label: 'Insurance', icon: <CreditCard className=\"h-5 w-5\" /> });\n    s.push({ key: 'sign', label: 'Sign', icon: <PenLine className=\"h-5 w-5\" /> });\n    s.push({ key: 'confirm', label: 'Confirm', icon: <CheckCircle2 className=\"h-5 w-5\" /> });\n    return s;\n  }, [hasSchedule, grouped.details.length, grouped.screening.length, insuranceOn]);\n\n  const current = steps[Math.min(stepIndex, steps.length - 1)]?.key;\n\n  // ── Step validity ────────────────────────────────────────────────────────────\n  const stepValid = (key: StepKey): boolean => {\n    switch (key) {\n      case 'select': return selectedIds.length > 0;\n      case 'schedule': return !!date && !!time;\n      case 'details': return !missingRequired(grouped.details, formData);\n      case 'screening': return !missingRequired(grouped.screening, formData);\n      case 'insurance':\n        if (!insuranceChoice) return false;\n        if (insuranceChoice === 'details') return !missingRequired(insuranceFields, formData);\n        if (insuranceChoice === 'photo') return insurancePhotos.length > 0;\n        return true;\n      case 'sign':\n        return certified\n          && (!signatureRequired || !!signature)\n          && (!photoRequired || photos.length > 0);\n      case 'confirm': return true;\n      default: return true;\n    }\n  };\n\n  // Human-friendly message shown when the user hits Continue on an invalid step.\n  const stepErrorMessage = (key: StepKey): string => {\n    switch (key) {\n      case 'select': return 'Please select at least one vaccine to continue.';\n      case 'schedule': return !date ? 'Please pick a date for your visit.' : 'Please choose an available time.';\n      case 'insurance':\n        if (!insuranceChoice) return 'Please choose one of the insurance options to continue.';\n        if (insuranceChoice === 'photo') return 'Please add a photo of your insurance card.';\n        return 'Please fill in the required insurance fields highlighted below.';\n      case 'sign':\n        if (photoRequired && photos.length === 0) return 'Please upload the required photo.';\n        if (signatureRequired && !signature) return 'Please add your signature.';\n        return 'Please confirm the certification below to continue.';\n      default: return 'Please fill in the required fields highlighted below.';\n    }\n  };\n\n  const setField = (key: string, value: any) => setFormData((p) => ({ ...p, [key]: value }));\n\n  const goNext = () => {\n    if (!stepValid(current)) {\n      setShowErrors(true);\n      // Bring the error banner / first invalid field into view.\n      if (typeof window !== 'undefined') window.scrollTo({ top: 0, behavior: 'smooth' });\n      return;\n    }\n    setShowErrors(false);\n    setStepIndex((i) => Math.min(i + 1, steps.length - 1));\n  };\n  const goBack = () => {\n    setShowErrors(false);\n    if (stepIndex === 0) { onExit?.(); return; }\n    setStepIndex((i) => i - 1);\n  };\n\n  const handleSubmit = async () => {\n    setSubmitError('');\n    const contact = deriveContact(template?.fields ?? [], formData);\n    const userFullName = [user?.firstname, user?.lastname].filter(Boolean).join(' ');\n    try {\n      // Auto-fill the \"vaccine(s) to be given today\" field from the step-1 selection.\n      const vaccinesStr = selectedVaccines.map((v) => v.name).join(', ');\n      const autoFilled: Record<string, any> = {};\n      for (const f of template?.fields ?? []) {\n        if (isVaccinesTodayField(f)) autoFilled[f.key] = vaccinesStr;\n      }\n\n      // Start from the answers, then drop anything belonging to an insurance route\n      // the patient didn't end on, so the pharmacist never sees stale details from\n      // a route that was filled in and then switched away from.\n      const answers: Record<string, any> = { ...formData };\n      if (insuranceOn && insuranceChoice !== 'details') {\n        for (const f of insuranceFields) delete answers[f.key];\n      }\n      if (insuranceOn && insuranceChoice === 'photo' && insurancePhotos.length) {\n        answers[INSURANCE_PHOTOS_KEY] = insurancePhotos.map((p) => p.dataUrl);\n      }\n\n      await submit.mutateAsync({\n        vaccineIds: selectedIds,\n        patientName: contact.patientName || userFullName || 'Guest',\n        patientEmail: contact.patientEmail || user?.email,\n        patientPhone: contact.patientPhone,\n        formData: {\n          ...answers,\n          ...autoFilled,\n          ...(signature ? { signature } : {}),\n          ...(photos.length ? { photos: photos.map((p) => p.dataUrl) } : {}),\n          certified: true,\n        },\n        ...(hasSchedule && date && time ? { appointmentDate: date, appointmentTime: time } : {}),\n      });\n      setDone({ names: selectedVaccines.map((v) => v.name), date, time });\n    } catch (err: any) {\n      const status = err?.response?.status;\n      if (status === 409) {\n        // Slot was taken between selection and submit — send them back to reschedule.\n        setSubmitError('That time was just booked. Please choose another slot.');\n        setTime('');\n        refetchSlots();\n        const scheduleIdx = steps.findIndex((s) => s.key === 'schedule');\n        if (scheduleIdx >= 0) setStepIndex(scheduleIdx);\n      } else {\n        setSubmitError('Something went wrong submitting your form. Please try again.');\n      }\n    }\n  };\n\n  // ── Loading / success ──────────────────────────────────────────────────────────\n  if (vaccinesLoading || templateLoading) {\n    return (\n      <div className=\"flex min-h-[60vh] items-center justify-center\">\n        <Loader2 className=\"h-6 w-6 animate-spin text-hprimary-500\" />\n      </div>\n    );\n  }\n\n  if (!vaccinesLoading && vaccines.length === 0) {\n    return (\n      <div className=\"mx-auto max-w-md px-4 py-20 text-center\">\n        <div className=\"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-full bg-gray-100\">\n          <Syringe className=\"h-7 w-7 text-gray-400\" />\n        </div>\n        <h2 className=\"text-lg font-semibold text-gray-900\">No vaccines available</h2>\n        <p className=\"mt-1 text-sm text-gray-500\">{config.storeName} isn’t offering vaccinations online right now.</p>\n      </div>\n    );\n  }\n\n  if (done) return <SuccessView done={done} storeName={config.storeName} onExit={onExit} />;\n\n  // ── Layout ──────────────────────────────────────────────────────────────────\n  return (\n    <div className=\"mx-auto max-w-2xl px-4 pb-32 pt-6 sm:pt-8\">\n      <header className=\"mb-6\">\n        <h1 className=\"text-2xl font-bold text-gray-900\">Book a vaccination</h1>\n        <p className=\"mt-0.5 text-sm text-gray-500\">at {config.storeName}</p>\n      </header>\n\n      <div className=\"mb-8\">\n        <VaccineStepper steps={steps} currentIndex={stepIndex} onStepClick={(i) => i < stepIndex && setStepIndex(i)} />\n      </div>\n\n      {showErrors && !stepValid(current) && (\n        <motion.div\n          initial={{ opacity: 0, y: -6 }}\n          animate={{ opacity: 1, y: 0 }}\n          className=\"mb-5 flex items-center gap-2.5 rounded-xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-600\"\n        >\n          <AlertTriangle className=\"h-4 w-4 shrink-0\" />\n          {stepErrorMessage(current)}\n        </motion.div>\n      )}\n\n      <AnimatePresence mode=\"wait\">\n        <motion.div\n          key={current}\n          initial={{ opacity: 0, x: 16 }}\n          animate={{ opacity: 1, x: 0 }}\n          exit={{ opacity: 0, x: -16 }}\n          transition={{ duration: 0.2 }}\n        >\n          {current === 'select' && (\n            <StepShell title=\"Which vaccines?\" subtitle=\"Select all you’d like in one visit.\">\n              <InsuranceDisclaimer className=\"mb-4\" />\n              <div className=\"grid gap-2.5\">\n                {vaccines.map((v) => {\n                  const checked = selectedIds.includes(v.id);\n                  return (\n                    <button\n                      key={v.id}\n                      type=\"button\"\n                      onClick={() => setSelectedIds((ids) => checked ? ids.filter((i) => i !== v.id) : [...ids, v.id])}\n                      className={`flex items-center justify-between gap-3 rounded-2xl border p-4 text-left transition-all\n                        ${checked ? 'border-hprimary-500 bg-hprimary-50 shadow-sm' : 'border-gray-200 bg-white hover:border-hprimary-300'}`}\n                    >\n                      <div className=\"flex items-center gap-3\">\n                        <span className={`flex h-6 w-6 shrink-0 items-center justify-center rounded-lg border transition-colors ${checked ? 'border-hprimary-500 bg-hprimary-500 text-white' : 'border-gray-300 bg-white'}`}>\n                          {checked && <Check className=\"h-3.5 w-3.5\" />}\n                        </span>\n                        <div>\n                          <p className=\"font-medium text-gray-900\">{v.name}</p>\n                          {v.description && <p className=\"text-xs text-gray-500\">{v.description}</p>}\n                        </div>\n                      </div>\n                    </button>\n                  );\n                })}\n              </div>\n            </StepShell>\n          )}\n\n          {current === 'schedule' && (\n            <StepShell title=\"Pick a time\" subtitle={`Choose a slot for your ${visitDuration}-minute visit.`}>\n              <DateStrip dates={availableDates} value={date} onChange={(d) => { setDate(d); setTime(''); }} />\n              {date && (\n                <div className=\"mt-5\">\n                  <p className=\"mb-2 text-sm font-medium text-gray-700\">Available times</p>\n                  {slotsLoading ? (\n                    <div className=\"flex items-center gap-2 py-6 text-sm text-gray-400\">\n                      <Loader2 className=\"h-4 w-4 animate-spin\" /> Loading times…\n                    </div>\n                  ) : slots.filter((s) => !s.isBooked).length === 0 ? (\n                    <p className=\"py-6 text-sm text-gray-500\">No open times this day. Try another date.</p>\n                  ) : (\n                    <div className=\"grid grid-cols-3 gap-2 sm:grid-cols-4\">\n                      {slots.map((s) => (\n                        <button\n                          key={s.time}\n                          type=\"button\"\n                          disabled={s.isBooked}\n                          onClick={() => setTime(s.time)}\n                          className={`rounded-xl border py-2.5 text-sm font-medium transition-all\n                            ${s.isBooked ? 'cursor-not-allowed border-gray-100 bg-gray-50 text-gray-300 line-through'\n                              : time === s.time ? 'border-hsecondary-500 bg-hsecondary-500 text-white shadow-sm'\n                              : 'border-gray-200 bg-white text-gray-700 hover:border-hsecondary-400'}`}\n                        >\n                          {to12h(s.time)}\n                        </button>\n                      ))}\n                    </div>\n                  )}\n                </div>\n              )}\n            </StepShell>\n          )}\n\n          {current === 'details' && (\n            <StepShell title=\"Your details\" subtitle=\"So the pharmacist can prepare your visit.\">\n              <div className=\"space-y-7\">\n                {detailSections.map((section) => (\n                  <div key={section.key} className=\"space-y-4\">\n                    <div className=\"flex items-center gap-2.5\">\n                      <span className=\"text-hsecondary-600\">{SECTION_ICON[section.key]}</span>\n                      <h3 className=\"text-sm font-semibold text-gray-900\">{section.title}</h3>\n                      <span className=\"h-px flex-1 bg-gray-100\" />\n                    </div>\n                    <div className=\"grid grid-cols-1 gap-x-4 gap-y-4 sm:grid-cols-2\">\n                      {section.fields.map((f) => {\n                        const err = showErrors && f.required && isEmpty(formData[f.key]);\n                        return (\n                          <div key={f.key} className={isFullWidthField(f) ? 'sm:col-span-2' : ''}>\n                            <ConsentField\n                              field={f}\n                              value={formData[f.key]}\n                              onChange={(v) => setField(f.key, v)}\n                              invalid={err}\n                            />\n                            {err && <p className=\"mt-1.5 text-xs text-red-500\">This field is required.</p>}\n                          </div>\n                        );\n                      })}\n                    </div>\n                  </div>\n                ))}\n              </div>\n            </StepShell>\n          )}\n\n          {current === 'screening' && (\n            <StepShell title=\"Health screening\" subtitle=\"A few quick questions to confirm it’s safe to vaccinate you today.\">\n              <div className=\"space-y-3\">\n                {grouped.screening.map((f, i) => {\n                  const err = showErrors && f.required && isEmpty(formData[f.key]);\n                  if (isYesNo(f)) {\n                    const val = String(formData[f.key] ?? '').toLowerCase();\n                    return (\n                      <div\n                        key={f.key}\n                        className={`rounded-2xl border p-4 transition-colors\n                          ${err ? 'border-red-300 bg-red-50/40' : 'border-gray-200 bg-white'}`}\n                      >\n                        <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n                          <p className=\"text-sm leading-relaxed text-gray-800\">\n                            <span className=\"mr-1.5 font-semibold text-gray-300\">{i + 1}.</span>\n                            {f.label}\n                            {f.required && <span className=\"text-red-500\"> *</span>}\n                          </p>\n                          <div className=\"flex shrink-0 rounded-full bg-gray-100 p-0.5 sm:ml-4\">\n                            {['Yes', 'No'].map((opt) => {\n                              const selected = val === opt.toLowerCase();\n                              return (\n                                <button\n                                  key={opt}\n                                  type=\"button\"\n                                  onClick={() => setField(f.key, opt.toLowerCase())}\n                                  className={`min-w-[3.5rem] rounded-full px-4 py-1.5 text-sm font-medium transition-all\n                                    ${selected ? 'bg-white text-gray-900 shadow-sm' : 'text-gray-500 hover:text-gray-700'}`}\n                                >\n                                  {opt}\n                                </button>\n                              );\n                            })}\n                          </div>\n                        </div>\n                        {err && <p className=\"mt-2.5 text-xs text-red-500\">Please select an answer.</p>}\n                      </div>\n                    );\n                  }\n                  return (\n                    <div key={f.key} className={`rounded-2xl border p-4 ${err ? 'border-red-300' : 'border-gray-200 bg-white'}`}>\n                      <ConsentField\n                        field={f}\n                        value={formData[f.key]}\n                        onChange={(v) => setField(f.key, v)}\n                        invalid={err}\n                      />\n                      {err && <p className=\"mt-2.5 text-xs text-red-500\">Please make a selection.</p>}\n                    </div>\n                  );\n                })}\n              </div>\n            </StepShell>\n          )}\n\n          {current === 'insurance' && (\n            <StepShell title=\"Insurance\" subtitle=\"However works best for you — none of these hold up your booking.\">\n              <div className=\"grid gap-2.5\">\n                {INSURANCE_CHOICES.map((opt) => {\n                  const Icon = INSURANCE_ICON[opt.value];\n                  const active = insuranceChoice === opt.value;\n                  // Only the chosen route needs a field list, so the others stay collapsed.\n                  const expandable = opt.value === 'details' ? insuranceFields.length > 0 : opt.value === 'photo';\n                  return (\n                    <div\n                      key={opt.value}\n                      className={`overflow-hidden rounded-2xl border transition-all\n                        ${active ? 'border-hprimary-500 bg-hprimary-50/50 shadow-sm' : 'border-gray-200 bg-white hover:border-hprimary-300'}`}\n                    >\n                      <button\n                        type=\"button\"\n                        onClick={() => setField(INSURANCE_CHOICE_KEY, opt.value)}\n                        className=\"flex w-full items-center gap-3 p-4 text-left\"\n                      >\n                        <span className={`flex h-6 w-6 shrink-0 items-center justify-center rounded-full border-2 transition-colors\n                          ${active ? 'border-hprimary-500 bg-hprimary-500 text-white' : 'border-gray-300 bg-white'}`}>\n                          {active && <Check className=\"h-3.5 w-3.5\" />}\n                        </span>\n                        <span className={`flex h-9 w-9 shrink-0 items-center justify-center rounded-xl transition-colors\n                          ${active ? 'bg-hprimary-100 text-hprimary-600' : 'bg-gray-100 text-gray-400'}`}>\n                          <Icon className=\"h-4.5 w-4.5\" />\n                        </span>\n                        <span className=\"min-w-0\">\n                          <span className=\"block text-sm font-medium text-gray-900\">{opt.label}</span>\n                          <span className=\"block text-xs text-gray-500\">{opt.hint}</span>\n                        </span>\n                      </button>\n\n                      {active && expandable && (\n                        <div className=\"border-t border-hprimary-100 bg-white/70 px-4 py-4\">\n                          {opt.value === 'details' ? (\n                            <div className=\"grid grid-cols-1 gap-x-4 gap-y-4 sm:grid-cols-2\">\n                              {insuranceFields.map((f) => {\n                                const err = showErrors && f.required && isEmpty(formData[f.key]);\n                                return (\n                                  <div key={f.key} className={isFullWidthField(f) ? 'sm:col-span-2' : ''}>\n                                    <ConsentField\n                                      field={f}\n                                      value={formData[f.key]}\n                                      onChange={(v) => setField(f.key, v)}\n                                      invalid={err}\n                                    />\n                                    {err && <p className=\"mt-1.5 text-xs text-red-500\">This field is required.</p>}\n                                  </div>\n                                );\n                              })}\n                            </div>\n                          ) : (\n                            <PhotoUpload\n                              photos={insurancePhotos}\n                              onChange={setInsurancePhotos}\n                              hint=\"Front and back of your card.\"\n                            />\n                          )}\n                        </div>\n                      )}\n                    </div>\n                  );\n                })}\n              </div>\n            </StepShell>\n          )}\n\n          {current === 'sign' && (\n            <StepShell title=\"Review & sign\" subtitle=\"Confirm the information you provided is accurate.\">\n              <div className=\"space-y-5\">\n                {showPhoto && (\n                  <div>\n                    <p className=\"mb-1.5 text-sm font-medium text-gray-700\">\n                      {photoField?.label || 'Upload a photo'}\n                      {photoRequired && <span className=\"ml-0.5 text-red-500\">*</span>}\n                    </p>\n                    <PhotoUpload photos={photos} onChange={setPhotos} hint=\"e.g. insurance card or ID.\" />\n                  </div>\n                )}\n                {showSignature && (\n                  <div>\n                    <p className=\"mb-1.5 text-sm font-medium text-gray-700\">\n                      Signature\n                      {signatureRequired && <span className=\"ml-0.5 text-red-500\">*</span>}\n                    </p>\n                    <SignaturePad value={signature} onChange={setSignature} />\n                  </div>\n                )}\n                <label className={`flex cursor-pointer items-start gap-3 rounded-xl border p-4 transition-colors ${showErrors && !certified ? 'border-red-300 bg-red-50/40' : 'border-gray-200'}`}>\n                  <span className={`mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-md border transition-colors ${certified ? 'border-hprimary-500 bg-hprimary-500 text-white' : 'border-gray-300 bg-white'}`}>\n                    {certified && <Check className=\"h-3.5 w-3.5\" />}\n                  </span>\n                  <input type=\"checkbox\" className=\"sr-only\" checked={certified} onChange={(e) => setCertified(e.target.checked)} />\n                  <span className=\"text-sm text-gray-700\">\n                    I certify that the information I’ve provided is true and complete to the best of my knowledge.\n                  </span>\n                </label>\n              </div>\n            </StepShell>\n          )}\n\n          {current === 'confirm' && (\n            <StepShell title=\"Confirm your booking\" subtitle=\"A quick review before you submit.\">\n              <div className=\"overflow-hidden rounded-2xl border border-gray-100 bg-white shadow-sm\">\n                {/* Appointment header */}\n                {hasSchedule && date && time ? (\n                  <div className=\"flex items-center gap-3.5 border-b border-gray-100 bg-hsecondary-50 px-5 py-4\">\n                    <span className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-hsecondary-500 text-white shadow-sm\">\n                      <Calendar className=\"h-5 w-5\" />\n                    </span>\n                    <div className=\"min-w-0\">\n                      <p className=\"font-semibold text-gray-900\">{format(new Date(`${date}T00:00:00`), 'EEEE, MMMM d')}</p>\n                      <p className=\"text-sm text-gray-500\">{to12h(time)} · {config.storeName}</p>\n                    </div>\n                  </div>\n                ) : (\n                  <div className=\"flex items-center gap-3.5 border-b border-gray-100 bg-hsecondary-50 px-5 py-4\">\n                    <span className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-hsecondary-500 text-white shadow-sm\">\n                      <Syringe className=\"h-5 w-5\" />\n                    </span>\n                    <div className=\"min-w-0\">\n                      <p className=\"font-semibold text-gray-900\">Walk-in visit</p>\n                      <p className=\"text-sm text-gray-500\">Visit {config.storeName} any time we&rsquo;re open</p>\n                    </div>\n                  </div>\n                )}\n\n                {/* Itemized vaccines */}\n                <div className=\"px-5 py-4\">\n                  <p className=\"mb-3 text-xs font-medium uppercase tracking-wide text-gray-400\">\n                    Vaccine{selectedVaccines.length > 1 ? 's' : ''}\n                  </p>\n                  <div className=\"space-y-3\">\n                    {selectedVaccines.map((v) => (\n                      <div key={v.id} className=\"flex items-center justify-between gap-3\">\n                        <div className=\"flex items-center gap-2.5 min-w-0\">\n                          <span className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-lg bg-hsecondary-50 text-hsecondary-600\">\n                            <Check className=\"h-3.5 w-3.5\" />\n                          </span>\n                          <span className=\"truncate text-sm text-gray-800\">{v.name}</span>\n                        </div>\n                      </div>\n                    ))}\n                  </div>\n                </div>\n              </div>\n\n              <InsuranceDisclaimer className=\"mt-4\" />\n\n              {/* Reassurance */}\n              <div className=\"mt-4 space-y-2.5\">\n                {patientName && (\n                  <div className=\"flex items-center gap-2.5 text-sm text-gray-500\">\n                    <User className=\"h-4 w-4 shrink-0 text-gray-400\" />\n                    Booking for <span className=\"font-medium text-gray-700\">{patientName}</span>\n                  </div>\n                )}\n              </div>\n\n              {submitError && (\n                <p className=\"mt-4 rounded-xl bg-red-50 px-3.5 py-2.5 text-sm text-red-600\">{submitError}</p>\n              )}\n            </StepShell>\n          )}\n        </motion.div>\n      </AnimatePresence>\n\n      {/* Sticky footer */}\n      <div className=\"fixed inset-x-0 bottom-0 z-20 border-t border-gray-100 bg-white/95 backdrop-blur-sm\">\n        <div className=\"mx-auto flex max-w-2xl items-center justify-between gap-3 px-4 py-3\">\n          <button\n            type=\"button\"\n            onClick={goBack}\n            className=\"inline-flex items-center gap-1.5 rounded-full px-4 py-2.5 text-sm font-medium text-gray-600 transition-colors hover:bg-gray-100\"\n          >\n            <ArrowLeft className=\"h-4 w-4\" /> Back\n          </button>\n\n          {current === 'select' && selectedIds.length > 0 && (\n            <span className=\"text-sm text-gray-500\">{selectedIds.length} selected</span>\n          )}\n\n          {current === 'confirm' ? (\n            <button\n              type=\"button\"\n              onClick={handleSubmit}\n              disabled={submit.isPending}\n              className=\"inline-flex items-center gap-2 rounded-full bg-hprimary-600 px-6 py-2.5 text-sm font-semibold text-white shadow-md transition-all hover:bg-hprimary-700 disabled:opacity-60\"\n            >\n              {submit.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <CheckCircle2 className=\"h-4 w-4\" />}\n              {submit.isPending ? 'Submitting…' : 'Confirm booking'}\n            </button>\n          ) : (\n            <button\n              type=\"button\"\n              onClick={goNext}\n              className=\"inline-flex items-center gap-2 rounded-full bg-hprimary-600 px-6 py-2.5 text-sm font-semibold text-white shadow-md transition-all hover:bg-hprimary-700\"\n            >\n              Continue <ArrowRight className=\"h-4 w-4\" />\n            </button>\n          )}\n        </div>\n      </div>\n    </div>\n  );\n}\n\n// ── Step keys ────────────────────────────────────────────────────────────────────\ntype StepKey = 'select' | 'schedule' | 'details' | 'screening' | 'insurance' | 'sign' | 'confirm';\n\n// ── Small presentational helpers ────────────────────────────────────────────────\nexport function StepShell({ title, subtitle, children }: { title: string; subtitle?: string; children: React.ReactNode }) {\n  return (\n    <div>\n      <h2 className=\"text-lg font-semibold text-gray-900\">{title}</h2>\n      {subtitle && <p className=\"mb-5 mt-0.5 text-sm text-gray-500\">{subtitle}</p>}\n      {children}\n    </div>\n  );\n}\n\nexport function DateStrip({ dates, value, onChange }: { dates: Date[]; value: string; onChange: (iso: string) => void }) {\n  if (dates.length === 0) {\n    return <p className=\"py-6 text-sm text-gray-500\">No upcoming availability. Please check back later.</p>;\n  }\n  return (\n    <div className=\"flex gap-2 overflow-x-auto pb-2 [-ms-overflow-style:none] [scrollbar-width:none] [&::-webkit-scrollbar]:hidden\">\n      {dates.map((d) => {\n        const iso = format(d, 'yyyy-MM-dd');\n        const active = value === iso;\n        return (\n          <button\n            key={iso}\n            type=\"button\"\n            onClick={() => onChange(iso)}\n            className={`flex w-14 shrink-0 flex-col items-center rounded-xl border py-2.5 transition-all\n              ${active ? 'border-hsecondary-500 bg-hsecondary-500 text-white shadow-sm' : 'border-gray-200 bg-white text-gray-600 hover:border-hsecondary-400'}`}\n          >\n            <span className=\"text-[10px] font-medium uppercase opacity-80\">{format(d, 'EEE')}</span>\n            <span className=\"text-lg font-bold leading-tight\">{format(d, 'd')}</span>\n            <span className=\"text-[10px] opacity-80\">{format(d, 'MMM')}</span>\n          </button>\n        );\n      })}\n    </div>\n  );\n}\n\nexport function SuccessView({ done, storeName, onExit }: { done: { names: string[]; date?: string; time?: string }; storeName: string; onExit?: () => void }) {\n  const hasAppt = !!(done.date && done.time);\n  return (\n    <div className=\"mx-auto max-w-md px-4 py-14 sm:py-20\">\n      {/* Animated check with radiating rings */}\n      <div className=\"relative mx-auto mb-7 flex h-24 w-24 items-center justify-center\">\n        {[0, 1].map((i) => (\n          <motion.span\n            key={i}\n            className=\"absolute inset-0 rounded-full bg-hsecondary-500/20\"\n            initial={{ scale: 0.6, opacity: 0.6 }}\n            animate={{ scale: 1.6, opacity: 0 }}\n            transition={{ duration: 1.8, repeat: Infinity, delay: i * 0.6, ease: 'easeOut' }}\n          />\n        ))}\n        <motion.div\n          initial={{ scale: 0 }}\n          animate={{ scale: 1 }}\n          transition={{ type: 'spring', stiffness: 380, damping: 22 }}\n          className=\"relative flex h-20 w-20 items-center justify-center rounded-full bg-hsecondary-500 shadow-lg shadow-hsecondary-500/30\"\n        >\n          <motion.span initial={{ scale: 0 }} animate={{ scale: 1 }} transition={{ delay: 0.15, type: 'spring', stiffness: 500, damping: 20 }}>\n            <Check className=\"h-10 w-10 text-white\" strokeWidth={2.5} />\n          </motion.span>\n        </motion.div>\n      </div>\n\n      <h2 className=\"text-center text-2xl font-bold text-gray-900\">You&rsquo;re all set!</h2>\n      <p className=\"mx-auto mt-2 max-w-xs text-center text-sm leading-relaxed text-gray-500\">\n        {hasAppt ? 'Your appointment is confirmed.' : 'Your request has been received.'}\n      </p>\n\n      {/* Booking summary card */}\n      <div className=\"mt-7 space-y-4 rounded-2xl border border-gray-100 bg-white p-5 shadow-sm\">\n        {hasAppt && (\n          <div className=\"flex items-center gap-3\">\n            <span className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-hsecondary-50 text-hsecondary-600\">\n              <Clock className=\"h-5 w-5\" />\n            </span>\n            <div>\n              <p className=\"font-semibold text-gray-900\">{format(new Date(`${done.date}T00:00:00`), 'EEEE, MMMM d')}</p>\n              <p className=\"text-sm text-gray-500\">{to12h(done.time!)} · {storeName}</p>\n            </div>\n          </div>\n        )}\n        <div className={`flex items-start gap-3 ${hasAppt ? 'border-t border-gray-100 pt-4' : ''}`}>\n          <span className=\"flex h-10 w-10 shrink-0 items-center justify-center rounded-xl bg-hsecondary-50 text-hsecondary-600\">\n            <Syringe className=\"h-5 w-5\" />\n          </span>\n          <div>\n            <p className=\"text-xs font-medium uppercase tracking-wide text-gray-400\">Vaccines</p>\n            <div className=\"mt-1.5 flex flex-wrap gap-1.5\">\n              {done.names.map((n) => (\n                <span key={n} className=\"rounded-full bg-gray-100 px-2.5 py-0.5 text-sm font-medium text-gray-700\">{n}</span>\n              ))}\n            </div>\n          </div>\n        </div>\n      </div>\n\n      <div className=\"mt-4 flex items-start gap-2.5 rounded-xl bg-gray-50 px-4 py-3\">\n        <ShieldCheck className=\"mt-0.5 h-4 w-4 shrink-0 text-hsecondary-500\" />\n        <p className=\"text-xs leading-relaxed text-gray-500\">\n          Bring your insurance card and a photo ID. {hasAppt ? 'Please arrive a few minutes early.' : \"Walk in any time we're open.\"}\n        </p>\n      </div>\n\n      {onExit && (\n        <button\n          type=\"button\"\n          onClick={onExit}\n          className=\"mt-6 w-full rounded-full bg-hprimary-600 px-6 py-3 text-sm font-semibold text-white shadow-md transition-colors hover:bg-hprimary-700\"\n        >\n          Done\n        </button>\n      )}\n    </div>\n  );\n}\n\n// ── utils ────────────────────────────────────────────────────────────────────────\nexport function isEmpty(v: any) {\n  if (Array.isArray(v)) return v.length === 0;\n  return v == null || String(v).trim() === '';\n}\n\nexport function to12h(hhmm: string) {\n  const [h, m] = hhmm.split(':').map(Number);\n  const period = h >= 12 ? 'PM' : 'AM';\n  const hour = h % 12 === 0 ? 12 : h % 12;\n  return `${hour}:${String(m).padStart(2, '0')} ${period}`;\n}\n","'use client';\n\nimport React, { useMemo, useState } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport { format, addDays, startOfToday, getDay } from 'date-fns';\nimport {\n  Syringe, Calendar, User, ClipboardList, PenLine, CheckCircle2, Check,\n  ArrowLeft, ArrowRight, Loader2, AlertTriangle, ShieldCheck, MapPin, FileText,\n} from 'lucide-react';\nimport { useTheme } from '@/providers/ThemeProvider';\nimport { useAuth } from '@/providers/AuthProvider';\nimport { useVaccineForm, useVaccineSlots, useSubmitVaccineConsent } from '@/hooks/useVaccines';\nimport { VaccineStepper, WizardStep } from '@/components/vaccine/VaccineStepper';\nimport { SignaturePad } from '@/components/vaccine/SignaturePad';\nimport { PhotoUpload, UploadedPhoto } from '@/components/vaccine/PhotoUpload';\nimport { InsuranceDisclaimer } from '@/components/vaccine/InsuranceDisclaimer';\nimport {\n  ConsentField, groupFields, groupDetailSections, deriveContact, missingRequired,\n  isFullWidthField, isVaccinesTodayField, isYesNo,\n  findSignatureField, findPhotoField,\n} from '@/components/vaccine/consentFields';\nimport { DayAvailabilityDayEnum } from '@/lib/Apis/models';\nimport { StepShell, DateStrip, SuccessView, isEmpty, to12h } from './BookVaccineScreen';\n\nconst WEEKDAY_BY_INDEX: DayAvailabilityDayEnum[] = [\n  DayAvailabilityDayEnum.Sunday, DayAvailabilityDayEnum.Monday, DayAvailabilityDayEnum.Tuesday,\n  DayAvailabilityDayEnum.Wednesday, DayAvailabilityDayEnum.Thursday, DayAvailabilityDayEnum.Friday,\n  DayAvailabilityDayEnum.Saturday,\n];\n\nconst DAYS_AHEAD = 30;\n\nconst SECTION_ICON: Record<string, React.ReactNode> = {\n  personal: <User className=\"h-4 w-4\" />,\n  address: <MapPin className=\"h-4 w-4\" />,\n  additional: <FileText className=\"h-4 w-4\" />,\n};\n\ntype StepKey = 'schedule' | 'details' | 'screening' | 'sign' | 'confirm';\n\ninterface BookCustomVaccineScreenProps {\n  /** Id of the custom vaccine (a ServiceForm with usesSharedForm = false). */\n  vaccineId: string;\n  /** Called when the user leaves via the back arrow on step 1 (e.g. router.back()). */\n  onExit?: () => void;\n}\n\n// Booking flow for a custom vaccine: unlike the shared multi-vaccine stepper,\n// the questionnaire and the schedule come from this vaccine's own form, so the\n// patient sees the fields exactly as the pharmacist built them.\nexport function BookCustomVaccineScreen({ vaccineId, onExit }: BookCustomVaccineScreenProps) {\n  const { config } = useTheme();\n  const { user } = useAuth();\n  const { form, isLoading: formLoading } = useVaccineForm(vaccineId);\n  const submit = useSubmitVaccineConsent();\n\n  // ── Wizard state ────────────────────────────────────────────────────────────\n  const [stepIndex, setStepIndex] = useState(0);\n  const [date, setDate] = useState('');\n  const [time, setTime] = useState('');\n  const [formData, setFormData] = useState<Record<string, any>>({});\n  const [photos, setPhotos] = useState<UploadedPhoto[]>([]);\n  const [signature, setSignature] = useState('');\n  const [certified, setCertified] = useState(false);\n  const [showErrors, setShowErrors] = useState(false);\n  const [submitError, setSubmitError] = useState('');\n  const [done, setDone] = useState<{ names: string[]; date?: string; time?: string } | null>(null);\n\n  // Prefill name/phone/email from the signed-in user, once.\n  React.useEffect(() => {\n    if (!user || !form) return;\n    setFormData((prev) => {\n      if (Object.keys(prev).length) return prev;\n      const seeded: Record<string, any> = {};\n      const fullName = [user.firstname, user.lastname].filter(Boolean).join(' ');\n      for (const f of form.fields ?? []) {\n        if (f.type === 'text' && /\\bname\\b/i.test(f.label) && fullName) seeded[f.key] = fullName;\n        if (f.type === 'phone' && user.phoneNumber) seeded[f.key] = user.phoneNumber;\n        if (f.type === 'email' && user.email) seeded[f.key] = user.email;\n      }\n      return seeded;\n    });\n  }, [user, form]);\n\n  // ── Derived ──────────────────────────────────────────────────────────────────\n  const fields = useMemo(() => form?.fields ?? [], [form]);\n  const grouped = useMemo(() => groupFields(fields), [fields]);\n  const detailSections = useMemo(() => groupDetailSections(grouped.details), [grouped.details]);\n  const patientName = useMemo(\n    () => deriveContact(fields, formData).patientName,\n    [fields, formData],\n  );\n\n  const signatureField = useMemo(() => findSignatureField(fields), [fields]);\n  const photoField = useMemo(() => findPhotoField(fields), [fields]);\n\n  const appointment = form?.appointment;\n  const enabledDays = useMemo(\n    () => new Set((appointment?.days ?? []).filter((d) => d.enabled).map((d) => d.day)),\n    [appointment],\n  );\n  const hasSchedule = !!appointment?.allowBooking && enabledDays.size > 0;\n  const excluded = useMemo(() => new Set(appointment?.excludedDates ?? []), [appointment]);\n\n  // Slot length comes from this form's own settings on the backend.\n  const { slots, isLoading: slotsLoading, refetch: refetchSlots } =\n    useVaccineSlots(hasSchedule ? vaccineId : undefined, date);\n\n  const availableDates = useMemo(() => {\n    if (!hasSchedule) return [];\n    const out: Date[] = [];\n    const today = startOfToday();\n    for (let i = 0; i < DAYS_AHEAD; i++) {\n      const d = addDays(today, i);\n      const iso = format(d, 'yyyy-MM-dd');\n      if (enabledDays.has(WEEKDAY_BY_INDEX[getDay(d)]) && !excluded.has(iso)) out.push(d);\n    }\n    return out;\n  }, [hasSchedule, enabledDays, excluded]);\n\n  // ── Dynamic steps ──────────────────────────────────────────────────────────────\n  const steps: (WizardStep & { key: StepKey })[] = useMemo(() => {\n    const s: (WizardStep & { key: StepKey })[] = [];\n    if (hasSchedule) s.push({ key: 'schedule', label: 'Time', icon: <Calendar className=\"h-5 w-5\" /> });\n    if (grouped.details.length) s.push({ key: 'details', label: 'Details', icon: <User className=\"h-5 w-5\" /> });\n    if (grouped.screening.length) s.push({ key: 'screening', label: 'Health', icon: <ClipboardList className=\"h-5 w-5\" /> });\n    s.push({ key: 'sign', label: 'Sign', icon: <PenLine className=\"h-5 w-5\" /> });\n    s.push({ key: 'confirm', label: 'Confirm', icon: <CheckCircle2 className=\"h-5 w-5\" /> });\n    return s;\n  }, [hasSchedule, grouped.details.length, grouped.screening.length]);\n\n  const current = steps[Math.min(stepIndex, steps.length - 1)]?.key;\n\n  // ── Step validity ────────────────────────────────────────────────────────────\n  const stepValid = (key: StepKey): boolean => {\n    switch (key) {\n      case 'schedule': return !!date && !!time;\n      case 'details': return !missingRequired(grouped.details, formData);\n      case 'screening': return !missingRequired(grouped.screening, formData);\n      case 'sign':\n        return certified\n          && (!signatureField?.required || !!signature)\n          && (!photoField?.required || photos.length > 0);\n      case 'confirm': return true;\n      default: return true;\n    }\n  };\n\n  const stepErrorMessage = (key: StepKey): string => {\n    switch (key) {\n      case 'schedule': return !date ? 'Please pick a date for your visit.' : 'Please choose an available time.';\n      case 'sign':\n        if (photoField?.required && photos.length === 0) return 'Please upload the required photo.';\n        if (signatureField?.required && !signature) return 'Please add your signature.';\n        return 'Please confirm the certification below to continue.';\n      default: return 'Please fill in the required fields highlighted below.';\n    }\n  };\n\n  const setField = (key: string, value: any) => setFormData((p) => ({ ...p, [key]: value }));\n\n  const goNext = () => {\n    if (!stepValid(current)) {\n      setShowErrors(true);\n      if (typeof window !== 'undefined') window.scrollTo({ top: 0, behavior: 'smooth' });\n      return;\n    }\n    setShowErrors(false);\n    setStepIndex((i) => Math.min(i + 1, steps.length - 1));\n  };\n  const goBack = () => {\n    setShowErrors(false);\n    if (stepIndex === 0) { onExit?.(); return; }\n    setStepIndex((i) => i - 1);\n  };\n\n  const handleSubmit = async () => {\n    if (!form) return;\n    setSubmitError('');\n    const contact = deriveContact(fields, formData);\n    const userFullName = [user?.firstname, user?.lastname].filter(Boolean).join(' ');\n    try {\n      // Auto-fill any \"vaccine(s) to be given today\" field with this vaccine.\n      const autoFilled: Record<string, any> = {};\n      for (const f of fields) {\n        if (isVaccinesTodayField(f)) autoFilled[f.key] = form.name;\n      }\n\n      await submit.mutateAsync({\n        serviceForm: vaccineId,\n        patientName: contact.patientName || userFullName || 'Guest',\n        patientEmail: contact.patientEmail || user?.email,\n        patientPhone: contact.patientPhone,\n        formData: {\n          ...formData,\n          ...autoFilled,\n          // Mirror the signature/photos under both the form's own field keys and\n          // the canonical keys the dashboard reads ('signature' / 'photos').\n          ...(signature ? { signature, ...(signatureField ? { [signatureField.key]: signature } : {}) } : {}),\n          ...(photos.length\n            ? { photos: photos.map((p) => p.dataUrl), ...(photoField ? { [photoField.key]: photos.map((p) => p.dataUrl) } : {}) }\n            : {}),\n          certified: true,\n        },\n        ...(hasSchedule && date && time ? { appointmentDate: date, appointmentTime: time } : {}),\n      });\n      setDone({ names: [form.name], date, time });\n    } catch (err: any) {\n      const status = err?.response?.status;\n      if (status === 409) {\n        setSubmitError('That time was just booked. Please choose another slot.');\n        setTime('');\n        refetchSlots();\n        const scheduleIdx = steps.findIndex((s) => s.key === 'schedule');\n        if (scheduleIdx >= 0) setStepIndex(scheduleIdx);\n      } else {\n        setSubmitError('Something went wrong submitting your form. Please try again.');\n      }\n    }\n  };\n\n  // ── Loading / missing ──────────────────────────────────────────────────────────\n  if (formLoading) {\n    return (\n      <div className=\"flex min-h-[60vh] items-center justify-center\">\n        <Loader2 className=\"h-6 w-6 animate-spin text-hprimary-500\" />\n      </div>\n    );\n  }\n\n  if (!form || form.isActive === false) {\n    return (\n      <div className=\"mx-auto max-w-md px-4 py-20 text-center\">\n        <div className=\"mx-auto mb-4 flex h-14 w-14 items-center justify-center rounded-full bg-gray-100\">\n          <Syringe className=\"h-7 w-7 text-gray-400\" />\n        </div>\n        <h2 className=\"text-lg font-semibold text-gray-900\">Vaccine not available</h2>\n        <p className=\"mt-1 text-sm text-gray-500\">{config.storeName} isn&rsquo;t offering this vaccination online right now.</p>\n      </div>\n    );\n  }\n\n  if (done) return <SuccessView done={done} storeName={config.storeName} onExit={onExit} />;\n\n  // ── Layout ──────────────────────────────────────────────────────────────────\n  return (\n    <div className=\"mx-auto max-w-2xl px-4 pb-32 pt-6 sm:pt-8\">\n      <header className=\"mb-6\">\n        <h1 className=\"text-2xl font-bold text-gray-900\">{form.name}</h1>\n        <p className=\"mt-0.5 text-sm text-gray-500\">\n          {form.description || `Book your ${form.name} visit`} · at {config.storeName}\n        </p>\n      </header>\n\n      <div className=\"mb-5\">\n        <InsuranceDisclaimer />\n      </div>\n\n      <div className=\"mb-8\">\n        <VaccineStepper steps={steps} currentIndex={stepIndex} onStepClick={(i) => i < stepIndex && setStepIndex(i)} />\n      </div>\n\n      {showErrors && !stepValid(current) && (\n        <motion.div\n          initial={{ opacity: 0, y: -6 }}\n          animate={{ opacity: 1, y: 0 }}\n          className=\"mb-5 flex items-center gap-2.5 rounded-xl border border-red-200 bg-red-50 px-4 py-3 text-sm text-red-600\"\n        >\n          <AlertTriangle className=\"h-4 w-4 shrink-0\" />\n          {stepErrorMessage(current)}\n        </motion.div>\n      )}\n\n      <AnimatePresence mode=\"wait\">\n        <motion.div\n          key={current}\n          initial={{ opacity: 0, x: 16 }}\n          animate={{ opacity: 1, x: 0 }}\n          exit={{ opacity: 0, x: -16 }}\n          transition={{ duration: 0.2 }}\n        >\n          {current === 'schedule' && (\n            <StepShell title=\"Pick a time\" subtitle=\"Choose a slot for your visit.\">\n              <DateStrip dates={availableDates} value={date} onChange={(d) => { setDate(d); setTime(''); }} />\n              {date && (\n                <div className=\"mt-5\">\n                  <p className=\"mb-2 text-sm font-medium text-gray-700\">Available times</p>\n                  {slotsLoading ? (\n                    <div className=\"flex items-center gap-2 py-6 text-sm text-gray-400\">\n                      <Loader2 className=\"h-4 w-4 animate-spin\" /> Loading times…\n                    </div>\n                  ) : slots.filter((s) => !s.isBooked).length === 0 ? (\n                    <p className=\"py-6 text-sm text-gray-500\">No open times this day. Try another date.</p>\n                  ) : (\n                    <div className=\"grid grid-cols-3 gap-2 sm:grid-cols-4\">\n                      {slots.map((s) => (\n                        <button\n                          key={s.time}\n                          type=\"button\"\n                          disabled={s.isBooked}\n                          onClick={() => setTime(s.time)}\n                          className={`rounded-xl border py-2.5 text-sm font-medium transition-all\n                            ${s.isBooked ? 'cursor-not-allowed border-gray-100 bg-gray-50 text-gray-300 line-through'\n                              : time === s.time ? 'border-hsecondary-500 bg-hsecondary-500 text-white shadow-sm'\n                              : 'border-gray-200 bg-white text-gray-700 hover:border-hsecondary-400'}`}\n                        >\n                          {to12h(s.time)}\n                        </button>\n                      ))}\n                    </div>\n                  )}\n                </div>\n              )}\n            </StepShell>\n          )}\n\n          {current === 'details' && (\n            <StepShell title=\"Your details\" subtitle=\"So the pharmacist can prepare your visit.\">\n              <div className=\"space-y-7\">\n                {detailSections.map((section) => (\n                  <div key={section.key} className=\"space-y-4\">\n                    <div className=\"flex items-center gap-2.5\">\n                      <span className=\"text-hsecondary-600\">{SECTION_ICON[section.key]}</span>\n                      <h3 className=\"text-sm font-semibold text-gray-900\">{section.title}</h3>\n                      <span className=\"h-px flex-1 bg-gray-100\" />\n                    </div>\n                    <div className=\"grid grid-cols-1 gap-x-4 gap-y-4 sm:grid-cols-2\">\n                      {section.fields.map((f) => {\n                        const err = showErrors && f.required && isEmpty(formData[f.key]);\n                        return (\n                          <div key={f.key} className={isFullWidthField(f) ? 'sm:col-span-2' : ''}>\n                            <ConsentField\n                              field={f}\n                              value={formData[f.key]}\n                              onChange={(v) => setField(f.key, v)}\n                              invalid={err}\n                            />\n                            {err && <p className=\"mt-1.5 text-xs text-red-500\">This field is required.</p>}\n                          </div>\n                        );\n                      })}\n                    </div>\n                  </div>\n                ))}\n              </div>\n            </StepShell>\n          )}\n\n          {current === 'screening' && (\n            <StepShell title=\"Health screening\" subtitle=\"A few quick questions to confirm it’s safe to vaccinate you today.\">\n              <div className=\"space-y-3\">\n                {grouped.screening.map((f, i) => {\n                  const err = showErrors && f.required && isEmpty(formData[f.key]);\n                  if (isYesNo(f)) {\n                    const val = String(formData[f.key] ?? '').toLowerCase();\n                    return (\n                      <div\n                        key={f.key}\n                        className={`rounded-2xl border p-4 transition-colors\n                          ${err ? 'border-red-300 bg-red-50/40' : 'border-gray-200 bg-white'}`}\n                      >\n                        <div className=\"flex flex-col gap-3 sm:flex-row sm:items-center sm:justify-between\">\n                          <p className=\"text-sm leading-relaxed text-gray-800\">\n                            <span className=\"mr-1.5 font-semibold text-gray-300\">{i + 1}.</span>\n                            {f.label}\n                            {f.required && <span className=\"text-red-500\"> *</span>}\n                          </p>\n                          <div className=\"flex shrink-0 rounded-full bg-gray-100 p-0.5 sm:ml-4\">\n                            {['Yes', 'No'].map((opt) => {\n                              const selected = val === opt.toLowerCase();\n                              return (\n                                <button\n                                  key={opt}\n                                  type=\"button\"\n                                  onClick={() => setField(f.key, opt.toLowerCase())}\n                                  className={`min-w-[3.5rem] rounded-full px-4 py-1.5 text-sm font-medium transition-all\n                                    ${selected ? 'bg-white text-gray-900 shadow-sm' : 'text-gray-500 hover:text-gray-700'}`}\n                                >\n                                  {opt}\n                                </button>\n                              );\n                            })}\n                          </div>\n                        </div>\n                        {err && <p className=\"mt-2.5 text-xs text-red-500\">Please select an answer.</p>}\n                      </div>\n                    );\n                  }\n                  return (\n                    <div key={f.key} className={`rounded-2xl border p-4 ${err ? 'border-red-300' : 'border-gray-200 bg-white'}`}>\n                      <ConsentField\n                        field={f}\n                        value={formData[f.key]}\n                        onChange={(v) => setField(f.key, v)}\n                        invalid={err}\n                      />\n                      {err && <p className=\"mt-2.5 text-xs text-red-500\">Please make a selection.</p>}\n                    </div>\n                  );\n                })}\n              </div>\n            </StepShell>\n          )}\n\n          {current === 'sign' && (\n            <StepShell title=\"Review & sign\" subtitle=\"Confirm the information you provided is accurate.\">\n              <div className=\"space-y-5\">\n                {photoField && (\n                  <div>\n                    <p className=\"mb-1.5 text-sm font-medium text-gray-700\">\n                      {photoField.label || 'Upload a photo'}\n                      {photoField.required && <span className=\"ml-0.5 text-red-500\">*</span>}\n                    </p>\n                    <PhotoUpload photos={photos} onChange={setPhotos} hint=\"e.g. insurance card or ID.\" />\n                  </div>\n                )}\n                {signatureField && (\n                  <div>\n                    <p className=\"mb-1.5 text-sm font-medium text-gray-700\">\n                      Signature\n                      {signatureField.required && <span className=\"ml-0.5 text-red-500\">*</span>}\n                    </p>\n                    <SignaturePad value={signature} onChange={setSignature} />\n                  </div>\n                )}\n                <label className={`flex cursor-pointer items-start gap-3 rounded-xl border p-4 transition-colors ${showErrors && !certified ? 'border-red-300 bg-red-50/40' : 'border-gray-200'}`}>\n                  <span className={`mt-0.5 flex h-5 w-5 shrink-0 items-center justify-center rounded-md border transition-colors ${certified ? 'border-hprimary-500 bg-hprimary-500 text-white' : 'border-gray-300 bg-white'}`}>\n                    {certified && <Check className=\"h-3.5 w-3.5\" />}\n                  </span>\n                  <input type=\"checkbox\" className=\"sr-only\" checked={certified} onChange={(e) => setCertified(e.target.checked)} />\n                  <span className=\"text-sm text-gray-700\">\n                    I certify that the information I&rsquo;ve provided is true and complete to the best of my knowledge.\n                  </span>\n                </label>\n              </div>\n            </StepShell>\n          )}\n\n          {current === 'confirm' && (\n            <StepShell title=\"Confirm your booking\" subtitle=\"A quick review before you submit.\">\n              <div className=\"overflow-hidden rounded-2xl border border-gray-100 bg-white shadow-sm\">\n                {hasSchedule && date && time ? (\n                  <div className=\"flex items-center gap-3.5 border-b border-gray-100 bg-hsecondary-50 px-5 py-4\">\n                    <span className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-hsecondary-500 text-white shadow-sm\">\n                      <Calendar className=\"h-5 w-5\" />\n                    </span>\n                    <div className=\"min-w-0\">\n                      <p className=\"font-semibold text-gray-900\">{format(new Date(`${date}T00:00:00`), 'EEEE, MMMM d')}</p>\n                      <p className=\"text-sm text-gray-500\">{to12h(time)} · {config.storeName}</p>\n                    </div>\n                  </div>\n                ) : (\n                  <div className=\"flex items-center gap-3.5 border-b border-gray-100 bg-hsecondary-50 px-5 py-4\">\n                    <span className=\"flex h-11 w-11 shrink-0 items-center justify-center rounded-xl bg-hsecondary-500 text-white shadow-sm\">\n                      <Syringe className=\"h-5 w-5\" />\n                    </span>\n                    <div className=\"min-w-0\">\n                      <p className=\"font-semibold text-gray-900\">Walk-in visit</p>\n                      <p className=\"text-sm text-gray-500\">Visit {config.storeName} any time we&rsquo;re open</p>\n                    </div>\n                  </div>\n                )}\n\n                <div className=\"px-5 py-4\">\n                  <p className=\"mb-3 text-xs font-medium uppercase tracking-wide text-gray-400\">Vaccine</p>\n                  <div className=\"flex items-center gap-2.5 min-w-0\">\n                    <span className=\"flex h-6 w-6 shrink-0 items-center justify-center rounded-lg bg-hsecondary-50 text-hsecondary-600\">\n                      <Check className=\"h-3.5 w-3.5\" />\n                    </span>\n                    <span className=\"truncate text-sm text-gray-800\">{form.name}</span>\n                  </div>\n                </div>\n              </div>\n\n              <InsuranceDisclaimer className=\"mt-4\" />\n\n              <div className=\"mt-4 space-y-2.5\">\n                {patientName && (\n                  <div className=\"flex items-center gap-2.5 text-sm text-gray-500\">\n                    <User className=\"h-4 w-4 shrink-0 text-gray-400\" />\n                    Booking for <span className=\"font-medium text-gray-700\">{patientName}</span>\n                  </div>\n                )}\n              </div>\n\n              {submitError && (\n                <p className=\"mt-4 rounded-xl bg-red-50 px-3.5 py-2.5 text-sm text-red-600\">{submitError}</p>\n              )}\n            </StepShell>\n          )}\n        </motion.div>\n      </AnimatePresence>\n\n      {/* Sticky footer */}\n      <div className=\"fixed inset-x-0 bottom-0 z-20 border-t border-gray-100 bg-white/95 backdrop-blur-sm\">\n        <div className=\"mx-auto flex max-w-2xl items-center justify-between gap-3 px-4 py-3\">\n          <button\n            type=\"button\"\n            onClick={goBack}\n            className=\"inline-flex items-center gap-1.5 rounded-full px-4 py-2.5 text-sm font-medium text-gray-600 transition-colors hover:bg-gray-100\"\n          >\n            <ArrowLeft className=\"h-4 w-4\" /> Back\n          </button>\n\n          {current === 'confirm' ? (\n            <button\n              type=\"button\"\n              onClick={handleSubmit}\n              disabled={submit.isPending}\n              className=\"inline-flex items-center gap-2 rounded-full bg-hprimary-600 px-6 py-2.5 text-sm font-semibold text-white shadow-md transition-all hover:bg-hprimary-700 disabled:opacity-60\"\n            >\n              {submit.isPending ? <Loader2 className=\"h-4 w-4 animate-spin\" /> : <CheckCircle2 className=\"h-4 w-4\" />}\n              {submit.isPending ? 'Submitting…' : 'Confirm booking'}\n            </button>\n          ) : (\n            <button\n              type=\"button\"\n              onClick={goNext}\n              className=\"inline-flex items-center gap-2 rounded-full bg-hprimary-600 px-6 py-2.5 text-sm font-semibold text-white shadow-md transition-all hover:bg-hprimary-700\"\n            >\n              Continue <ArrowRight className=\"h-4 w-4\" />\n            </button>\n          )}\n        </div>\n      </div>\n    </div>\n  );\n}\n","'use client';\n\nimport React from 'react';\nimport { motion } from 'framer-motion';\nimport { Syringe, ArrowRight, CalendarCheck } from 'lucide-react';\nimport { useVaccines } from '@/hooks/useVaccines';\nimport { useTheme } from '@/providers/ThemeProvider';\n\ninterface VaccineBannerProps {\n  /** Navigate to the booking flow (e.g. router.push('/vaccines')). */\n  onBook: () => void;\n  /** Optional copy overrides — defaults derive from the pharmacy name. */\n  title?: string;\n  subtitle?: string;\n  ctaLabel?: string;\n  /** Cap how many vaccine names are listed inline (default 4). */\n  maxNames?: number;\n  className?: string;\n}\n\n// Home-screen promo banner: \"We offer X, Y, Z — schedule your appointment\".\n// Fully theme-driven (pharmacy name + brand colors); hides itself when the store\n// has no active vaccines so it's safe to drop onto any page.\nexport function VaccineBanner({\n  onBook,\n  title,\n  subtitle,\n  ctaLabel = 'Schedule appointment',\n  maxNames = 4,\n  className = '',\n}: VaccineBannerProps) {\n  const { vaccines, isLoading } = useVaccines();\n  const { config } = useTheme();\n\n  if (isLoading || vaccines.length === 0) return null;\n\n  const names = vaccines.map((v) => v.name);\n  const shown = names.slice(0, maxNames);\n  const extra = names.length - shown.length;\n\n  const heading = title ?? `Vaccinations at ${config.storeName}`;\n  const sub =\n    subtitle ??\n    `Now offering ${shown.join(', ')}${extra > 0 ? ` +${extra} more` : ''}. Book in minutes.`;\n\n  return (\n    <motion.div\n      initial={{ opacity: 0, y: 12 }}\n      animate={{ opacity: 1, y: 0 }}\n      transition={{ duration: 0.4 }}\n      className={`relative overflow-hidden rounded-2xl bg-gradient-to-br from-hprimary-600 to-hprimary-800 p-5 text-white shadow-lg sm:p-7 ${className}`}\n    >\n      {/* Decorative blobs */}\n      <div className=\"pointer-events-none absolute -right-8 -top-8 h-40 w-40 rounded-full bg-white/10 blur-2xl\" />\n      <div className=\"pointer-events-none absolute -bottom-10 right-16 h-32 w-32 rounded-full bg-white/10 blur-2xl\" />\n\n      <div className=\"relative flex flex-col gap-5 sm:flex-row sm:items-center sm:justify-between\">\n        <div className=\"flex items-start gap-4\">\n          <div className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-xl bg-white/15 backdrop-blur-sm\">\n            <Syringe className=\"h-6 w-6\" />\n          </div>\n          <div className=\"min-w-0\">\n            <h3 className=\"text-lg font-bold leading-tight sm:text-xl\">{heading}</h3>\n            <p className=\"mt-1 text-sm text-white/85\">{sub}</p>\n            <div className=\"mt-3 flex flex-wrap gap-1.5\">\n              {shown.map((n) => (\n                <span key={n} className=\"rounded-full bg-white/15 px-2.5 py-1 text-xs font-medium backdrop-blur-sm\">\n                  {n}\n                </span>\n              ))}\n              {extra > 0 && (\n                <span className=\"rounded-full bg-white/10 px-2.5 py-1 text-xs font-medium\">+{extra} more</span>\n              )}\n            </div>\n          </div>\n        </div>\n\n        <motion.button\n          type=\"button\"\n          onClick={onBook}\n          whileHover={{ scale: 1.03 }}\n          whileTap={{ scale: 0.97 }}\n          className=\"group inline-flex shrink-0 items-center justify-center gap-2 rounded-full bg-white px-5 py-3 text-sm font-semibold text-hprimary-700 shadow-md transition-shadow hover:shadow-lg\"\n        >\n          <CalendarCheck className=\"h-4 w-4\" />\n          {ctaLabel}\n          <ArrowRight className=\"h-4 w-4 transition-transform group-hover:translate-x-0.5\" />\n        </motion.button>\n      </div>\n    </motion.div>\n  );\n}\n","'use client';\n\nimport React from 'react';\nimport { motion } from 'framer-motion';\nimport { ShieldPlus, ArrowRight, BadgeCheck } from 'lucide-react';\nimport { useCustomVaccines } from '@/hooks/useVaccines';\nimport { useTheme } from '@/providers/ThemeProvider';\nimport { ServiceForm } from '@/lib/Apis/models';\n\ninterface SpecialtyVaccineBannerProps {\n  /** Navigate to the custom vaccine's booking flow (e.g. router.push(`/vaccines/specialty/${v.id}`)). */\n  onBook: (vaccine: ServiceForm) => void;\n  /** Optional copy overrides. */\n  title?: string;\n  subtitle?: string;\n  className?: string;\n}\n\n// Home-screen banner for the pharmacy's specialty (custom-form) immunizations.\n// Each one runs its own questionnaire and schedule, so every card books\n// individually instead of joining the shared multi-vaccine flow. Hides itself\n// when the store has none, so it's safe to drop onto any page.\nexport function SpecialtyVaccineBanner({\n  onBook,\n  title = 'Specialty immunizations',\n  subtitle,\n  className = '',\n}: SpecialtyVaccineBannerProps) {\n  const { vaccines, isLoading } = useCustomVaccines();\n  const { config } = useTheme();\n\n  if (isLoading || vaccines.length === 0) return null;\n\n  const sub =\n    subtitle ??\n    `Beyond routine shots — ${config.storeName} offers tailored protection with a quick, dedicated booking for each.`;\n\n  return (\n    <motion.div\n      initial={{ opacity: 0, y: 12 }}\n      animate={{ opacity: 1, y: 0 }}\n      transition={{ duration: 0.4 }}\n      className={`relative overflow-hidden rounded-2xl border border-hsecondary-100 bg-gradient-to-br from-hsecondary-50 to-white p-5 shadow-sm sm:p-7 ${className}`}\n    >\n      {/* Decorative blob */}\n      <div className=\"pointer-events-none absolute -right-10 -top-10 h-44 w-44 rounded-full bg-hsecondary-100/60 blur-2xl\" />\n\n      <div className=\"relative\">\n        <div className=\"flex items-start gap-4\">\n          <div className=\"flex h-12 w-12 shrink-0 items-center justify-center rounded-xl bg-hsecondary-500 text-white shadow-sm\">\n            <ShieldPlus className=\"h-6 w-6\" />\n          </div>\n          <div className=\"min-w-0\">\n            <h3 className=\"text-lg font-bold leading-tight text-gray-900 sm:text-xl\">{title}</h3>\n            <p className=\"mt-1 text-sm text-gray-600\">{sub}</p>\n            <p className=\"mt-2 flex items-center gap-1.5 text-xs font-medium text-emerald-700\">\n              <BadgeCheck className=\"h-3.5 w-3.5\" /> Free with most insurance plans\n            </p>\n          </div>\n        </div>\n\n        <div className=\"mt-5 grid gap-2.5 sm:grid-cols-2\">\n          {vaccines.map((v) => (\n            <motion.button\n              key={v.id}\n              type=\"button\"\n              onClick={() => onBook(v)}\n              whileHover={{ scale: 1.01 }}\n              whileTap={{ scale: 0.99 }}\n              className=\"group flex items-center justify-between gap-3 rounded-xl border border-gray-200 bg-white p-4 text-left shadow-sm transition-colors hover:border-hsecondary-400\"\n            >\n              <div className=\"min-w-0\">\n                <p className=\"truncate font-medium text-gray-900\">{v.name}</p>\n                {v.description && <p className=\"truncate text-xs text-gray-500\">{v.description}</p>}\n              </div>\n              <span className=\"inline-flex shrink-0 items-center gap-1.5 rounded-full bg-hprimary-600 px-3.5 py-1.5 text-xs font-semibold text-white shadow-sm transition-colors group-hover:bg-hprimary-700\">\n                Book\n                <ArrowRight className=\"h-3.5 w-3.5 transition-transform group-hover:translate-x-0.5\" />\n              </span>\n            </motion.button>\n          ))}\n        </div>\n      </div>\n    </motion.div>\n  );\n}\n"]}