/* global React, ReactDOM, Home, ThesisPage, PortfolioPage, MarketsPage, NetworkPage, InsightsPage, TeamPage, LitmusLogo, Navigator */
const useState = React.useState;
const useEffect = React.useEffect;

// Tweak defaults (persisted via host)
const TWEAKS = /*EDITMODE-BEGIN*/{
  "mode": "dark",
  "mapOn": true,
  "headlineIdx": 0,
  "logo": "strip",
  "navFont": "modern"
}/*EDITMODE-END*/;

// Header is provided by Navigator (navigator.jsx)

function Footer({ setPage, logoVariant = 'strip' }) {
  return (
    <footer>
      <div className="container">
        <div className="cols">
          <div>
            <div className="wordmark" style={{textTransform:'none', letterSpacing:0, fontWeight:400}}>
              <LitmusLogo variant={logoVariant} size={32}/>
            </div>
            <p style={{maxWidth:'36ch', color:'var(--muted)', fontSize:14, marginTop:18, lineHeight:1.55}}>
              A growth-markets operating-infrastructure VC. We invest in financial rails, merchant systems and essential urban infrastructure.
            </p>
          </div>
          <div>
            <h5>Navigate</h5>
            <ul>
              <li><a onClick={()=>setPage('thesis')} style={{cursor:'pointer'}}>Thesis</a></li>
              <li><a onClick={()=>setPage('portfolio')} style={{cursor:'pointer'}}>Portfolio</a></li>
              <li><a onClick={()=>setPage('markets')} style={{cursor:'pointer'}}>Markets</a></li>
              <li><a onClick={()=>setPage('network')} style={{cursor:'pointer'}}>Network</a></li>
              <li><a onClick={()=>setPage('insights')} style={{cursor:'pointer'}}>Insights</a></li>
              <li><a onClick={()=>setPage('team')} style={{cursor:'pointer'}}>Team</a></li>
            </ul>
          </div>
          <div>
            <h5>Offices</h5>
            <ul>
              <li><a>Dubai</a></li>
              <li><a>Singapore</a></li>
              <li><a>Lagos</a></li>
              <li><a>London</a></li>
            </ul>
          </div>
          <div>
            <h5>Contact</h5>
            <ul>
              <li><a>hello@litmus.capital</a></li>
              <li><a onClick={()=>{ setPage('home'); setTimeout(()=>document.querySelector('[data-screen-label="09 Home · Contact"]')?.scrollIntoView({behavior:'smooth'}),50); }} style={{cursor:'pointer'}}>Pitch us →</a></li>
              <li><a>LP inquiries</a></li>
            </ul>
          </div>
        </div>
        <div className="bottom">
          <span>© {new Date().getFullYear()} LITMUS Capital Management</span>
          <span>Growth Markets · Operating Infrastructure</span>
          <span>LM-2026 / R.02</span>
        </div>
      </div>
    </footer>
  );
}

