import http from '@/http';

export interface CarpoolAuthor {
  id: number;
  pseudo: string;
}

/** Événement rattaché à un covoiturage (spec L194). */
export interface CarpoolEvenement {
  eveId: number;
  libelle: string;
  date: string | null;
  vilNom: string | null;
}

export interface Carpool {
  id: number;
  ville: string;
  nombre: number;
  heure: string | null;
  propose: number;
  auteur: CarpoolAuthor | null;
  evenement?: CarpoolEvenement | null;
}

export async function getCarpoolsByEvenement(evenementId: number): Promise<Carpool[]> {
  const response = await http.get(`/covoiturages?evenementId=${evenementId}`);
  return response.data;
}

/** Covoiturages de tous les événements à venir, le plus proche d'abord (page covoiturage, spec L194). */
export async function getCarpoolsAVenir(): Promise<Carpool[]> {
  const response = await http.get('/covoiturages?aVenir=1');
  return response.data;
}

export async function createCarpool(data: {
  evenementId: number;
  ville: string;
  nombre: number;
  heure?: string;
  propose: number;
}): Promise<Carpool> {
  const response = await http.post('/covoiturages', data);
  return response.data;
}

/** L'auteur corrige sa demande ou sa proposition. */
export async function updateCarpool(
  id: number,
  data: {ville?: string; nombre?: number; heure?: string | null; propose?: number}
): Promise<Carpool> {
  const response = await http.patch(`/covoiturages/${id}`, data);
  return response.data;
}

export async function deleteCarpool(id: number): Promise<void> {
  await http.delete(`/covoiturages/${id}`);
}

export async function sendCarpoolContactMessage(carpoolId: number, message: string): Promise<void> {
  await http.post(`/covoiturages/${carpoolId}/contact`, { message });
}
