/* global React, ReactDOM */
const { useState, useEffect } = React;

function App() {
  const { TopStrip, Nav, Hero, ServicesStrip, ServicesBig, FactGrid } = window.HeaderHero;
  const { OurSystem, Packages, Calculator } = window.PartsMid;
  const { Cases, Instagram, Seo, FAQ, AddressMap, Footer } = window.PartsLate;

  const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
    "lang": "EN",
    "theme": "light"
  }/*EDITMODE-END*/;

  const tweaks = window.useTweaks ? window.useTweaks(TWEAK_DEFAULTS) : [TWEAK_DEFAULTS, ()=>{}];
  const [t, setT] = tweaks;
  const lang = t.lang;
  const setLang = (v) => setT('lang', v);
  const theme = t.theme;
  const setTheme = (v) => setT('theme', v);

  // sync <html lang> + document.title + meta description with chosen language
  useEffect(() => {
    document.documentElement.lang = (lang || "EN").toLowerCase();
    document.documentElement.dataset.theme = theme;
    const dict = (window.SUOMI_I18N && window.SUOMI_I18N[lang]) || (window.SUOMI_I18N && window.SUOMI_I18N.EN) || {};
    if (dict.page_title) document.title = dict.page_title;
    const desc = document.querySelector('meta[name="description"]');
    if (desc && dict.page_desc) desc.setAttribute('content', dict.page_desc);
  }, [lang, theme]);

  const TP = window.TweaksPanel;
  const TS = window.TweakSection;
  const TR = window.TweakRadio;

  return (
    <window.LangContext.Provider value={lang || "EN"}>
      <TopStrip lang={lang} setLang={setLang}/>
      <Nav/>
      <Hero/>
      <ServicesStrip/>
      <ServicesBig/>
      <FactGrid/>
      <OurSystem/>
      <Packages/>
      <Calculator/>
      <Cases/>
      <Instagram/>
      <Seo/>
      <FAQ/>
      <AddressMap/>
      <Footer/>

      {TP && (
        <TP title="Tweaks">
          <TS label="Language">
            <TR label="Interface language" value={lang} onChange={v=>setLang(v)} options={[
              { value: "EN", label: "EN" },
              { value: "RU", label: "RU" },
              { value: "LT", label: "LT" },
              { value: "PL", label: "PL" },
              { value: "LV", label: "LV" },
            ]}/>
          </TS>
          <TS label="Theme">
            <TR label="Color theme" value={theme} onChange={v=>setTheme(v)} options={[
              { value: "light", label: "Light" },
              { value: "dark", label: "Dark" },
            ]}/>
          </TS>
        </TP>
      )}
    </window.LangContext.Provider>
  );
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<App/>);
