import apiClient from '../apiClient';
import type { ControlDevolucionesDto } from '../../models/dtos/Distribucion/ControlDevolucionesDto';
import type { CreateControlDevolucionesDto } from '../../models/dtos/Distribucion/CreateControlDevolucionesDto';
import type { UpdateControlDevolucionesDto } from '../../models/dtos/Distribucion/UpdateControlDevolucionesDto';

interface GetAllControlesParams {
    fechaDesde?: string | null; // yyyy-MM-dd
    fechaHasta?: string | null; // yyyy-MM-dd
    idEmpresa?: number | null;
}

const getAllControlesDevoluciones = async (filters: GetAllControlesParams): Promise<ControlDevolucionesDto[]> => {
    const params: Record<string, string | number> = {};
    if (filters.fechaDesde) params.fechaDesde = filters.fechaDesde;
    if (filters.fechaHasta) params.fechaHasta = filters.fechaHasta;
    if (filters.idEmpresa) params.idEmpresa = filters.idEmpresa;

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

const getControlDevolucionesById = async (idControl: number): Promise<ControlDevolucionesDto> => {
    const response = await apiClient.get<ControlDevolucionesDto>(`/controldevoluciones/${idControl}`);
    return response.data;
};

const createControlDevoluciones = async (data: CreateControlDevolucionesDto): Promise<ControlDevolucionesDto> => {
    const response = await apiClient.post<ControlDevolucionesDto>('/controldevoluciones', data);
    return response.data;
};

const updateControlDevoluciones = async (idControl: number, data: UpdateControlDevolucionesDto): Promise<void> => {
    await apiClient.put(`/controldevoluciones/${idControl}`, data);
};

const deleteControlDevoluciones = async (idControl: number): Promise<void> => {
    await apiClient.delete(`/controldevoluciones/${idControl}`);
};

const controlDevolucionesService = {
    getAllControlesDevoluciones,
    getControlDevolucionesById,
    createControlDevoluciones,
    updateControlDevoluciones,
    deleteControlDevoluciones,
};

export default controlDevolucionesService;