import api from './api';
import {
  EventoCostiRiepilogo,
  EventoAltroCosto,
  EventoAcconto,
  EventoAltroCostoDto,
  EventoAccontoDto,
  PagaAccontoDto,
} from '../types';

export const costiService = {
  // Riepilogo costi
  getRiepilogo: async (eventoId: number): Promise<EventoCostiRiepilogo> => {
    const response = await api.get(`/eventi/${eventoId}/costi/riepilogo`);
    return response.data;
  },

  ricalcolaAcconti: async (eventoId: number): Promise<EventoCostiRiepilogo> => {
    const response = await api.post(`/eventi/${eventoId}/costi/ricalcola-acconti`);
    return response.data;
  },

  // Altri Costi
  getAltriCosti: async (eventoId: number): Promise<EventoAltroCosto[]> => {
    const response = await api.get(`/eventi/${eventoId}/costi/altri`);
    return response.data;
  },

  addAltroCosto: async (eventoId: number, data: EventoAltroCostoDto): Promise<EventoAltroCosto> => {
    const response = await api.post(`/eventi/${eventoId}/costi/altri`, data);
    return response.data;
  },

  updateAltroCosto: async (eventoId: number, id: number, data: EventoAltroCostoDto): Promise<EventoAltroCosto> => {
    const response = await api.put(`/eventi/${eventoId}/costi/altri/${id}`, data);
    return response.data;
  },

  deleteAltroCosto: async (eventoId: number, id: number): Promise<void> => {
    await api.delete(`/eventi/${eventoId}/costi/altri/${id}`);
  },

  riordinaAltriCosti: async (eventoId: number, ordineIds: number[]): Promise<void> => {
    await api.post(`/eventi/${eventoId}/costi/altri/riordina`, ordineIds);
  },

  // Acconti
  getAcconti: async (eventoId: number): Promise<EventoAcconto[]> => {
    const response = await api.get(`/eventi/${eventoId}/costi/acconti`);
    return response.data;
  },

  addAcconto: async (eventoId: number, data: EventoAccontoDto): Promise<EventoAcconto> => {
    const response = await api.post(`/eventi/${eventoId}/costi/acconti`, data);
    return response.data;
  },

  updateAcconto: async (eventoId: number, id: number, data: EventoAccontoDto): Promise<EventoAcconto> => {
    const response = await api.put(`/eventi/${eventoId}/costi/acconti/${id}`, data);
    return response.data;
  },

  pagaAcconto: async (eventoId: number, id: number, data: PagaAccontoDto): Promise<EventoAcconto> => {
    const response = await api.post(`/eventi/${eventoId}/costi/acconti/${id}/paga`, data);
    return response.data;
  },

  deleteAcconto: async (eventoId: number, id: number): Promise<void> => {
    await api.delete(`/eventi/${eventoId}/costi/acconti/${id}`);
  },
};

// Helper per formattare valuta
export const formatCurrency = (value: number | undefined): string => {
  if (value === undefined || value === null) return '€ 0,00';
  return new Intl.NumberFormat('it-IT', {
    style: 'currency',
    currency: 'EUR',
  }).format(value);
};