function TweaksPanel({ visible, state, setState }) {
  if (!visible) return null;
  const set = (k, v) => {
    const ns = { ...state, [k]: v };
    setState(ns);
    window.parent.postMessage({ type: '__edit_mode_set_keys', edits: { [k]: v } }, '*');
  };
  return (
    <div className="tweaks-panel">
      <h6>Tweaks <span style={{color:'#6c7a88'}}>LITMUS / v.01</span></h6>
      <div className="tweak-row">
        <label>Body mode</label>
        <div className="opts">
          <div className={`opt ${state.mode==='light'?'active':''}`} onClick={()=>set('mode','light')}>Light</div>
          <div className={`opt ${state.mode==='dark'?'active':''}`} onClick={()=>set('mode','dark')}>Dark</div>
        </div>
      </div>
      <div className="tweak-row toggle">
        <label style={{margin:0}}>Corridors map</label>
        <div className={`switch ${state.mapOn?'on':''}`} onClick={()=>set('mapOn', !state.mapOn)}/>
      </div>
      <div className="tweak-row">
        <label>Logo variant</label>
        <div className="opts">
          <div className={`opt ${state.logo==='strip'?'active':''}`} onClick={()=>set('logo','strip')}>Strip</div>
          <div className={`opt ${state.logo==='stack'?'active':''}`} onClick={()=>set('logo','stack')}>Stack</div>
          <div className={`opt ${state.logo==='dot'?'active':''}`} onClick={()=>set('logo','dot')}>Dot</div>
        </div>
      </div>
      <div className="tweak-row">
        <label>Nav font</label>
        <div className="opts">
          <div className={`opt ${state.navFont==='modern'||!state.navFont?'active':''}`} onClick={()=>set('navFont','modern')}>Modern</div>
          <div className={`opt ${state.navFont==='editorial'?'active':''}`} onClick={()=>set('navFont','editorial')}>Editorial</div>
          <div className={`opt ${state.navFont==='archive'?'active':''}`} onClick={()=>set('navFont','archive')}>Archive</div>
        </div>
      </div>
      <div className="tweak-row">
        <label>Hero headline</label>
        <div className="opts">
          <div className={`opt ${state.headlineIdx===0?'active':''}`} onClick={()=>set('headlineIdx',0)}>01</div>
          <div className={`opt ${state.headlineIdx===1?'active':''}`} onClick={()=>set('headlineIdx',1)}>02</div>
          <div className={`opt ${state.headlineIdx===2?'active':''}`} onClick={()=>set('headlineIdx',2)}>03</div>
        </div>
      </div>
    </div>
  );
}

function App() {
  const [page, setPageRaw] = useState(() => localStorage.getItem('litmus.page') || 'home');
  const [tweaks, setTweaks] = useState(TWEAKS);
  const [tweaksVisible, setTweaksVisible] = useState(false);

  const setPage = (p) => {
    setPageRaw(p);
    localStorage.setItem('litmus.page', p);
    window.scrollTo({ top: 0, behavior: 'instant' });
  };

  useEffect(() => {
    document.documentElement.setAttribute('data-mode', tweaks.mode || 'light');
  }, [tweaks.mode]);

  useEffect(() => {
    document.documentElement.setAttribute('data-nav-font', tweaks.navFont || 'modern');
  }, [tweaks.navFont]);

  // Tweak-mode protocol
  useEffect(() => {
    const onMsg = (e) => {
      const d = e.data;
      if (!d || typeof d !== 'object') return;
      if (d.type === '__activate_edit_mode') setTweaksVisible(true);
      if (d.type === '__deactivate_edit_mode') setTweaksVisible(false);
    };
    window.addEventListener('message', onMsg);
    window.parent.postMessage({ type: '__edit_mode_available' }, '*');
    return () => window.removeEventListener('message', onMsg);
  }, []);

  // Reveal on scroll
  useEffect(() => {
    const obs = new IntersectionObserver((entries) => {
      entries.forEach(e => { if (e.isIntersecting) e.target.classList.add('in'); });
    }, { threshold: 0.1 });
    document.querySelectorAll('.reveal').forEach(el => obs.observe(el));
    return () => obs.disconnect();
  }, [page]);

  return (
    <>
      <Navigator page={page} setPage={setPage} logoVariant={tweaks.logo}/>
      {page === 'home' && <Home mapOn={tweaks.mapOn} headlineIdx={tweaks.headlineIdx||0} setPage={setPage}/>}
      {page === 'thesis' && <ThesisPage/>}
      {page === 'portfolio' && <PortfolioPage/>}
      {page === 'markets' && <MarketsPage/>}
      {page === 'network' && <NetworkPage setPage={setPage}/>}
      {page === 'insights' && <InsightsPage/>}
      {page === 'team' && <TeamPage/>}
      <Footer setPage={setPage} logoVariant={tweaks.logo}/>
      <TweaksPanel visible={tweaksVisible} state={tweaks} setState={setTweaks}/>
    </>
  );
}

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