import { apiClient } from './client';
import type { IvaMensual, IsrMensual, ResumenIva, ResumenIsr, ResumenIsrDesglosado } from '@horux/shared';

export async function getIsrMensual(año?: number, conciliacion?: boolean, contribuyenteId?: string | null, regimenClave?: string | null, considerarActivos?: boolean, considerarNCs?: boolean): Promise<IsrMensual[]> {
  const params = new URLSearchParams();
  if (año) params.set('año', año.toString());
  if (conciliacion) params.set('conciliacion', 'true');
  if (contribuyenteId) params.set('contribuyenteId', contribuyenteId);
  if (regimenClave) params.set('regimenClave', regimenClave);
  if (considerarActivos !== undefined) params.set('considerarActivos', String(considerarActivos));
  if (considerarNCs !== undefined) params.set('considerarNCs', String(considerarNCs));
  const response = await apiClient.get<IsrMensual[]>(`/impuestos/isr/mensual?${params}`);
  return response.data;
}

export async function getIvaMensual(año?: number, conciliacion?: boolean, contribuyenteId?: string | null, considerarActivos?: boolean, considerarNCs?: boolean): Promise<IvaMensual[]> {
  const params = new URLSearchParams();
  if (año) params.set('año', año.toString());
  if (conciliacion) params.set('conciliacion', 'true');
  if (contribuyenteId) params.set('contribuyenteId', contribuyenteId);
  if (considerarActivos !== undefined) params.set('considerarActivos', String(considerarActivos));
  if (considerarNCs !== undefined) params.set('considerarNCs', String(considerarNCs));
  const response = await apiClient.get<IvaMensual[]>(`/impuestos/iva/mensual?${params}`);
  return response.data;
}

export async function getResumenIva(fechaInicio: string, fechaFin: string, conciliacion?: boolean, contribuyenteId?: string | null, considerarActivos?: boolean, considerarNCs?: boolean): Promise<ResumenIva> {
  const params = new URLSearchParams();
  params.set('fechaInicio', fechaInicio);
  params.set('fechaFin', fechaFin);
  if (conciliacion) params.set('conciliacion', 'true');
  if (contribuyenteId) params.set('contribuyenteId', contribuyenteId);
  if (considerarActivos !== undefined) params.set('considerarActivos', String(considerarActivos));
  if (considerarNCs !== undefined) params.set('considerarNCs', String(considerarNCs));
  const response = await apiClient.get<ResumenIva>(`/impuestos/iva/resumen?${params}`);
  return response.data;
}

export async function getCoeficiente(anio: number): Promise<{ anio: number; coeficiente: number | null }> {
  const response = await apiClient.get<{ anio: number; coeficiente: number | null }>(`/impuestos/isr/coeficiente?anio=${anio}`);
  return response.data;
}

export async function setCoeficiente(anio: number, coeficiente: number): Promise<{ anio: number; coeficiente: number }> {
  const response = await apiClient.put<{ anio: number; coeficiente: number }>('/impuestos/isr/coeficiente', { anio, coeficiente });
  return response.data;
}

export async function getResumenIsr(fechaInicio: string, fechaFin: string, conciliacion?: boolean, contribuyenteId?: string | null, considerarActivos?: boolean, considerarNCs?: boolean): Promise<ResumenIsr> {
  const params = new URLSearchParams();
  params.set('fechaInicio', fechaInicio);
  params.set('fechaFin', fechaFin);
  if (conciliacion) params.set('conciliacion', 'true');
  if (contribuyenteId) params.set('contribuyenteId', contribuyenteId);
  if (considerarActivos !== undefined) params.set('considerarActivos', String(considerarActivos));
  if (considerarNCs !== undefined) params.set('considerarNCs', String(considerarNCs));
  const response = await apiClient.get<ResumenIsr>(`/impuestos/isr/resumen?${params}`);
  return response.data;
}

export async function getResumenIsrDesglosado(
  fechaFin: string,
  conciliacion?: boolean,
  contribuyenteId?: string | null,
  considerarActivos?: boolean,
  considerarNCs?: boolean,
): Promise<ResumenIsrDesglosado> {
  const params = new URLSearchParams();
  params.set('fechaFin', fechaFin);
  if (conciliacion) params.set('conciliacion', 'true');
  if (contribuyenteId) params.set('contribuyenteId', contribuyenteId);
  if (considerarActivos !== undefined) params.set('considerarActivos', String(considerarActivos));
  if (considerarNCs !== undefined) params.set('considerarNCs', String(considerarNCs));
  const response = await apiClient.get<ResumenIsrDesglosado>(`/impuestos/isr/resumen-desglosado?${params}`);
  return response.data;
}
