// app.jsx — VENTI Airbnb-style composition

const { useState, useEffect } = React;

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "lang": "en",
  "heroLayout": "sidebyside",
  "heroPhoto": "assets/photos/house-pool-hero.jpeg"
}/*EDITMODE-END*/;

function App() {
  const [t, setTweak] = useTweaks(TWEAK_DEFAULTS);
  const [lang, setLang] = useState(t.lang || "en");

  useEffect(() => { setLang(t.lang); }, [t.lang]);

  const strings = (window.I18N && window.I18N[lang]) || window.I18N.en;
  const onLang = (l) => { setLang(l); setTweak("lang", l); };

  // Scroll reveals (simple, IntersectionObserver)
  useEffect(() => {
    const els = document.querySelectorAll(".reveal:not(.in)");
    const vh = window.innerHeight;
    els.forEach((el) => {
      const r = el.getBoundingClientRect();
      if (r.top < vh * 0.95 && r.bottom > 0) el.classList.add("in");
    });
    const io = new IntersectionObserver((entries) => {
      entries.forEach((e) => {
        if (e.isIntersecting) { e.target.classList.add("in"); io.unobserve(e.target); }
      });
    }, { threshold: 0.05, rootMargin: "0px 0px -4% 0px" });
    els.forEach((el) => io.observe(el));
    const safety = setTimeout(() => {
      document.querySelectorAll(".reveal:not(.in)").forEach((el) => el.classList.add("in"));
    }, 1200);
    return () => { io.disconnect(); clearTimeout(safety); };
  }, [lang]);

  return (
    <>
      <TopNav t={strings} lang={lang} setLang={onLang} />
      <EditorialHero t={strings} layout={t.heroLayout} photo={t.heroPhoto} />
      <PillarsBlock t={strings} />
      <PlaceBlock t={strings} />
      <BenefitsBlock t={strings} />
      <HeroListing t={strings} />
      <ListingDetail t={strings} />
      <RatingBlock t={strings} />
      <MapBlock t={strings} />
      <ThingsToKnow t={strings} />
      <OtherHouses t={strings} />
      <FAQBlock t={strings} />
      <ContactBlock t={strings} />
      <FinalCTA t={strings} />
      <Footer t={strings} />
      <StickyBottomBar t={strings} />

      <TweaksPanel>
        <TweakSection label="Language" />
        <TweakRadio
          label="Site language"
          value={lang}
          options={[
            { value: "en", label: "EN" },
            { value: "pt", label: "PT" },
            { value: "es", label: "ES" },
          ]}
          onChange={(v) => onLang(v)}
        />

        <TweakSection label="Hero" />
        <TweakRadio
          label="Hero layout"
          value={t.heroLayout}
          options={[
            { value: "overlap",     label: "Overlap" },
            { value: "sidebyside",  label: "Side" },
            { value: "fullbleed",   label: "Bleed" },
          ]}
          onChange={(v) => setTweak("heroLayout", v)}
        />
        <TweakSelect
          label="Hero photo"
          value={t.heroPhoto}
          options={[
            { value: "assets/photos/house-pool-hero.jpeg",     label: "House · pool hero" },
            { value: "assets/photos/deck-pool-day.jpeg",       label: "Deck · pool day" },
            { value: "assets/photos/deck-palms-wide.jpeg",     label: "Deck · palms wide" },
            { value: "assets/photos/house-exterior-palms.jpeg",label: "Exterior · palms" },
            { value: "assets/photos/living-day.jpeg",          label: "Living · day" },
            { value: "assets/photos/living-night.jpeg",        label: "Living · night" },
            { value: "assets/photos/kitchen-view.jpeg",        label: "Kitchen view" },
            { value: "assets/photos/bedroom-master-deck.jpeg", label: "Master · deck" },
            { value: "assets/photos/bedroom-pool-view.jpeg",   label: "Bedroom · pool" },
            { value: "assets/photos/bedroom-twin-kite.jpeg",   label: "Twin · kite" },
            { value: "assets/photos/master-suite-night.jpeg",  label: "Master · night" },
            { value: "assets/photos/bathroom-marble.jpeg",     label: "Bathroom · marble" },
            { value: "assets/photos/pool-night.jpeg",          label: "Pool · night" },
            { value: "assets/photos/kite-storage.jpeg",        label: "Kite storage" },
            { value: "assets/photos/hero-sunset-kites.jpeg",   label: "Sunset · kites" },
            { value: "assets/photos/sunset-kites-sun.jpeg",    label: "Sunset · sun" },
            { value: "assets/photos/sunset-walker.jpeg",       label: "Sunset · walker" },
          ]}
          onChange={(v) => setTweak("heroPhoto", v)}
        />
      </TweaksPanel>
    </>
  );
}

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