import http from '@/http';
import type {MediaPage} from '@/types/mediaPage';

const DEFAULT_LANGUE = 'fr';

interface MediaPageResource {
  pagSlug: string;
  pagLangue: string;
  pagTitre: string;
  pagContenu: string | null;
}

/**
 * Récupère une page éditoriale administrée en back-office, dans la langue demandée.
 * Une langue sans contenu retombe sur le français.
 * @returns La page, ou null si aucune version n'a de contenu ou si l'API échoue.
 */
export async function getMediaPage(slug: string, locale: string): Promise<MediaPage | null> {
  try {
    const page = await fetchPage(slug, locale);

    if (page) {
      return page;
    }

    return locale === DEFAULT_LANGUE ? null : await fetchPage(slug, DEFAULT_LANGUE);
  } catch {
    return null;
  }
}

/** La page dans cette langue, ou null si elle n'existe pas ou n'a pas de contenu. */
async function fetchPage(slug: string, langue: string): Promise<MediaPage | null> {
  const response = await http.get(`/media_pages?pagSlug=${slug}&pagLangue=${langue}`);
  const page: MediaPageResource | undefined = response.data['hydra:member']?.[0];

  if (!page?.pagContenu) {
    return null;
  }

  return {
    slug: page.pagSlug,
    langue: page.pagLangue,
    titre: page.pagTitre,
    contenu: page.pagContenu,
  };
}
