import http from '@/http';

export interface Bandeau {
  /** URL de l'image, déjà résolue côté média. */
  imageUrl: string;
  /** Faux : uniquement sur la page d'accueil. */
  toutesPages: boolean;
  /** Page ouverte au clic (spec L344), null si le bandeau n'est pas cliquable. */
  lien: string | null;
}

interface BandeauResource {
  banActif: boolean;
  banToutesPages: boolean;
  banLien?: string | null;
  imageUrl: string;
}

/**
 * Récupère le bandeau à afficher sur le site public.
 * @returns Le bandeau, ou null s'il est désactivé, absent ou sans image.
 */
export async function getBandeau(): Promise<Bandeau | null> {
  try {
    const response = await http.get('/socle_bandeaux');
    const bandeau: BandeauResource | undefined = response.data['hydra:member']?.[0];

    if (!bandeau || !bandeau.banActif) {
      return null;
    }

    const imageUrl = await resolveImage(bandeau.imageUrl);
    if (!imageUrl) {
      return null;
    }

    return {imageUrl, toutesPages: bandeau.banToutesPages, lien: bandeau.banLien?.trim() || null};
  } catch {
    return null;
  }
}

/**
 * Résout l'URL réelle de l'image. Sans média chargé, l'API renvoie une image
 * de remplacement dummyimage : on considère alors qu'il n'y a pas de bandeau.
 */
async function resolveImage(mediaPath: string): Promise<string | null> {
  const response = await http.get(mediaPath);
  const url = response.data?.url;

  if (!url || url.includes('dummyimage.com')) {
    return null;
  }

  return url;
}
