import apiClient from '../apiClient';
import type { PagoDistribuidorDto } from '../../models/dtos/Contables/PagoDistribuidorDto';
import type { CreatePagoDistribuidorDto } from '../../models/dtos/Contables/CreatePagoDistribuidorDto';
import type { UpdatePagoDistribuidorDto } from '../../models/dtos/Contables/UpdatePagoDistribuidorDto';

interface GetAllPagosDistParams {
    fechaDesde?: string | null; // yyyy-MM-dd
    fechaHasta?: string | null; // yyyy-MM-dd
    idDistribuidor?: number | null;
    idEmpresa?: number | null;
    tipoMovimiento?: 'Recibido' | 'Realizado' | '' | null;
}

const getAllPagosDistribuidor = async (filters: GetAllPagosDistParams): Promise<PagoDistribuidorDto[]> => {
    const params: Record<string, string | number> = {};
    if (filters.fechaDesde) params.fechaDesde = filters.fechaDesde;
    if (filters.fechaHasta) params.fechaHasta = filters.fechaHasta;
    if (filters.idDistribuidor) params.idDistribuidor = filters.idDistribuidor;
    if (filters.idEmpresa) params.idEmpresa = filters.idEmpresa;
    if (filters.tipoMovimiento) params.tipoMovimiento = filters.tipoMovimiento;

    const response = await apiClient.get<PagoDistribuidorDto[]>('/pagosdistribuidor', { params });
    return response.data;
};

const getPagoDistribuidorById = async (idPago: number): Promise<PagoDistribuidorDto> => {
    const response = await apiClient.get<PagoDistribuidorDto>(`/pagosdistribuidor/${idPago}`);
    return response.data;
};

const createPagoDistribuidor = async (data: CreatePagoDistribuidorDto): Promise<PagoDistribuidorDto> => {
    const response = await apiClient.post<PagoDistribuidorDto>('/pagosdistribuidor', data);
    return response.data;
};

const updatePagoDistribuidor = async (idPago: number, data: UpdatePagoDistribuidorDto): Promise<void> => {
    await apiClient.put(`/pagosdistribuidor/${idPago}`, data);
};

const deletePagoDistribuidor = async (idPago: number): Promise<void> => {
    await apiClient.delete(`/pagosdistribuidor/${idPago}`);
};

const pagoDistribuidorService = {
    getAllPagosDistribuidor,
    getPagoDistribuidorById,
    createPagoDistribuidor,
    updatePagoDistribuidor,
    deletePagoDistribuidor,
};

export default pagoDistribuidorService;