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

// Can't use @/lib/site in proxy (edge runtime + path alias limitations)
const SITE_URL = "https://www.aciebenergie.fr";

// Ressources machine-readable annoncées à chaque réponse pour les agents IA /
// crawlers, sans parser le HTML (root-relative → résolues sur l'origine).
const DISCOVERY_LINKS = [
  '</llms.txt>; rel="describedby"; type="text/markdown"',
  // `describedby` et non `alternate` : llms-full.txt n'est pas une représentation
  // alternative de la page courante. En `alternate type="text/markdown"` il entrait
  // en collision avec le <link rel="alternate" type="text/markdown"> de l'article,
  // et un agent qui privilégie les headers récupérait un dump de 293 Ko au lieu de
  // la source de la page demandée.
  '</llms-full.txt>; rel="describedby"; type="text/markdown"',
  '</sitemap.xml>; rel="sitemap"; type="application/xml"',
  '</feed.xml>; rel="alternate"; type="application/rss+xml"',
  '</.well-known/api-catalog>; rel="api-catalog"',
];

// Source Markdown d'un article : /<categorie>/<slug>.md (rewrite next.config.ts).
const ARTICLE_MD = /^\/([^/]+)\/([^/.]+)\.md$/;

/**
 * URL canonique à annoncer pour `pathname`.
 *
 * Cas particulier des `.md` : le canonical mécanique était auto-référent, donc le
 * duplicate se déclarait canonique de lui-même et contredisait frontalement le
 * canonical de la page HTML. On pointe désormais la page HTML, ce qui consolide
 * au lieu de diviser. `/services.md` n'a pas d'équivalent HTML : pas de canonical.
 */
function canonicalFor(pathname: string): string | null {
  const article = ARTICLE_MD.exec(pathname);
  if (article) return `${SITE_URL}/${article[1]}/${article[2]}/`;
  if (pathname.endsWith(".md")) return null;
  return `${SITE_URL}${pathname}`;
}

export function proxy(request: NextRequest) {
  const response = NextResponse.next();
  const canonical = canonicalFor(request.nextUrl.pathname);
  if (canonical) {
    response.headers.set("Link", `<${canonical}>; rel="canonical"`);
  }
  for (const link of DISCOVERY_LINKS) {
    response.headers.append("Link", link);
  }
  return response;
}

export const config = {
  matcher: [
    "/((?!_next/static|_next/image|favicon.ico|sitemap.xml|robots.txt|feed.xml|manifest.webmanifest|api/).*)",
  ],
};
