import { RazorpayResponse } from "../types/razorpay";

interface OpenRazorpayParams {
  key: string;
  subscriptionId: string;
  planName: string;
  prefillName?: string;
  prefillEmail?: string;
  prefillContact?: string;
  onSuccess: (response: RazorpayResponse) => void;
  onDismiss?: () => void;
}

export const loadRazorpayScript = (): Promise<boolean> => {
  return new Promise((resolve) => {
    if (typeof window === "undefined") {
      resolve(false);
      return;
    }

    if (window.Razorpay) {
      resolve(true);
      return;
    }

    const existingScript = document.getElementById("razorpay-checkout-script");
    if (existingScript) {
      existingScript.addEventListener("load", () => resolve(true));
      existingScript.addEventListener("error", () => resolve(false));
      return;
    }

    const script = document.createElement("script");
    script.id = "razorpay-checkout-script";
    script.src = "https://checkout.razorpay.com/v1/checkout.js";
    script.onload = () => resolve(true);
    script.onerror = () => resolve(false);
    document.body.appendChild(script);
  });
};

export const openRazorpay = ({
  key,
  subscriptionId,
  planName,
  prefillName,
  prefillEmail,
  prefillContact,
  onSuccess,
  onDismiss,
}: OpenRazorpayParams) => {
  if (typeof window === "undefined" || !window.Razorpay) {
    console.error("Razorpay SDK not loaded");
    return;
  }

  const razorpay = new window.Razorpay({
    key,
    subscription_id: subscriptionId,
    name: "RxSathi",
    description: `${planName} Plan Subscription`,
    prefill: {
      name: prefillName,
      email: prefillEmail,
      contact: prefillContact,
    },
    theme: {
      color: "#4f46e5",
    },
    handler: (response) => {
      onSuccess(response);
    },
    modal: {
      ondismiss: () => {
        if (onDismiss) onDismiss();
      },
    },
  });

  razorpay.open();
};