import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import {
  getAsignacionesPorSupervisor,
  getAsignacionesPorAuxiliar,
  getSinAsignar,
  asignarObligacion,
  desasignarObligacion,
  asignarTarea,
  desasignarTarea,
  getAuxiliaresElegibles,
} from '../api/asignaciones';

export function useAsignacionesSupervisor() {
  return useQuery({
    queryKey: ['asignaciones-supervisor'],
    queryFn: getAsignacionesPorSupervisor,
  });
}

export function useAsignacionesAuxiliar() {
  return useQuery({
    queryKey: ['asignaciones-auxiliar'],
    queryFn: getAsignacionesPorAuxiliar,
  });
}

export function useSinAsignar() {
  return useQuery({
    queryKey: ['asignaciones-sin-asignar'],
    queryFn: getSinAsignar,
  });
}

export function useAsignarObligacion() {
  const qc = useQueryClient();
  return useMutation({
    mutationFn: ({ contribuyenteId, obligacionId, auxiliarUserId }: {
      contribuyenteId: string;
      obligacionId: string;
      auxiliarUserId: string;
    }) => asignarObligacion(contribuyenteId, obligacionId, auxiliarUserId),
    onSuccess: () => {
      qc.invalidateQueries({ queryKey: ['asignaciones-supervisor'] });
      qc.invalidateQueries({ queryKey: ['asignaciones-sin-asignar'] });
      qc.invalidateQueries({ queryKey: ['obligaciones'] });
    },
  });
}

export function useDesasignarObligacion() {
  const qc = useQueryClient();
  return useMutation({
    mutationFn: ({ contribuyenteId, obligacionId }: {
      contribuyenteId: string;
      obligacionId: string;
    }) => desasignarObligacion(contribuyenteId, obligacionId),
    onSuccess: () => {
      qc.invalidateQueries({ queryKey: ['asignaciones-supervisor'] });
      qc.invalidateQueries({ queryKey: ['asignaciones-sin-asignar'] });
      qc.invalidateQueries({ queryKey: ['obligaciones'] });
    },
  });
}

export function useAsignarTarea() {
  const qc = useQueryClient();
  return useMutation({
    mutationFn: ({ tareaId, auxiliarUserId }: {
      tareaId: string;
      auxiliarUserId: string;
    }) => asignarTarea(tareaId, auxiliarUserId),
    onSuccess: () => {
      qc.invalidateQueries({ queryKey: ['asignaciones-supervisor'] });
      qc.invalidateQueries({ queryKey: ['asignaciones-sin-asignar'] });
      qc.invalidateQueries({ queryKey: ['tareas'] });
    },
  });
}

export function useDesasignarTarea() {
  const qc = useQueryClient();
  return useMutation({
    mutationFn: ({ tareaId }: { tareaId: string }) => desasignarTarea(tareaId),
    onSuccess: () => {
      qc.invalidateQueries({ queryKey: ['asignaciones-supervisor'] });
      qc.invalidateQueries({ queryKey: ['asignaciones-sin-asignar'] });
      qc.invalidateQueries({ queryKey: ['tareas'] });
    },
  });
}

export function useAuxiliaresElegibles(contribuyenteId: string | undefined) {
  return useQuery({
    queryKey: ['auxiliares-elegibles', contribuyenteId],
    queryFn: () => getAuxiliaresElegibles(contribuyenteId!),
    enabled: !!contribuyenteId,
  });
}
