import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import api from "@/lib/axios";
import { toast } from "sonner";
import { useDebounce } from "use-debounce";

export interface Template {
    id: string;
    name: string;
    status: string;
    status_name: string;
    category: string;
    template_category?: number;
    template_category_name?: string;
    language: string;
    created_by: string;
    updated_by: string;
    created_at: string;
    updated_at: string;
    is_created_today?: boolean;
    is_update_today?: boolean;
    components?: any[];
    messages_sent?: number;
    messages_failed?: number;
}

export const useGetTemplates = (page: number, searchInput: string) => {
    const accountId = process.env.NEXT_PUBLIC_APP_ACCOUNT_ID_WHATSAPP_SERVICE;
    const [search] = useDebounce(searchInput, 500);

    return useQuery({
        queryKey: ["whatsapp-templates", accountId, page, search],
        queryFn: async () => {
            const response = await api.get(`/api/templates`, {
                params: {
                    account_id: accountId,
                    page: page,
                    search: search
                }
            });
            // Matches amagriya-next structure: response.data.data.meta and response.data.data.result
            return response.data.data;
        },
    });
};

export const useGetTemplate = (id: string | null) => {
    return useQuery({
        queryKey: ["whatsapp-templates", id],
        queryFn: async () => {
            if (!id) return null;
            const response = await api.get(`/api/templates/${id}`);
            return response.data.data;
        },
        enabled: !!id
    });
};

export const useGetTemplateCategories = () => {
    return useQuery({
        queryKey: ["whatsapp-template-categories"],
        queryFn: async () => {
            const response = await api.get(`/api/templates/categories`);
            return response.data.data;
        }
    });
};

export const useAddTemplate = () => {
    const queryClient = useQueryClient();
    const accountId = process.env.NEXT_PUBLIC_APP_ACCOUNT_ID_WHATSAPP_SERVICE;

    return useMutation({
        mutationFn: async (payload: FormData) => {
            if (!payload.has('account_id') && accountId) {
                payload.append('account_id', accountId);
            }
            const response = await api.post(`/api/templates`, payload, {
                headers: {
                    "Content-Type": "multipart/form-data",
                }
            });
            return response.data;
        },
        onSuccess: (response) => {
            toast.success(response.message || "Template berhasil ditambahkan");
            queryClient.invalidateQueries({ queryKey: ["whatsapp-templates"] });
        },
        onError: (error: any) => {
            if (error.status === 422 && error.response?.data?.data) {
                let message = "";
                Object.keys(error.response?.data?.data).map((key: any) => {
                    message = error.response?.data?.data[key][0];
                });
                toast.error(message);
            } else {
                toast.error(error.response?.data?.message || "Gagal menambahkan template");
            }
        }
    });
};

export const useUpdateTemplate = (id: string) => {
    const queryClient = useQueryClient();
    const accountId = process.env.NEXT_PUBLIC_APP_ACCOUNT_ID_WHATSAPP_SERVICE;

    return useMutation({
        mutationFn: async (payload: FormData) => {
            if (!payload.has('account_id') && accountId) {
                payload.append('account_id', accountId);
            }
            payload.append('_method', 'PUT');
            const response = await api.post(`/api/templates/${id}`, payload, {
                headers: {
                    "Content-Type": "multipart/form-data",
                }
            });
            return response.data;
        },
        onSuccess: (response) => {
            toast.success(response.message || "Template berhasil diupdate");
            queryClient.invalidateQueries({ queryKey: ["whatsapp-templates"] });
        },
        onError: (error: any) => {
            if (error.status === 422 && error.response?.data?.data) {
                let message = "";
                Object.keys(error.response?.data?.data).map((key: any) => {
                    message = error.response?.data?.data[key][0];
                });
                toast.error(message);
            } else {
                toast.error(error.response?.data?.message || "Gagal mengupdate template");
            }
        }
    });
};

export const useDeleteTemplate = () => {
    const queryClient = useQueryClient();

    return useMutation({
        mutationFn: async (id: string) => {
            const response = await api.delete(`/api/templates/${id}`);
            return response.data;
        },
        onSuccess: (response) => {
            toast.success(response.message || "Template berhasil dihapus");
            queryClient.invalidateQueries({ queryKey: ["whatsapp-templates"] });
        },
        onError: (error: any) => {
            toast.error(error.response?.data?.message || "Gagal menghapus template");
        }
    });
};
