/* ============================================
   Yurt on Wheels — App shell + router + Tweaks
   ============================================ */

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "hero_variant": "fullbleed",
  "card_style": "photo-first",
  "accent_mode": "warm",
  "card_radius": 14,
  "dark": false
}/*EDITMODE-END*/;

function App() {
  const route = useRouter();
  const lang = route.lang;
  const t = useT(lang);
  const [menuOpen, setMenuOpen] = useState(false);
  const [langOpen, setLangOpen] = useState(false);
  const [tweaks, setTweak] = useTweaks(TWEAK_DEFAULTS);

  // Set html lang attribute
  useEffect(() => {
    document.documentElement.lang = lang;
  }, [lang]);

  // Apply tweak data-attrs to <body>
  useEffect(() => {
    document.body.setAttribute("data-card-style", tweaks.card_style);
    document.body.setAttribute("data-accent-mode", tweaks.accent_mode);
    document.documentElement.style.setProperty("--tw-card-radius", `${tweaks.card_radius}px`);
    document.documentElement.dataset.theme = tweaks.dark ? "dark" : "light";
  }, [tweaks.card_style, tweaks.accent_mode, tweaks.card_radius, tweaks.dark]);

  // Render page
  const pageEl = (() => {
    switch (route.page) {
      case "home": return <HomePage route={route} t={t} tweaks={tweaks}/>;
      case "tours":
        if (route.slug) return <TourDetailPage route={route} t={t}/>;
        return <CatalogPage route={route} t={t}/>;
      case "private-custom-tours": return <PrivatePage route={route} t={t}/>;
      case "nature":               return <NaturePage route={route} t={t}/>;
      case "safety-insurance":     return <SafetyPage route={route} t={t}/>;
      case "contact":              return <ContactPage route={route} t={t}/>;
      default: return <NotFound t={t} route={route}/>;
    }
  })();

  return (
    <React.Fragment>
      <Header
        route={route}
        t={t}
        openMenu={() => setMenuOpen(true)}
        openLang={setLangOpen}
        langMenuOpen={langOpen}
      />
      <MobileDrawer open={menuOpen} onClose={() => setMenuOpen(false)} t={t} route={route}/>
      {pageEl}
      <Footer t={t} route={route}/>
      <YowTweaks tweaks={tweaks} setTweak={setTweak} t={t} route={route}/>
    </React.Fragment>
  );
}

// ---------- Tweaks panel (project-specific) ----------
function YowTweaks({ tweaks, setTweak, t, route }) {
  return (
    <TweaksPanel title="Tweaks">
      <TweakSection label="Language">
        <TweakRadio
          label="Site language"
          value={route.lang}
          options={[
            { value: "en", label: "EN" },
            { value: "ru", label: "RU" },
            { value: "kz", label: "KZ" },
            { value: "zh", label: "ZH" },
          ]}
          onChange={(v) => navigate(v, route.page, route.slug)}
        />
      </TweakSection>

      <TweakSection label="Homepage hero">
        <TweakRadio
          label="Variant"
          value={tweaks.hero_variant}
          options={[
            { value: "split", label: "Split" },
            { value: "fullbleed", label: "Full" },
            { value: "quiet", label: "Quiet" },
          ]}
          onChange={(v) => setTweak("hero_variant", v)}
        />
      </TweakSection>

      <TweakSection label="Tour cards">
        <TweakRadio
          label="Style"
          value={tweaks.card_style}
          options={[
            { value: "photo-first", label: "Photo" },
            { value: "editorial", label: "Editorial" },
            { value: "minimal", label: "Min" },
          ]}
          onChange={(v) => setTweak("card_style", v)}
        />
        <TweakSlider
          label="Corner radius"
          value={tweaks.card_radius}
          min={4} max={24} step={2} unit="px"
          onChange={(v) => setTweak("card_radius", v)}
        />
      </TweakSection>

      <TweakSection label="Accent">
        <TweakRadio
          label="Surface"
          value={tweaks.accent_mode}
          options={[
            { value: "warm", label: "Gold only" },
            { value: "sand", label: "+ Sand" },
          ]}
          onChange={(v) => setTweak("accent_mode", v)}
        />
        <TweakToggle
          label="Dark mode"
          value={tweaks.dark}
          onChange={(v) => setTweak("dark", v)}
        />
      </TweakSection>

      <TweakSection label="Quick jump">
        <div style={{ display: "flex", flexDirection: "column", gap: 6 }}>
          {[
            { label: "Home", page: "home", slug: null },
            { label: "Tour catalog", page: "tours", slug: null },
            { label: "Combo Tour (detail)", page: "tours", slug: "combo-tour" },
            { label: "1-Day Jeep Tour", page: "tours", slug: "1-day-jeep-tour" },
            { label: "Private & Custom", page: "private-custom-tours", slug: null },
            { label: "Nature", page: "nature", slug: null },
            { label: "Safety", page: "safety-insurance", slug: null },
            { label: "Contact", page: "contact", slug: null },
          ].map((j) => (
            <TweakButton
              key={j.label}
              label={j.label}
              onClick={() => navigate(route.lang, j.page, j.slug)}
            />
          ))}
        </div>
      </TweakSection>
    </TweaksPanel>
  );
}

// Mount
ReactDOM.createRoot(document.getElementById("root")).render(<App/>);
