/**
 * Fil communautaire : les derniers commentaires, annonces, covoiturages et inscrits du site.
 */

import http from '@/http';

export interface FilEvenement {
  eveId: number;
  libelle: string;
  date: string | null;
  tevLibelle: string | null;
  vilNom: string | null;
}

interface Auteur {
  id: number;
  pseudo: string;
}

export interface FilCommentaire {
  id: number;
  texte: string;
  date: string | null;
  auteur: Auteur | null;
  evenement: FilEvenement | null;
}

export interface FilAnnonce {
  id: number;
  titre: string;
  date: string | null;
  typeId: number | null;
  auteur: Auteur | null;
}

export interface FilCovoiturage {
  id: number;
  ville: string;
  nombre: number;
  propose: number;
  auteur: Auteur | null;
  evenement: FilEvenement | null;
}

export interface FilInscrit {
  id: number;
  pseudo: string | null;
  userId: number | null;
  evenement: FilEvenement | null;
}

export interface FilCommunautaire {
  commentaires: FilCommentaire[];
  annonces: FilAnnonce[];
  covoiturages: FilCovoiturage[];
  inscrits: FilInscrit[];
}

const VIDE: FilCommunautaire = {commentaires: [], annonces: [], covoiturages: [], inscrits: []};

/** Les derniers éléments de chaque liste ; listes vides si l'API ne répond pas. */
export async function getFilCommunautaire(limit = 6): Promise<FilCommunautaire> {
  try {
    const response = await http.get(`/communaute/fil?limit=${limit}`);
    const data = response.data ?? {};

    return {
      commentaires: Array.isArray(data.commentaires) ? data.commentaires : [],
      annonces: Array.isArray(data.annonces) ? data.annonces : [],
      covoiturages: Array.isArray(data.covoiturages) ? data.covoiturages : [],
      inscrits: Array.isArray(data.inscrits) ? data.inscrits : [],
    };
  } catch {
    return VIDE;
  }
}
