/* @jsxRuntime classic */
/* global React, Logotype, Amp, Nav, HomePage, AboutPage, FaqPage, ContactPage, LangContext, T, ValGal, LangToggle */
const { useState: useStateApp, useEffect: useEffectApp } = React;

const Footer = ({ setRoute, lang, setLang }) => {
  const t = T[lang];
  return (
    <footer style={{background:'var(--vg-ink)', color:'rgba(244,239,230,0.65)', padding:'56px 32px 36px'}}>
      <div style={{maxWidth:'var(--vg-container)', margin:'0 auto'}}>
        <div style={{display:'flex', flexWrap:'wrap', gap:32, alignItems:'center', justifyContent:'space-between', paddingBottom:32, borderBottom:'1px solid rgba(244,239,230,0.12)'}}>
          <Logotype variant="dark" height={32}/>
          <nav style={{display:'flex', gap:28, flexWrap:'wrap', alignItems:'center'}}>
            {[['home', t.nav.home], ['about', t.nav.about], ['faq', t.nav.faq], ['contact', t.nav.contact]].map(([id, l]) => (
              <a key={id} href={'#'+id} onClick={e => { e.preventDefault(); setRoute(id); }} style={{
                fontFamily:"'Inter Tight', sans-serif", fontSize:10.5, fontWeight:600,
                textTransform:'uppercase', letterSpacing:'0.22em',
                color:'rgba(244,239,230,0.75)', textDecoration:'none',
              }}>{l}</a>
            ))}
            <span style={{display:'inline-block', width:1, height:14, background:'rgba(244,239,230,0.2)'}}/>
            <LangToggle lang={lang} setLang={setLang} dark/>
          </nav>
        </div>
        <div style={{display:'flex', justifyContent:'space-between', alignItems:'center', flexWrap:'wrap', gap:16, paddingTop:24, fontFamily:"'Inter Tight', sans-serif", fontSize:10.5, fontWeight:600, textTransform:'uppercase', letterSpacing:'0.22em'}}>
          <div style={{fontStyle:'italic', textTransform:'none', fontFamily:"'Cormorant Garamond', serif", fontSize:14, letterSpacing:'0.04em'}}>
            {t.footer.established}
          </div>
          <div>{t.footer.copyright}<Amp/>GAL Capital</div>
        </div>
      </div>
    </footer>
  );
};

const PAGES = { home: HomePage, about: AboutPage, faq: FaqPage, contact: ContactPage };
const LABELS = { home:'01 Home', about:'02 About', faq:'03 FAQ', contact:'04 Contact' };

const App = () => {
  const initial = (typeof location !== 'undefined' && location.hash || '').replace('#','');
  const [route, setRouteRaw] = useStateApp(PAGES[initial] ? initial : 'home');
  const [transitioning, setTransitioning] = useStateApp(false);
  const [lang, setLangRaw] = useStateApp(() => {
    try {
      const stored = localStorage.getItem('vg-lang');
      if (stored === 'en' || stored === 'es') return stored;
    } catch (e) {}
    return 'en';
  });

  const setLang = (l) => {
    setLangRaw(l);
    try { localStorage.setItem('vg-lang', l); } catch (e) {}
    document.documentElement.setAttribute('lang', l);
  };

  useEffectApp(() => {
    document.documentElement.setAttribute('lang', lang);
  }, [lang]);

  const setRoute = (id) => {
    if (id === route || !PAGES[id]) return;
    setTransitioning(true);
    setTimeout(() => {
      setRouteRaw(id);
      window.scrollTo({ top:0, behavior:'instant' in window ? 'instant' : 'auto' });
      if (typeof history !== 'undefined') history.replaceState(null, '', '#'+id);
      requestAnimationFrame(() => setTransitioning(false));
    }, 220);
  };

  useEffectApp(() => {
    const onHash = () => {
      const h = (location.hash || '').replace('#','');
      if (PAGES[h] && h !== route) setRouteRaw(h);
    };
    window.addEventListener('hashchange', onHash);
    return () => window.removeEventListener('hashchange', onHash);
  }, [route]);

  const Page = PAGES[route];

  return (
    <LangContext.Provider value={lang}>
      <div data-screen-label={LABELS[route]}>
        <Nav route={route} setRoute={setRoute} lang={lang} setLang={setLang}/>
        <main style={{
          opacity: transitioning ? 0 : 1,
          transform: `translateY(${transitioning ? 8 : 0}px)`,
          transition:'opacity 220ms cubic-bezier(.25,.1,.25,1), transform 220ms cubic-bezier(.25,.1,.25,1)',
          minHeight:'60vh',
        }} key={route}>
          <Page setRoute={setRoute}/>
        </main>
        <Footer setRoute={setRoute} lang={lang} setLang={setLang}/>
      </div>
    </LangContext.Provider>
  );
};

Object.assign(window, { App });
