// ╔════════════════════════════════════════════════════════════╗
// ║  BSB · Site Shell — App router for B and C                ║
// ║  Wraps SiteNav + (B2Home/C2Home or inner page) + SiteFooter║
// ╚════════════════════════════════════════════════════════════╝

function BsbSiteApp({ themeId }) {
  const theme = themeId === "B" ? THEME_B : THEME_C;
  const { lang, setLang, t } = useLang();
  const [route, setRoute] = React.useState({ name: "home" });

  // Scroll-to-top on route change
  React.useEffect(() => { window.scrollTo({ top: 0, behavior: "instant" }); }, [route]);

  // Patch t to fall back for missing keys we use here
  const tt = React.useCallback((k) => {
    const v = t(k);
    if (v && v !== k) return v;
    const fallbacks = lang === "fr" ? {
      nav_about: "Maison", nav_tobacco: "Tabac", nav_hemp: "Chanvre",
      nav_breeding: "Création variétale", nav_science: "Science", nav_network: "Réseau",
      nav_contact: "Contact", cta_quote: "Demander un devis",
      filter_all: "Toutes", filter_results: "résultats", filter_clear: "Réinitialiser",
      filter_type: "Type", filter_precocity: "Précocité", filter_resistance: "Résistance",
      table_year: "Année d'inscription", table_yield: "Rendement",
      table_quality: "Qualité", table_alkaloids: "Alcaloïdes", table_sugars: "Sucres",
      table_flowering: "Floraison", table_lodging: "Verse",
      detail_back: "← Retour catalogue", detail_vs_reference: "vs référence ITB 683",
      detail_resistances: "Résistances", detail_agronomic: "Profil agronomique",
      detail_chemistry: "Chimie de la feuille", detail_technician: "Note du sélectionneur",
      reference_label: "Témoin", new_label: "Nouvelle",
      section_finder_sub: "Filtre par type, précocité, profil de résistances. Toutes les données sont issues de notre réseau d'essais 2026.",
      section_science_sub: "25 années de données comparées. 14 sites d'essais. Sept partenaires académiques. Une exigence : la reproductibilité.",
      section_map_sub: "Sept régions, sept ingénieurs technico-commerciaux. Un interlocuteur unique, du choix variétal à la livraison.",
    } : {
      nav_about: "House", nav_tobacco: "Tobacco", nav_hemp: "Hemp",
      nav_breeding: "Custom breeding", nav_science: "Science", nav_network: "Network",
      nav_contact: "Contact", cta_quote: "Request a quote",
      filter_all: "All", filter_results: "results", filter_clear: "Reset",
      filter_type: "Type", filter_precocity: "Earliness", filter_resistance: "Resistance",
      table_year: "Release year", table_yield: "Yield",
      table_quality: "Quality", table_alkaloids: "Alkaloids", table_sugars: "Sugars",
      table_flowering: "Flowering", table_lodging: "Lodging",
      detail_back: "← Back to catalogue", detail_vs_reference: "vs ITB 683 reference",
      detail_resistances: "Resistances", detail_agronomic: "Agronomic profile",
      detail_chemistry: "Leaf chemistry", detail_technician: "Breeder's note",
      reference_label: "Reference", new_label: "New",
      section_finder_sub: "Filter by type, earliness, resistance profile. All data from our 2026 trial network.",
      section_science_sub: "25 years of comparable data. 14 trial sites. Seven academic partners. One requirement: reproducibility.",
      section_map_sub: "Seven regions, seven field engineers. A single point of contact from variety choice to delivery.",
    };
    return fallbacks[k] || v;
  }, [t, lang]);

  let page;
  switch (route.name) {
    case "home":
      page = themeId === "B"
        ? <B2Home t={tt} lang={lang} setLang={setLang} setRoute={setRoute}/>
        : <C2Home t={tt} lang={lang} setLang={setLang} setRoute={setRoute}/>;
      break;
    case "varieties":
      page = <PageVarieties theme={theme} t={tt} lang={lang} setRoute={setRoute}/>; break;
    case "detail":
      page = <PageDetail theme={theme} t={tt} lang={lang} setRoute={setRoute} code={route.code}/>; break;
    case "hemp":
      page = <PageHemp theme={theme} t={tt} lang={lang} setRoute={setRoute}/>; break;
    case "hempLine":
      page = <PageHempLine theme={theme} t={tt} lang={lang} setRoute={setRoute} lineId={route.lineId}/>; break;
    case "breeding":
      page = <PageBreeding theme={theme} t={tt} lang={lang} setRoute={setRoute}/>; break;
    case "science":
      page = <PageScience theme={theme} t={tt} lang={lang} setRoute={setRoute}/>; break;
    case "about":
      page = <PageAbout theme={theme} t={tt} lang={lang} setRoute={setRoute}/>; break;
    case "network":
      page = <PageNetwork theme={theme} t={tt} lang={lang} setRoute={setRoute}/>; break;
    case "contact":
      page = <PageContact theme={theme} t={tt} lang={lang} setRoute={setRoute}
        subject={route.subject} region={route.region}/>; break;
    case "legal":
      page = <PageLegal theme={theme} t={tt} lang={lang} setRoute={setRoute}/>; break;
    default:
      page = <div style={{ padding: 100, textAlign: "center", fontFamily: theme.body }}>404</div>;
  }

  // Home pages embed their own nav; inner pages use the shared SiteNav.
  const isHome = route.name === "home";
  return (
    <div style={{ background: theme.bg, color: theme.ink, minHeight: "100vh" }}>
      {!isHome && (
        <SiteNav theme={theme} t={tt} lang={lang} setLang={setLang}
          route={route} setRoute={setRoute}/>
      )}
      {page}
      <SiteFooter theme={theme} t={tt} lang={lang} setRoute={setRoute}/>
    </div>
  );
}

Object.assign(window, { BsbSiteApp });
