import apiClient from '../apiClient';
import type { TiradaDto } from '../../models/dtos/Impresion/TiradaDto';
import type { CreateTiradaRequestDto } from '../../models/dtos/Impresion/CreateTiradaRequestDto';
import type { UpdateTiradaRequestDto } from '../../models/dtos/Impresion/UpdateTiradaRequestDto';

interface GetTiradasParams {
    fecha?: string | null; // "yyyy-MM-dd"
    idPublicacion?: number | null;
    idPlanta?: number | null;
}

const getTiradas = async (filters: GetTiradasParams): Promise<TiradaDto[]> => {
    const params: Record<string, string | number> = {};
    if (filters.fecha) params.fecha = filters.fecha;
    if (filters.idPublicacion) params.idPublicacion = filters.idPublicacion;
    if (filters.idPlanta) params.idPlanta = filters.idPlanta;

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

const registrarTirada = async (data: CreateTiradaRequestDto): Promise<TiradaDto> => {
    const response = await apiClient.post<TiradaDto>('/tiradas', data);
    return response.data; // El backend devuelve la tirada creada
};

const modificarTirada = async (fecha: string, idPublicacion: number, idPlanta: number, data: UpdateTiradaRequestDto): Promise<TiradaDto> => {
    const response = await apiClient.put<TiradaDto>('/tiradas', data, {
        params: {
            fecha,
            idPublicacion,
            idPlanta
        }
    });
    return response.data;
};

const deleteTiradaCompleta = async (fecha: string, idPublicacion: number, idPlanta: number): Promise<void> => {
    // Los parámetros van en la query string para este DELETE
    await apiClient.delete('/tiradas', {
        params: {
            fecha,
            idPublicacion,
            idPlanta
        }
    });
};

const tiradaService = {
    getTiradas,
    registrarTirada,
    modificarTirada,
    deleteTiradaCompleta,
};

export default tiradaService;