import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query';
import {
  FunilResponseSchema,
  OportunidadeSchema,
  type CreateOportunidadeDto,
  type UpdateOportunidadeDto,
  type Oportunidade,
} from '@sar/api-interface';
import { apiFetch } from '../api-client';

export function useFunil() {
  return useQuery({
    queryKey: ['funil'],
    queryFn: async () => FunilResponseSchema.parse(await apiFetch('/funil')),
  });
}

export function useCreateOportunidade() {
  const qc = useQueryClient();
  return useMutation({
    mutationFn: (dto: CreateOportunidadeDto): Promise<Oportunidade> =>
      apiFetch('/funil', { method: 'POST', body: dto }).then((r) => OportunidadeSchema.parse(r)),
    onSuccess: () => qc.invalidateQueries({ queryKey: ['funil'] }),
  });
}

export function useUpdateOportunidade() {
  const qc = useQueryClient();
  return useMutation({
    mutationFn: ({ id, dto }: { id: number; dto: UpdateOportunidadeDto }): Promise<Oportunidade> =>
      apiFetch(`/funil/${id}`, { method: 'PATCH', body: dto }).then((r) =>
        OportunidadeSchema.parse(r),
      ),
    onSuccess: () => qc.invalidateQueries({ queryKey: ['funil'] }),
  });
}

export function useDeleteOportunidade() {
  const qc = useQueryClient();
  return useMutation({
    mutationFn: (id: number): Promise<void> => apiFetch(`/funil/${id}`, { method: 'DELETE' }),
    onSuccess: () => qc.invalidateQueries({ queryKey: ['funil'] }),
  });
}
