"use client";

import CheckoutDetails from "./CheckoutDetails";
import OrderSummary from "../cart/OrderSummary";
import axiosInstance from "@/services/axiosClient";
import toast from "react-hot-toast";
import { useTranslations } from "next-intl";
import { useState } from "react";
import { Form } from "antd";
import { showDynamicSwal } from "@/utils/helpers";
import { useRouter } from "next/navigation";
import { useDispatch, useSelector } from "react-redux";
import { AppDispatch, RootState } from "@/store/store";
import { getAllCartItems, setCouponCode } from "@/store/cart";
import Success from "@/assets/images/success2.gif";
import { openAddressModal } from "@/store/address";

const CheckoutWrap = () => {
  const [form] = Form.useForm();
  const t = useTranslations("");
  const [loading, setLoading] = useState(false);
  const router = useRouter();
  const {discount_code,cartLength,priceDetails} = useSelector((state: RootState) => state.cartConfig);
  const dispatch = useDispatch<AppDispatch>();

  const handleCreateOrder = async () => {
    try {
      setLoading(true);
      await form.validateFields();

      const formData = form.getFieldsValue();
      const payload = {
        ...formData,
        ...(discount_code ? { code: discount_code } : {}),
      };

      if (!payload.location_id) {
        toast.error(t("Messages.select_location"));
        dispatch(openAddressModal({ step: 0 }));
        setLoading(false);
        return;
      }

      const { data } = await axiosInstance.post(`/orders`, payload);

      if (data) {
        dispatch(setCouponCode(null))
        const result = await showDynamicSwal({
          title: t("orders.success_order"),
          imageUrl: `${Success.src}`,
          text: "",
          confirmButtonText: t("orders.track_order"),
          showCancelButton: false,
          customClass: {
            title: "swal-title",
            text: "hidden",
            confirmButton: "app-btn",
          },
          willClose: () => {
            router.push("/account/orders");
            dispatch(getAllCartItems());
          }
        });

        if (result.isConfirmed) {
          router.push("/account/orders");
          dispatch(getAllCartItems());
        }
      }
    } catch (error: any) {
      console.error("Order creation failed", error);
      if (error?.response) {
        setLoading(false)
        await showDynamicSwal({
          title: error.response.data?.message || "Order creation failed",
          icon: "error",
          text: "",
          confirmButtonText: t("orders.try_another_mehtod"),
          showCancelButton: false,
          customClass: {
            title: "swal-title",
            confirmButton: "app-btn",
          },
        });
      }
    } finally {
      setLoading(false);
    }
  };

  return (
    <section className="checkout_page">
      <div className="checkout_content_wrapper">
        <CheckoutDetails form={form} />
        <div className="checkout_details_wrapper">
          <OrderSummary
            cartLength={cartLength}
            orderDetails={priceDetails}
            isCheckout
            createOrder={handleCreateOrder}
            loading={loading}
          />
        </div>
      </div>
    </section>
  );
};


export default CheckoutWrap;
