const API_URL = process.env.NEXT_PUBLIC_API_URL || "http://10.113.245.13:8000"

/** Une rubrique de la médiathèque, créée par l'administrateur. */
export interface RubriqueDocument {
  id: number
  nom: string
  nom_en: string | null
  position: number
}

/** Un document : brochure, certificat, rapport, texte réglementaire. */
export interface DocumentMediatheque {
  id: number
  rubrique_id: number | null
  titre: string
  titre_en: string | null
  description: string | null
  description_en: string | null
  /** Adresse extérieure, ou fichier déposé et servi par le backend. */
  url: string
  url_en: string | null
  position: number
}

export interface MediathequeDocuments {
  rubriques: RubriqueDocument[]
  documents: DocumentMediatheque[]
}

/**
 * Charge les rubriques et les documents.
 *
 * Rend des listes vides plutôt que de propager l'échec : la page comporte une
 * médiathèque vidéo et une liste de documents, et un serveur injoignable ne
 * doit pas emporter la première avec la seconde.
 */
export async function chargerDocuments(): Promise<MediathequeDocuments> {
  try {
    const res = await fetch(`${API_URL}/api/documents`, { cache: "no-store" })
    if (!res.ok) throw new Error(String(res.status))
    return (await res.json()) as MediathequeDocuments
  } catch {
    return { rubriques: [], documents: [] }
  }
}

/** Le titre dans la langue affichée, l'original si la traduction manque. */
export function titreLocalise(d: DocumentMediatheque, isEn: boolean): string {
  return isEn && d.titre_en ? d.titre_en : d.titre
}

export function descriptionLocalisee(d: DocumentMediatheque, isEn: boolean): string {
  return (isEn && d.description_en ? d.description_en : d.description) ?? ""
}

/** L'adresse dans la langue affichée : certaines brochures ont une version anglaise. */
export function urlLocalisee(d: DocumentMediatheque, isEn: boolean): string {
  return isEn && d.url_en ? d.url_en : d.url
}

export function nomRubrique(r: RubriqueDocument, isEn: boolean): string {
  return isEn && r.nom_en ? r.nom_en : r.nom
}
