/* ============================================================
   APP — router + tweaks wiring
   ============================================================ */

function parseRoute() {
  const h = (location.hash || '#/home').replace(/^#\/?/, '');
  const [route, sub] = h.split('/');
  return { route: route || 'home', sub: sub || null };
}

function App() {
  const [{ route, sub }, setRouteState] = useState(parseRoute());
  const [tweaks, setTweaks] = useState(window.__TWEAK_DEFAULTS);
  const [tweaksOn, setTweaksOn] = useState(false);

  // Apply tweaks to <html>
  useEffect(() => {
    const h = document.documentElement;
    h.setAttribute('data-palette', tweaks.palette);
    h.setAttribute('data-fonts', tweaks.fonts);
    h.setAttribute('data-hero', tweaks.hero);
    h.setAttribute('data-dark', String(!!tweaks.dark));
    h.setAttribute('data-nav', tweaks.nav);
    h.setAttribute('data-density', tweaks.density);
  }, [tweaks]);

  // Hash router
  useEffect(() => {
    const onHash = () => {
      setRouteState(parseRoute());
      window.scrollTo({ top: 0, behavior: 'instant' });
    };
    window.addEventListener('hashchange', onHash);
    return () => window.removeEventListener('hashchange', onHash);
  }, []);

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

  let Page;
  switch (route) {
    case 'home': Page = <HomePage/>; break;
    case 'about': Page = <AboutPage/>; break;
    case 'sermons': Page = <SermonsPage/>; break;
    case 'events': Page = <EventsPage/>; break;
    case 'ministries':
      Page = sub ? <MinistryRouter slug={sub}/> : <MinistriesPage/>;
      break;
    case 'visit': Page = <VisitPage/>; break;
    case 'give': Page = <GivePage/>; break;
    case 'contact': Page = <ContactPage/>; break;
    default: Page = <HomePage/>;
  }

  const screenLabel = route === 'ministries' && sub ? `${route}/${sub}` : route;

  return (
    <div data-screen-label={screenLabel}>
      <Nav route={route} onNav={() => {}}/>
      <div className="main-shell">
        <Sidebar route={route}/>
        <main>{Page}</main>
      </div>
      <Footer/>
      {tweaksOn && <TweaksPanel tweaks={tweaks} setTweaks={setTweaks}/>}
    </div>
  );
}

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