/**
 * Médias génériques de l'API (`/media/{typeEntite}/{id}/{medType}`).
 */

import http from '@/http';

export type MediaTypeEntite = 'annuaire_entree' | 'evenement' | 'evenement_ensemble' | 'geolocale_subdivision_autre' | 'geolocale_place';

/** L'API renvoie une image de remplacement quand aucun média n'est configuré : on l'ignore. */
function estUneImageDeRemplacement(url: string): boolean {
  return url.includes('dummyimage.com');
}

/**
 * URL du média principal d'une entité dans le format demandé, ou `null` sans média configuré
 * ou si l'API ne répond pas : les images sont optionnelles, la fiche reste lisible sans.
 */
export async function getMediaPrincipalUrl(
  typeEntite: MediaTypeEntite,
  id: number | string,
  format: string
): Promise<string | null> {
  try {
    const response = await http.get(`/media/${typeEntite}/${id}/MediaPrincipal?format=${format}`);
    const url: unknown = response.data?.url;

    return typeof url === 'string' && url !== '' && !estUneImageDeRemplacement(url) ? url : null;
  } catch {
    return null;
  }
}

/** URL du logo d'une entité (média « Logo »), ou null sans logo configuré. */
export async function getLogoUrl(typeEntite: MediaTypeEntite, id: number | string): Promise<string | null> {
  try {
    const response = await http.get(`/media/${typeEntite}/${id}/Logo`);
    const url: unknown = response.data?.url;

    return typeof url === 'string' && url !== '' && !estUneImageDeRemplacement(url) ? url : null;
  } catch {
    return null;
  }
}
