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

export interface Socialization {
    id: number;
    whatsapp_account_id?: number | null;
    title: string;
    description: string | null;
    displayed: string | null;
    status: number;
}

export interface SocializationPayload {
    whatsapp_account_id?: string;
    title: string;
    description?: string | null;
    status?: number;
}

export const useSocializations = () => {
    const accountId = process.env.NEXT_PUBLIC_APP_ACCOUNT_ID_WHATSAPP_SERVICE || "";

    return useQuery({
        queryKey: ["socializations", accountId],
        queryFn: async () => {
            const { data } = await api.get<{ data: Socialization[] }>("/api/whatsapp/socializations", {
                params: { whatsapp_account_id: accountId },
                headers: {
                    "whatsapp-account-id": accountId,
                },
            });
            return data.data;
        },
        enabled: !!accountId,
    });
};

export const useCreateSocialization = () => {
    const queryClient = useQueryClient();
    const accountId = process.env.NEXT_PUBLIC_APP_ACCOUNT_ID_WHATSAPP_SERVICE || "";

    return useMutation({
        mutationFn: async (payload: SocializationPayload) => {
            const { data } = await api.post(
                "/api/whatsapp/socializations",
                {
                    whatsapp_account_id: accountId,
                    ...payload,
                },
                {
                    headers: {
                        "whatsapp-account-id": accountId,
                    },
                }
            );
            return data;
        },
        onSuccess: () => {
            queryClient.invalidateQueries({ queryKey: ["socializations", accountId] });
            toast.success("Sosialisasi berhasil ditambahkan");
        },
        onError: (error: any) => {
            toast.error(error?.response?.data?.message || "Gagal menambahkan sosialisasi");
        },
    });
};

export const useUpdateSocialization = () => {
    const queryClient = useQueryClient();
    const accountId = process.env.NEXT_PUBLIC_APP_ACCOUNT_ID_WHATSAPP_SERVICE || "";

    return useMutation({
        mutationFn: async ({ id, payload }: { id: number; payload: Partial<SocializationPayload> }) => {
            const { data } = await api.put(
                `/api/whatsapp/socializations/${id}`,
                {
                    whatsapp_account_id: accountId,
                    ...payload,
                },
                {
                    headers: {
                        "whatsapp-account-id": accountId,
                    },
                }
            );
            return data;
        },
        onSuccess: () => {
            queryClient.invalidateQueries({ queryKey: ["socializations", accountId] });
            toast.success("Sosialisasi berhasil diperbarui");
        },
        onError: (error: any) => {
            toast.error(error?.response?.data?.message || "Gagal memperbarui sosialisasi");
        },
    });
};

export const useDeleteSocialization = () => {
    const queryClient = useQueryClient();
    const accountId = process.env.NEXT_PUBLIC_APP_ACCOUNT_ID_WHATSAPP_SERVICE || "";

    return useMutation({
        mutationFn: async (id: number) => {
            const { data } = await api.delete(`/api/whatsapp/socializations/${id}`, {
                params: { whatsapp_account_id: accountId },
                headers: {
                    "whatsapp-account-id": accountId,
                },
            });
            return data;
        },
        onSuccess: () => {
            queryClient.invalidateQueries({ queryKey: ["socializations", accountId] });
            toast.success("Sosialisasi berhasil dihapus");
        },
        onError: (error: any) => {
            toast.error(error?.response?.data?.message || "Gagal menghapus sosialisasi");
        },
    });
};
