import apiClient from '../apiClient';
import type { NovedadCanillaDto } from '../../models/dtos/Distribucion/NovedadCanillaDto';
import type { CreateNovedadCanillaDto } from '../../models/dtos/Distribucion/CreateNovedadCanillaDto';
import type { UpdateNovedadCanillaDto } from '../../models/dtos/Distribucion/UpdateNovedadCanillaDto';

interface GetNovedadesParams {
    fechaDesde?: string | null; // "yyyy-MM-dd"
    fechaHasta?: string | null; // "yyyy-MM-dd"
}

// Obtiene las novedades para un canillita específico, opcionalmente filtradas por fecha.
// Corresponde a GET api/novedadescanilla/porcanilla/{idCanilla}
const getNovedadesPorCanilla = async (idCanilla: number, params?: GetNovedadesParams): Promise<NovedadCanillaDto[]> => {
    const queryParams: Record<string, string> = {};
    if (params?.fechaDesde) queryParams.fechaDesde = params.fechaDesde;
    if (params?.fechaHasta) queryParams.fechaHasta = params.fechaHasta;

    const response = await apiClient.get<NovedadCanillaDto[]>(`/novedadescanilla/porcanilla/${idCanilla}`, { params: queryParams });
    return response.data;
};

// Obtiene una novedad específica por su ID.
// Corresponde a GET api/novedadescanilla/{idNovedad}
const getNovedadById = async (idNovedad: number): Promise<NovedadCanillaDto> => {
    const response = await apiClient.get<NovedadCanillaDto>(`/novedadescanilla/${idNovedad}`);
    return response.data;
};

// Crea una nueva novedad. El IdCanilla está en el DTO.
// Corresponde a POST api/novedadescanilla
const createNovedad = async (data: CreateNovedadCanillaDto): Promise<NovedadCanillaDto> => {
    const response = await apiClient.post<NovedadCanillaDto>('/novedadescanilla', data);
    return response.data;
};

// Actualiza una novedad existente.
// Corresponde a PUT api/novedadescanilla/{idNovedad}
const updateNovedad = async (idNovedad: number, data: UpdateNovedadCanillaDto): Promise<void> => {
    await apiClient.put(`/novedadescanilla/${idNovedad}`, data);
};

// Elimina una novedad.
// Corresponde a DELETE api/novedadescanilla/{idNovedad}
const deleteNovedad = async (idNovedad: number): Promise<void> => {
    await apiClient.delete(`/novedadescanilla/${idNovedad}`);
};

const novedadCanillaService = {
    getNovedadesPorCanilla,
    getNovedadById,
    createNovedad,
    updateNovedad,
    deleteNovedad,
};

export default novedadCanillaService;