{"version":3,"file":"globalConstructor-gbhYnaPP.mjs","names":[],"sources":["../../src/embed/globalConstructor.ts"],"sourcesContent":["/**\n * Global constructor for PaymentCheckout\n * Provides a fluent API for creating checkout instances\n */\n\nimport type { CheckoutConfig } from '../types';\nimport { parseDataAttributes } from './attributeParser';\nimport { PaymentCheckout } from '../PaymentCheckout';\n\nexport interface GlobalCheckoutConfig extends CheckoutConfig {}\n\nexport class GlobalCheckoutBuilder {\n  private config: Partial<GlobalCheckoutConfig> = {};\n\n  creatorId(id: string): this {\n    this.config.creatorId = id;\n    return this;\n  }\n\n  productId(id: string): this {\n    this.config.productId = id;\n    return this;\n  }\n\n  bumpProductIds(ids: string[]): this {\n    this.config.bumpProductIds = ids;\n    return this;\n  }\n\n  couponCode(code: string): this {\n    this.config.couponCode = code;\n    return this;\n  }\n\n  affiliateCode(code: string): this {\n    this.config.affiliateCode = code;\n    return this;\n  }\n\n  checkoutSessionSecret(secret: string): this {\n    this.config.checkoutSessionSecret = secret;\n    return this;\n  }\n\n  environment(env: 'sandbox' | 'production'): this {\n    this.config.environment = env;\n    return this;\n  }\n\n  overrideBaseUrl(url: string): this {\n    this.config.overrideBaseUrl = url;\n    return this;\n  }\n\n  theme(theme: GlobalCheckoutConfig['theme']): this {\n    this.config.theme = theme!;\n    return this;\n  }\n\n  containerOptions(options: { width?: string; height?: string }): this {\n    this.config.containerOptions = options!;\n    return this;\n  }\n\n  redirectSettings(settings: GlobalCheckoutConfig['redirectSettings']): this {\n    this.config.redirectSettings = settings!;\n    return this;\n  }\n\n  showSubmitButton(show: boolean): this {\n    this.config.showSubmitButton = show;\n    return this;\n  }\n\n  build(): any {\n    if (!this.config.creatorId) {\n      throw new Error('Creator ID is required. Use .creatorId() to set it.');\n    }\n    if (!this.config.productId) {\n      throw new Error('Product ID is required. Use .productId() to set it.');\n    }\n    if (!this.config.checkoutSessionSecret) {\n      throw new Error('Checkout session secret is required. Use .checkoutSessionSecret() to set it.');\n    }\n\n    // Set default environment if not provided\n    if (!this.config.environment) {\n      this.config.environment = 'sandbox';\n    }\n\n    // Import PaymentCheckout dynamically\n    return new PaymentCheckout(this.config as GlobalCheckoutConfig);\n  }\n\n  attachTo(element: HTMLElement): Promise<any> {\n    return this.build().then((checkout: any) => {\n      checkout.attachToElement(element);\n      return checkout;\n    });\n  }\n}\n\nexport interface GlobalPaymentCheckout {\n  create(config?: GlobalCheckoutConfig): PaymentCheckout | GlobalCheckoutBuilder;\n  fromElement(element: HTMLElement, config?: GlobalCheckoutConfig): Promise<any>;\n  autoInitialize(selector?: string): void;\n  loadScript(url?: string): Promise<void>;\n  isAvailable(): boolean;\n}\n\nexport function initializeGlobalConstructor(): void {\n  if (typeof window === 'undefined') {\n    return;\n  }\n\n  // Check if already initialized\n  if ((window as any).PaymentCheckout) {\n    return;\n  }\n\n  const PaymentCheckoutGlobal: GlobalPaymentCheckout = {\n    create(configOrBuilder?: GlobalCheckoutConfig): PaymentCheckout | GlobalCheckoutBuilder {\n      if (configOrBuilder) {\n        // Direct config creation\n        return new PaymentCheckout(configOrBuilder);\n      } else {\n        // Fluent builder\n        return new GlobalCheckoutBuilder();\n      }\n    },\n\n    fromElement(element: HTMLElement, config?: GlobalCheckoutConfig): Promise<any> {\n      if (config) {\n        return import('../PaymentCheckout').then(({ PaymentCheckout }) => {\n          return PaymentCheckout.fromElement(element, config);\n        });\n      }\n      \n      // Try to parse config from data attributes\n      const parsedConfig = parseDataAttributes(element);\n      \n      if (!parsedConfig.creatorId || !parsedConfig.productId || !parsedConfig.checkoutSessionSecret) {\n        throw new Error('Element must have data-creator-id, data-product-id, and data-checkout-session-secret attributes, or provide config parameter');\n      }\n\n      // create wrapper element\n      element.innerHTML = '';\n      const wrapperElement = document.createElement('div');\n      wrapperElement.className = 'fb-checkout-wrapper';\n      wrapperElement.style.display = 'flex';\n      wrapperElement.style.width = '100%';\n      wrapperElement.style.height = '100%';\n      element.appendChild(wrapperElement);\n      \n      return import('../PaymentCheckout').then(({ PaymentCheckout }) => {\n        const checkout = PaymentCheckout.fromElement(wrapperElement, parsedConfig);\n        checkout.init();\n        return checkout;\n      });\n    },\n\n    autoInitialize(selector = '[data-checkout]'): void {\n      // Auto-initialization logic would go here\n      console.log('Auto-initialization not yet implemented');\n    },\n\n    loadScript(url?: string): Promise<void> {\n      return new Promise((resolve, reject) => {\n        if (document.querySelector('script[src*=\"checkout\"]')) {\n          resolve();\n          return;\n        }\n\n        const script = document.createElement('script');\n        script.src = url || 'https://cdn.fanbasis.com/checkout/latest.js';\n        script.async = true;\n        script.onload = () => resolve();\n        script.onerror = () => reject(new Error('Failed to load checkout script'));\n        \n        document.head.appendChild(script);\n      });\n    },\n\n    isAvailable(): boolean {\n      return typeof (window as any).PaymentCheckout !== 'undefined';\n    }\n  };\n\n  // Expose to global scope\n  (window as any).PaymentCheckout = PaymentCheckoutGlobal;\n  (window as any).FanbasisCheckout = PaymentCheckoutGlobal; // Alternative name\n}\n\n// Note: parseDataAttributes is now imported from attributeParser.ts "],"mappings":"yNAWa,EAAb,KAAmC,eACjC,KAAQ,OAAwC,EAAE,CAElD,UAAU,EAAkB,CAE1B,MADA,MAAK,OAAO,UAAY,EACjB,KAGT,UAAU,EAAkB,CAE1B,MADA,MAAK,OAAO,UAAY,EACjB,KAGT,eAAe,EAAqB,CAElC,MADA,MAAK,OAAO,eAAiB,EACtB,KAGT,WAAW,EAAoB,CAE7B,MADA,MAAK,OAAO,WAAa,EAClB,KAGT,cAAc,EAAoB,CAEhC,MADA,MAAK,OAAO,cAAgB,EACrB,KAGT,sBAAsB,EAAsB,CAE1C,MADA,MAAK,OAAO,sBAAwB,EAC7B,KAGT,YAAY,EAAqC,CAE/C,MADA,MAAK,OAAO,YAAc,EACnB,KAGT,gBAAgB,EAAmB,CAEjC,MADA,MAAK,OAAO,gBAAkB,EACvB,KAGT,MAAM,EAA4C,CAEhD,MADA,MAAK,OAAO,MAAQ,EACb,KAGT,iBAAiB,EAAoD,CAEnE,MADA,MAAK,OAAO,iBAAmB,EACxB,KAGT,iBAAiB,EAA0D,CAEzE,MADA,MAAK,OAAO,iBAAmB,EACxB,KAGT,iBAAiB,EAAqB,CAEpC,MADA,MAAK,OAAO,iBAAmB,EACxB,KAGT,OAAa,CACX,GAAI,CAAC,KAAK,OAAO,UACf,MAAU,MAAM,sDAAsD,CAExE,GAAI,CAAC,KAAK,OAAO,UACf,MAAU,MAAM,sDAAsD,CAExE,GAAI,CAAC,KAAK,OAAO,sBACf,MAAU,MAAM,+EAA+E,CASjG,OALK,KAAK,OAAO,cACf,KAAK,OAAO,YAAc,WAIrB,IAAI,EAAgB,KAAK,OAA+B,CAGjE,SAAS,EAAoC,CAC3C,OAAO,KAAK,OAAO,CAAC,KAAM,IACxB,EAAS,gBAAgB,EAAQ,CAC1B,GACP,GAYN,SAAgB,GAAoC,CAMlD,GALI,OAAO,OAAW,KAKjB,OAAe,gBAClB,OAGF,IAAM,EAA+C,CACnD,OAAO,EAAiF,CAMpF,OALE,EAEK,IAAI,EAAgB,EAAgB,CAGpC,IAAI,GAIf,YAAY,EAAsB,EAA6C,CAC7E,GAAI,EACF,OAAO,OAAO,kCAAA,KAAA,GAAA,EAAA,EAAA,CAAsB,MAAM,CAAE,qBACnC,EAAgB,YAAY,EAAS,EAAO,CACnD,CAIJ,IAAM,EAAe,EAAoB,EAAQ,CAEjD,GAAI,CAAC,EAAa,WAAa,CAAC,EAAa,WAAa,CAAC,EAAa,sBACtE,MAAU,MAAM,+HAA+H,CAIjJ,EAAQ,UAAY,GACpB,IAAM,EAAiB,SAAS,cAAc,MAAM,CAOpD,MANA,GAAe,UAAY,sBAC3B,EAAe,MAAM,QAAU,OAC/B,EAAe,MAAM,MAAQ,OAC7B,EAAe,MAAM,OAAS,OAC9B,EAAQ,YAAY,EAAe,CAE5B,OAAO,kCAAA,KAAA,GAAA,EAAA,EAAA,CAAsB,MAAM,CAAE,qBAAsB,CAChE,IAAM,EAAW,EAAgB,YAAY,EAAgB,EAAa,CAE1E,OADA,EAAS,MAAM,CACR,GACP,EAGJ,eAAe,EAAW,kBAAyB,CAEjD,QAAQ,IAAI,0CAA0C,EAGxD,WAAW,EAA6B,CACtC,OAAO,IAAI,SAAS,EAAS,IAAW,CACtC,GAAI,SAAS,cAAc,0BAA0B,CAAE,CACrD,GAAS,CACT,OAGF,IAAM,EAAS,SAAS,cAAc,SAAS,CAC/C,EAAO,IAAM,GAAO,8CACpB,EAAO,MAAQ,GACf,EAAO,WAAe,GAAS,CAC/B,EAAO,YAAgB,EAAW,MAAM,iCAAiC,CAAC,CAE1E,SAAS,KAAK,YAAY,EAAO,EACjC,EAGJ,aAAuB,CACrB,OAAe,OAAe,kBAAoB,QAErD,CAGA,OAAe,gBAAkB,EACjC,OAAe,iBAAmB"}