/**
 * Ensembles d'événements (festivals, festoù-noz en série…) tels que les lit le front.
 */

import http from '@/http';

export interface EnsembleEvenementEvenement {
  eveId: number;
  eveDate: string;
  eveLibelle?: string | null;
  eveTev?: {tevLibelle: string} | null;
  eveType?: {tevLibelle: string} | null;
  eveVil?: {vilNom: string; vilGeoX?: number | null; vilGeoY?: number | null} | null;
  evePla?: {plaLibelle: string; plaGeoX?: number | null; plaGeoY?: number | null} | null;
}

/** Ensemble contenant ou édition enfant, avec son logo (média « Logo », null si image par défaut). */
export interface EnsembleEvenementEdition {
  eesId: number;
  eesLibelle: string;
  logoUrl: string | null;
  nbEvent?: number;
}

export interface EnsembleEvenementFront {
  eesId: number;
  eesLibelle: string;
  logoUrl?: string | null;
  nbEvent?: number;
  evenements?: EnsembleEvenementEvenement[];
  /** Ensembles qui contiennent celui-ci (spec L252). */
  parents?: EnsembleEvenementEdition[];
  /** Éditions enfants (spec L256). */
  enfants?: EnsembleEvenementEdition[];
}

/** L'ensemble et ses événements, ou null si l'API ne répond pas. */
export async function getEnsembleEvenementFront(eesId: number | string): Promise<EnsembleEvenementFront | null> {
  try {
    const response = await http.get(`/evenement_ensembles/${eesId}/front`);

    return response.data ?? null;
  } catch {
    return null;
  }
}
