import { useQuery } from '@tanstack/react-query';
import * as reportesApi from '../api/reportes';
import { useContribuyenteStore } from '@/stores/contribuyente-store';

export function useEstadoResultados(fechaInicio?: string, fechaFin?: string) {
  const { selectedContribuyenteId } = useContribuyenteStore();

  return useQuery({
    queryKey: ['estado-resultados', fechaInicio, fechaFin, selectedContribuyenteId],
    queryFn: () => reportesApi.getEstadoResultados(fechaInicio, fechaFin, selectedContribuyenteId || undefined),
  });
}

export function useFlujoEfectivo(fechaInicio?: string, fechaFin?: string) {
  const { selectedContribuyenteId } = useContribuyenteStore();

  return useQuery({
    queryKey: ['flujo-efectivo', fechaInicio, fechaFin, selectedContribuyenteId],
    queryFn: () => reportesApi.getFlujoEfectivo(fechaInicio, fechaFin, selectedContribuyenteId || undefined),
  });
}

export function useComparativo(año?: number) {
  const { selectedContribuyenteId } = useContribuyenteStore();

  return useQuery({
    queryKey: ['comparativo', año, selectedContribuyenteId],
    queryFn: () => reportesApi.getComparativo(año, selectedContribuyenteId || undefined),
  });
}

export function useConcentradoRfc(tipo: 'cliente' | 'proveedor', fechaInicio?: string, fechaFin?: string) {
  const { selectedContribuyenteId } = useContribuyenteStore();

  return useQuery({
    queryKey: ['concentrado-rfc', tipo, fechaInicio, fechaFin, selectedContribuyenteId],
    queryFn: () => reportesApi.getConcentradoRfc(tipo, fechaInicio, fechaFin, selectedContribuyenteId || undefined),
  });
}

export function useCuentasXPagar(fechaInicio: string, fechaFin: string, regimen?: string) {
  const { selectedContribuyenteId } = useContribuyenteStore();

  return useQuery({
    queryKey: ['cuentas-x-pagar', fechaInicio, fechaFin, regimen, selectedContribuyenteId],
    queryFn: () => reportesApi.getCuentasXPagar(fechaInicio, fechaFin, regimen || undefined, selectedContribuyenteId || undefined),
    enabled: !!fechaInicio && !!fechaFin,
  });
}

export function useCuentasXCobrar(fechaInicio: string, fechaFin: string, regimen?: string) {
  const { selectedContribuyenteId } = useContribuyenteStore();

  return useQuery({
    queryKey: ['cuentas-x-cobrar', fechaInicio, fechaFin, regimen, selectedContribuyenteId],
    queryFn: () => reportesApi.getCuentasXCobrar(fechaInicio, fechaFin, regimen || undefined, selectedContribuyenteId || undefined),
    enabled: !!fechaInicio && !!fechaFin,
  });
}

export function useEstadoResultadosDetallado(fechaInicio?: string, fechaFin?: string, regimen?: string) {
  const { selectedContribuyenteId } = useContribuyenteStore();

  return useQuery({
    queryKey: ['estado-resultados-detallado', fechaInicio, fechaFin, regimen, selectedContribuyenteId],
    queryFn: () => reportesApi.getEstadoResultadosDetallado(fechaInicio, fechaFin, regimen || undefined, selectedContribuyenteId || undefined),
  });
}

export function useEstadoResultadosDrillDown(
  categoria: string,
  fechaInicio?: string,
  fechaFin?: string,
  regimen?: string,
  rfc?: string,
) {
  const { selectedContribuyenteId } = useContribuyenteStore();

  return useQuery({
    queryKey: ['estado-resultados-drill-down', categoria, fechaInicio, fechaFin, regimen, rfc, selectedContribuyenteId],
    queryFn: () => reportesApi.getEstadoResultadosDrillDown(categoria, fechaInicio, fechaFin, regimen || undefined, rfc || undefined, selectedContribuyenteId || undefined),
    enabled: !!categoria && !!fechaInicio && !!fechaFin,
  });
}
