import apiClient from '../apiClient';
import type { SalidaOtroDestinoDto } from '../../models/dtos/Distribucion/SalidaOtroDestinoDto';
import type { CreateSalidaOtroDestinoDto } from '../../models/dtos/Distribucion/CreateSalidaOtroDestinoDto';
import type { UpdateSalidaOtroDestinoDto } from '../../models/dtos/Distribucion/UpdateSalidaOtroDestinoDto';

interface GetAllSalidasParams {
    fechaDesde?: string | null; // yyyy-MM-dd
    fechaHasta?: string | null; // yyyy-MM-dd
    idPublicacion?: number | null;
    idDestino?: number | null;
}

const getAllSalidasOtrosDestinos = async (filters: GetAllSalidasParams): Promise<SalidaOtroDestinoDto[]> => {
    const params: Record<string, string | number> = {};
    if (filters.fechaDesde) params.fechaDesde = filters.fechaDesde;
    if (filters.fechaHasta) params.fechaHasta = filters.fechaHasta;
    if (filters.idPublicacion) params.idPublicacion = filters.idPublicacion;
    if (filters.idDestino) params.idDestino = filters.idDestino;

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

const getSalidaOtroDestinoById = async (idParte: number): Promise<SalidaOtroDestinoDto> => {
    const response = await apiClient.get<SalidaOtroDestinoDto>(`/salidasotrosdestinos/${idParte}`);
    return response.data;
};

const createSalidaOtroDestino = async (data: CreateSalidaOtroDestinoDto): Promise<SalidaOtroDestinoDto> => {
    const response = await apiClient.post<SalidaOtroDestinoDto>('/salidasotrosdestinos', data);
    return response.data;
};

const updateSalidaOtroDestino = async (idParte: number, data: UpdateSalidaOtroDestinoDto): Promise<void> => {
    await apiClient.put(`/salidasotrosdestinos/${idParte}`, data);
};

const deleteSalidaOtroDestino = async (idParte: number): Promise<void> => {
    await apiClient.delete(`/salidasotrosdestinos/${idParte}`);
};

const salidaOtroDestinoService = {
    getAllSalidasOtrosDestinos,
    getSalidaOtroDestinoById,
    createSalidaOtroDestino,
    updateSalidaOtroDestino,
    deleteSalidaOtroDestino,
};

export default salidaOtroDestinoService;