import { headers } from "next/headers";
import type { NextRequest } from "next/server";

/**
 * Détermine l'URL de base de l'application à partir de la requête en cours
 * (host réellement utilisé pour y accéder), pour que les QR codes générés
 * pointent vers une adresse joignable par le téléphone qui scanne — pas
 * uniquement "localhost", qui ne fonctionne que sur la machine du serveur.
 * APP_BASE_URL reste un repli pour les contextes sans requête (ex: scripts).
 */
export async function resolveBaseUrl(req?: NextRequest): Promise<string> {
  if (req) {
    const host = req.headers.get("host");
    if (host) {
      const proto = req.headers.get("x-forwarded-proto") ?? (host.startsWith("localhost") ? "http" : "https");
      return `${proto}://${host}`;
    }
  }

  try {
    const h = await headers();
    const host = h.get("host");
    if (host) {
      const proto = h.get("x-forwarded-proto") ?? (host.startsWith("localhost") ? "http" : "https");
      return `${proto}://${host}`;
    }
  } catch {
    // headers() indisponible hors contexte de requête (ex: script de seed) : on retombe sur l'env.
  }

  return process.env.APP_BASE_URL ?? "http://localhost:3000";
}
