import { useQuery } from "@tanstack/react-query";
import api from "@/lib/axios";
import { DailyAnalysis, AnalysisContact, AnalysisFailedMessage, BranchAnalysisData } from "@/types/analysis";
import { ApiResponseDetail } from "@/types/response";

export const useDailyAnalysis = (month: number, year: number) => {
    const accountId = process.env.NEXT_PUBLIC_APP_ACCOUNT_ID_WHATSAPP_SERVICE;

    return useQuery({
        queryKey: ["analysis", "daily", month, year],
        queryFn: async () => {
            const response = await api.get<ApiResponseDetail<DailyAnalysis[]>>("/api/analysis/daily", {
                params: { month, year, account_id:accountId }
            });
            // The controller returns: { status: 'success', data: [...] }
            // ApiResponseDetail expects: { message: string, data: T }
            // Axios response.data will have { status, data }. 
            // We need to match what the API actually returns.
            // If the API returns 'data' field, then response.data.data is the array.
            return response.data.data;
        },
    });
};

export const useAnalysisContacts = (date: string | null, branchName: string | null = null) => {
    const accountId = process.env.NEXT_PUBLIC_APP_ACCOUNT_ID_WHATSAPP_SERVICE;

    return useQuery({
        queryKey: ["analysis", "contacts", date, branchName],
        queryFn: async () => {
            if (!date) return [];
            const params: Record<string, any> = { date, account_id:accountId };
            if (branchName) {
                params.branch_name = branchName;
            }
            const response = await api.get<ApiResponseDetail<AnalysisContact[]>>("/api/analysis/contacts", { params });
            return response.data.data;
        },
        enabled: !!date,
    });
};

export const useBranchAnalysis = (month: number, year: number) => {
    const accountId = process.env.NEXT_PUBLIC_APP_ACCOUNT_ID_WHATSAPP_SERVICE;

    return useQuery({
        queryKey: ["analysis", "branch", month, year],
        queryFn: async () => {
            const response = await api.get<ApiResponseDetail<BranchAnalysisData>>("/api/analysis/branch", {
                params: { month, year, account_id: accountId }
            });
            return response.data.data;
        },
    });
};

export const useAnalysisFailedMessages = (date: string | null) => {
    const accountId = process.env.NEXT_PUBLIC_APP_ACCOUNT_ID_WHATSAPP_SERVICE;
    return useQuery({
        queryKey: ["analysis", "failed-messages", date],
        queryFn: async () => {
             if (!date) return [];
            const response = await api.get<ApiResponseDetail<AnalysisFailedMessage[]>>("/api/analysis/failed-messages", {
                params: { date, account_id :accountId }
            });
            return response.data.data;
        },
        enabled: !!date,
    });
};

export const useUserAnalysis = (month: number, year: number) => {
    const accountId = process.env.NEXT_PUBLIC_APP_ACCOUNT_ID_WHATSAPP_SERVICE;

    return useQuery({
        queryKey: ["analysis", "users", month, year],
        queryFn: async () => {
            const response = await api.get<ApiResponseDetail<any[]>>("/api/analysis/users", {
                params: { month, year, account_id: accountId }
            });
            return response.data.data;
        },
    });
};

export const useMonthlyContactsAnalysis = (
    month: number, 
    year: number, 
    branchName?: string | string[] | null,
    search?: string,
    is_customer?: string,
    deal?: string
) => {
    const accountId = process.env.NEXT_PUBLIC_APP_ACCOUNT_ID_WHATSAPP_SERVICE;

    return useQuery({
        queryKey: ["analysis", "contacts-monthly", month, year, branchName, search, is_customer, deal],
        queryFn: async () => {
            const params: Record<string, any> = { month, year, account_id: accountId };
            if (branchName) {
                params.branch_name = branchName;
            }
            if (search) {
                params.search = search;
            }
            if (is_customer) {
                params.is_customer = is_customer;
            }
            if (deal) {
                params.deal = deal;
            }
            // Import MonthlyContactAnalysisData from types
            const response = await api.get<ApiResponseDetail<import("@/types/analysis").MonthlyContactAnalysisData>>("/api/analysis/contacts-monthly", {
                params
            });
            return response.data.data;
        },
    });
};

export const useSlowResponsesAnalysis = (
    month: number, 
    year: number, 
    branchName?: string | string[] | null
) => {
    const accountId = process.env.NEXT_PUBLIC_APP_ACCOUNT_ID_WHATSAPP_SERVICE;

    return useQuery({
        queryKey: ["analysis", "slow-responses", month, year, branchName],
        queryFn: async () => {
            const params: Record<string, any> = { month, year, account_id: accountId };
            if (branchName) {
                params.branch_name = branchName;
            }
            const response = await api.get<ApiResponseDetail<import("@/types/analysis").SlowResponseAnalysis[]>>("/api/analysis/slow-responses", {
                params
            });
            return response.data.data;
        },
    });
};
