import type { Site, Target } from "@/lib/sites";

// Le réservoir et les imports se lisent **par cible d'un site** (spec Imports §1.1, §6) :
// chaque écran de la section Keywords a donc besoin d'un couple (site, cible).
//
// **Bascule de route actée le 2026-09-01** (décision utilisateur, en remplacement du choix
// de transition T4) : le site est un **segment de route**, `/sites/<id>/keywords/…`, et non
// plus un paramètre de query. C'est la norme des surfaces de travail du site actif — celle
// que Crawl et Search Console suivront — et elle a trois conséquences directes :
//
// 1. `siteIdFromPathname` (`lib/active-site.ts`) reconnaît ces routes : le switcher de la
//    sidebar marque enfin le bon site quand on travaille dessus ;
// 2. un site inconnu dans l'URL est un **404** (`notFound()`), plus un repli silencieux sur
//    le premier site — un segment de route désigne une ressource, une query ne fait que
//    suggérer ;
// 3. le sélecteur de site in-page disparaît : le switcher fait autorité, il n'y a plus deux
//    façons de changer de site.
//
// La **cible** reste dans la query (`?target=`) : elle est un cadrage de la page, pas une
// ressource distincte, et l'onglet Imports comme le réservoir la partagent telle quelle.

/**
 * Cible retenue pour ce site : celle demandée si elle lui appartient, sinon `is_default`,
 * sinon la première. Un identifiant inconnu (cible supprimée, lien d'un autre site) retombe
 * sur le défaut plutôt que de rendre une page vide — contrairement au site, la cible n'est
 * qu'un cadrage.
 */
export function resolveTarget(site: Site, targetId?: string): Target | null {
  return (
    (targetId ? site.targets.find((item) => item.id === targetId) : undefined) ??
    site.targets.find((item) => item.is_default) ??
    site.targets[0] ??
    null
  );
}

/**
 * Lien vers un écran de la section Keywords du site, cible et paramètres conservés.
 *
 * `sub` est un sous-chemin relatif (`""`, `"imports"`, `"imports/new"`, `"imports/<id>"`) ;
 * les paramètres `null`/`undefined` sont simplement omis, ce qui évite à chaque appelant de
 * construire sa propre `URLSearchParams`.
 */
export function keywordsHref(
  siteId: string,
  sub: string = "",
  params: Record<string, string | null | undefined> = {},
): string {
  const path = sub ? `/sites/${siteId}/keywords/${sub}` : `/sites/${siteId}/keywords`;
  const query = new URLSearchParams();
  for (const [key, value] of Object.entries(params)) {
    if (value) query.set(key, value);
  }
  const search = query.toString();
  return search ? `${path}?${search}` : path;
}
