'use client'
import { useEffect, useState } from 'react';
import { useQuery } from '@tanstack/react-query';
import moment from 'moment';
import Cookies from 'js-cookie';
import AdminCampaignTable from './AdminCampaignTable';
import { useTranslation } from '@/Utils/Hooks/useTranslate';
import { AdminCampaignAPI, BaseURL, GetExportCampaignAnalyticsReportAPI } from '@/Utils/APIRequest/Endpoints';
import CustomFetch from '@/Utils/APIRequest/AxiosInstance';
import ExportModal from '@/Component/Common/ExportModal';

const AdminCampaignList = () => {
    const { translations } = useTranslation();
    const [search, setSearch] = useState('');
    const [deleteModal, setDeleteModal] = useState<any>(null);
    const [params, setParams] = useState({ page: 1, per_page: 50, sort_by: "created_at", sort: "DESC" });

    const [openExportModal, setOpenExportModal] = useState(false)
    const [campaignId, setCampaignId] = useState("")
    const [exportSearch, setExportSearch] = useState("")
    const [dateRange, setDateRange] = useState<any>([moment().subtract(15, 'days').format('YYYY-MM-DD'), moment().format('YYYY-MM-DD')]);
    const [excelData, setExcelData] = useState(false);

    // API GET
    const { data: AdminCampaignData, isPending, fetchStatus, refetch } = useQuery({ queryKey: [AdminCampaignAPI, search, params], queryFn: () => CustomFetch({ url: AdminCampaignAPI, params: { search: search, ...params } }, null, false), refetchOnWindowFocus: false, select: (data) => data?.data })

    const { data, refetch: refetchExport, fetchStatus: GetExportFetchStatus } = useQuery({
        queryKey: [GetExportCampaignAnalyticsReportAPI, exportSearch, params], queryFn: () => CustomFetch({
            url: GetExportCampaignAnalyticsReportAPI, params: { search: exportSearch ? exportSearch : null, start_date: moment(dateRange[0]).format('YYYY-MM-DD'), end_date: moment(dateRange[1]).format('YYYY-MM-DD'), campaign_id: campaignId ? campaignId : null, access_token: Cookies.get('aat') || Cookies.get("verifyUAT") }
        }, null, false), enabled: false, refetchOnWindowFocus: false, select: (data) => data?.data
    })

    useEffect(() => {
        const exportFile = async () => {
            try {
                const res = await refetchExport(); // run the query manually
                const exportData = res.data;

                if (!exportData) throw new Error("No data returned from export");

                const startDate = moment(dateRange[0]).format('YYYY-MM-DD');
                const endDate = moment(dateRange[1]).format('YYYY-MM-DD');
                const access_token = Cookies.get('aat') || Cookies.get("verifyUAT");

                let str = `${BaseURL}${GetExportCampaignAnalyticsReportAPI}?start_date=${startDate}&end_date=${endDate}&access_token=${access_token}`
                if (campaignId) str += `&campaign_id=${campaignId}`;
                if (exportSearch) str += `&search=${exportSearch}`;

                const check = await fetch(str, { method: 'GET' });
                const isJSON = check.headers.get('Content-Type')?.includes('application/json');

                if (!check.ok || isJSON) {
                    const errorText = await check.text();
                    throw new Error(errorText || "Export failed");
                }

                setOpenExportModal(false);
                window.location.href = str;
            } catch (err) {
                console.error("Export failed:", err);
                // alert("Export failed. Please try again or change filters.");
            } finally {
                setExcelData(false);
                setCampaignId('')
            }
        };

        if (excelData) exportFile();
    }, [excelData]);

    const callbackFunction = () => {
        setOpenExportModal(true)
    }

    const exportExcelFunction = () => {
        setExcelData(true);
    }

    return (
        <>
            <AdminCampaignTable
                searchBtnProps={{
                    setSearch: setSearch,
                    title: "Export",
                    callBack: callbackFunction
                }}
                apiData={{
                    data: AdminCampaignData,
                    params: params,
                    setParams: setParams,
                    isPending: isPending,
                    refetch: refetch,
                    fetchStatus: fetchStatus
                }}
                search={search}
                deleteModal={deleteModal}
                setDeleteModal={setDeleteModal}
                translations={translations}
                refetch={refetch}
            />
            {openExportModal && <ExportModal modal={openExportModal} setModal={setOpenExportModal} callbackFunction={exportExcelFunction} dateRange={dateRange} setDateRange={setDateRange} campaignId={campaignId} setCampaignId={setCampaignId} campaignProps={true} exportSearch={exportSearch} setExportSearch={setExportSearch} loader={GetExportFetchStatus == "fetching"} headerTitle={"Export Campaign Analytics Data"} />}
        </>
    )
}
export default AdminCampaignList;
