'use client';

import { useEffect } from 'react';
import { initializePaddle, Paddle } from '@paddle/paddle-js';

export let paddleInstance: Paddle | undefined;

// ---------------------------------------------------------------------------
// Per-checkout event handler
// The pricing page calls setPaddleCheckoutHandlers before opening a checkout.
// Handlers are cleared after the overlay closes.
// ---------------------------------------------------------------------------
export type PaddleCheckoutHandlers = {
  onCompleted?: (transactionId: string) => void;
  onClosed?: () => void;
};

let currentHandlers: PaddleCheckoutHandlers = {};
let checkoutCompleted = false;

export function setPaddleCheckoutHandlers(handlers: PaddleCheckoutHandlers) {
  currentHandlers = handlers;
  checkoutCompleted = false;
}

export function PaddleProvider({ children }: { children: React.ReactNode }) {
  useEffect(() => {
    const token = process.env.NEXT_PUBLIC_PADDLE_CLIENT_TOKEN;
    if (!token) return;

    const env = (process.env.NEXT_PUBLIC_PADDLE_ENVIRONMENT || 'sandbox') as
      | 'sandbox'
      | 'production';

    initializePaddle({
      environment: env,
      token,
      eventCallback(event) {
        if (event.name === 'checkout.completed') {
          checkoutCompleted = true;
          const transactionId = (event.data as any)?.transaction_id;
          if (transactionId) {
            currentHandlers.onCompleted?.(transactionId);
          }
        }

        if (event.name === 'checkout.closed') {
          if (!checkoutCompleted) {
            // User closed without paying
            currentHandlers.onClosed?.();
          }
          // Reset for next checkout
          currentHandlers = {};
          checkoutCompleted = false;
        }
      },
    }).then((paddle) => {
      if (paddle) {
        paddleInstance = paddle;
      }
    });
  }, []);

  return <>{children}</>;
}
