import { useEffect, useState } from "react";
import axios from "axios";
import { useRouter } from "next/router";
import Cookies from "js-cookie";
import { SyncOutlined } from "@ant-design/icons";
import { Spin } from "antd";
import toast from "react-hot-toast";
import ConfirmOrder from "./confirmOrder";
import Head from "next/head";
import Image from "next/image";
// import { orderInterface } from '@/INTERFACES/order';

const apiKey = process.env.NEXT_PUBLIC_API_KEY;
let apiLiveKey = process.env.NEXT_PUBLIC_API_LIVE_KEY;
const antIcon = <SyncOutlined style={{ fontSize: 44, color: "#fff" }} spin />;

const PaymentCallback = () => {
  const router = useRouter();
  const { reference } = router.query;

  const [isOrderPlace, setOrderPlace] = useState<any>();
  const [loading, setLoading] = useState(true);

  const authToken = Cookies.get("jazz_token");

  // Configure the Axios instance with the authorization header
  const axiosInstance = axios.create({
    baseURL: "https://api.jazzagain.com/public/index.php",
    headers: {
      authorization: `Bearer ${authToken}`,
    },
  });

  useEffect(() => {
    // 🛑 CRITICAL PRODUCTION FIX: Jab tak Next.js router ready na ho, execution roko
    if (!router.isReady) return;

    if (!reference) {
      console.log("Waiting for reference from URL params...");
      return;
    }

    const verifyPayment = async () => {
      console.log("PRODUCTION VERIFICATION REFERENCE =>", reference);

      const primaryKey =
        process.env.NODE_ENV === "production" ? apiLiveKey : apiKey;
      const fallbackKey =
        process.env.NODE_ENV === "production" ? apiKey : apiLiveKey;

      try {
        let response;
        try {
          response = await axios.get(
            `https://api.paystack.co/transaction/verify/${reference}`,
            {
              headers: {
                Authorization: `Bearer ${primaryKey}`,
              },
            },
          );
        } catch (initialError: any) {
          if (fallbackKey && fallbackKey !== primaryKey) {
            console.log("Primary key failed, trying fallback key...");
            response = await axios.get(
              `https://api.paystack.co/transaction/verify/${reference}`,
              {
                headers: {
                  Authorization: `Bearer ${fallbackKey}`,
                },
              },
            );
          } else {
            throw initialError;
          }
        }
        console.log("Paystack verification response:", response.data);

        const paymentStatus = response.data?.data?.status;
        const paystackReference = response.data?.data?.reference;

        console.log("paystackReference:", paystackReference);

        const orderId =
          response.data?.data?.metadata?.order_id ||
          response.data?.data?.metadata?.orderResponse?.orderId;

        console.log("Retrieved OrderID:", orderId);

        if (paymentStatus !== "success") {
          toast.error("Payment not successful");
          setLoading(false);
          return;
        }

        if (!orderId) {
          toast.error("Order ID not found in metadata");
          setLoading(false);
          return;
        }

        const url = `/api/user/orders/${orderId}/edit`;
        const res = await axiosInstance.get(url);

        console.log("Order verification response:", res.data);

        const orderData = res.data?.order || res.data?.data || res.data;
        console.log("Order data retrieved:", orderData);
        setOrderPlace({
          ...orderData,
          paystackReference,
          orderId,
        });

        setLoading(false);
      } catch (error: any) {
        console.error("Error verifying payment:", error);
        toast.error(error.response?.data?.message || "Verification failed");
        setLoading(false);
      }
    };

    verifyPayment();
  }, [reference, router.isReady]);

  console.log("isOrderPlace:", isOrderPlace);

  return (
    <>
      <Head>
        <link rel="shortcut icon" href="/images/jazzagian-logo.png" />
        <script
          dangerouslySetInnerHTML={{
            __html: `
              !function(f,b,e,v,n,t,s)
              {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
              n.callMethod.apply(n,arguments):n.queue.push(arguments)};
              if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
              n.queue=[];t=b.createElement(e);t.async=!0;
              t.src=v;s=b.getElementsByTagName(e)[0];
              s.parentNode.insertBefore(t,s)}(window, document,'script',
              'https://connect.facebook.net/en_US/fbevents.js');
              fbq('init', '360254480441103');
              fbq('track', 'PaymentCallback');
            `,
          }}
        />
        <noscript>
          <Image
            height="1"
            width="1"
            alt=""
            style={{ display: "none" }}
            src="https://www.facebook.com/tr?id=360254480441103&ev=PaymentCallback&noscript=1"
          />
        </noscript>
      </Head>

      {loading ? (
        <div className="fixed inset-0 flex items-center justify-center bg-black bg-opacity-70 z-50 ">
          <div className="text-white text-2xl text-center">
            <Spin indicator={antIcon} className="m-4" />
            <br />
            Your transaction is in process...
          </div>
        </div>
      ) : (
        // <PaymentStatus details={isOrderPlace}/>
        <ConfirmOrder details={isOrderPlace} />
      )}
    </>
  );
};

export default PaymentCallback;
