import { generateLetter, generateLetterPreview, getCustomerLetters, getLetterPreview, getLetterReferencePreview, getNegativeItemsForLetter } from '@/lib/dashboard/dashboard-api';
import { useMutation, useQuery } from '@tanstack/react-query';

interface LettersListParams {
    customerId: string | number;
    search?: string;
    page?: number;
    bureau: string;
}

/**
 * Fetch correspondence / letters list
 */
export const useGetLettersList = ({
    customerId,
    search,
    page = 1,
    bureau
}: LettersListParams) => {
    return useQuery({
        queryKey: [
            'letters-list',
            customerId,
            search ?? '',
            page,
            bureau,
        ],
        queryFn: async () => {
            const normalizedBureau = bureau?.toLowerCase() ?? 'transunion';
            const res = await getCustomerLetters(customerId, normalizedBureau, page, search);
            return res.data.results;
        },
        enabled: Boolean(customerId),
        // keepPreviousData: true,
        staleTime: 1000 * 60 * 5,
    });
};

export const useGetPreview = (
    clientId: number,
    letterId: number,
    enabled: boolean
) => {
    return useQuery({
        queryKey: ['letter-preview', clientId, letterId],
        queryFn: async () => {
            const res = await getLetterPreview(clientId, letterId);
            return res.data.results.letter; // 👈 return ONLY the letter object
        },
        enabled: Boolean(clientId && letterId && enabled),
        staleTime: 1000 * 60 * 5,
    });
};

export const useGetReferencePreview = (
    clientId: string | number
) => {
    return useQuery({
        queryKey: ['letter-reference-preview', clientId],
        queryFn: async () => {
            const res = await getLetterReferencePreview(clientId);
            return res.data.results
        },
        enabled: Boolean(clientId),
        staleTime: 1000 * 60 * 5,
    });
};

export const useGenerateLetterPreview = (
    clientId: number,
    payload: { items: string[] },
    previewOpen: boolean
) => {
    return useQuery({
        queryKey: ['letter-preview', clientId, payload],
        queryFn: async () => {
            const res = await generateLetterPreview(clientId, payload);
            return res.data.results.body;
        },
        enabled: Boolean(clientId && payload && previewOpen),
        staleTime: 1000 * 60 * 5,
    });
};


export const useGetNegativeItems = (
    clientId: string | number,
    bureau: string,
    enabled: boolean
) => {
    return useQuery({
        queryKey: ['negative-items', clientId, bureau],
        queryFn: async () => {
            const res = await getNegativeItemsForLetter(clientId, bureau);
            return res.data.results;
        },
        enabled: Boolean(clientId && bureau && enabled),
        staleTime: 1000 * 60 * 5,
    });
};

export const useGenerateLetter = () => {
    return useMutation({
        mutationFn: generateLetter,
    });
};