// App — root component
// Manages preloader state and passes site data to children

function App() {
  const [siteData, setSiteData] = React.useState(null);
  const [preloaderDone, setPreloaderDone] = React.useState(false);
  const [heroReady, setHeroReady] = React.useState(false);

  // Load content.json — prefer window.__SITE_DATA__ if already fetched
  React.useEffect(() => {
    if (window.__SITE_DATA__) {
      setSiteData(window.__SITE_DATA__);
    } else {
      fetch('./data/content.json')
        .then(r => r.json())
        .then(data => {
          window.__SITE_DATA__ = data;
          setSiteData(data);
        })
        .catch(() => console.error('Failed to load content.json'));
    }
  }, []);

  // When preloader signals complete, allow hero entrance animations
  const handlePreloaderComplete = React.useCallback(() => {
    setPreloaderDone(true);
    // Brief RAF delay so React commits the hero DOM before GSAP runs
    requestAnimationFrame(() => {
      requestAnimationFrame(() => {
        setHeroReady(true);
      });
    });
  }, []);

  const logoSrc = siteData ? siteData.logo : './brand_assets/images/logo-final-trans.png';

  return (
    <React.Fragment>
      {!preloaderDone && (
        <Preloader
          logoSrc={logoSrc}
          onComplete={handlePreloaderComplete}
        />
      )}
      <Navbar data={siteData} />
      <main>
        <Hero data={siteData} heroReady={heroReady} />
      </main>
    </React.Fragment>
  );
}
