// app.jsx — root App with language toggle, Tweaks, and reveal observer.

const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
  "variant": "refined",
  "accent": "#b8893d",
  "fontAr": "IBM Plex Sans Arabic",
  "dark": false,
  "lang": "ar"
}/*EDITMODE-END*/;

const ACCENT_PALETTES = {
  "#b8893d": { gold: "#b8893d", soft: "#d4b277", deep: "#8a6422", tint: "#f3ead6", label: "Warm Gold" },
  "#c8a97e": { gold: "#c8a97e", soft: "#dec4a2", deep: "#9a7a4f", tint: "#f5ecde", label: "Soft Beige" },
  "#1E3A8A": { gold: "#1E3A8A", soft: "#3b5bb9", deep: "#162a64", tint: "#e0e7f3", label: "Deep Blue" },
  "#0f7a5b": { gold: "#0f7a5b", soft: "#3aa783", deep: "#0a5a42", tint: "#dcefe6", label: "Forest" },
};

const FONTS_AR = {
  "IBM Plex Sans Arabic": "'IBM Plex Sans Arabic', 'Tajawal', system-ui, sans-serif",
  "Tajawal": "'Tajawal', 'IBM Plex Sans Arabic', system-ui, sans-serif",
  "Cairo": "'Cairo', 'IBM Plex Sans Arabic', system-ui, sans-serif",
  "Rubik": "'Rubik', 'IBM Plex Sans Arabic', system-ui, sans-serif",
};

function App() {
  const [t, setTweak] = window.useTweaks(TWEAK_DEFAULTS);
  const lang = t.lang;
  const dict = window.TRANSLATIONS[lang];
  const isRtl = dict.dir === "rtl";

  // Sync <html lang> + dir
  React.useEffect(() => {
    document.documentElement.lang = lang;
    document.documentElement.dir = dict.dir;
  }, [lang, dict.dir]);

  // Dark mode class
  React.useEffect(() => {
    document.body.classList.toggle("theme-dark", !!t.dark);
    document.body.classList.toggle("variant-bold", t.variant === "bold");
  }, [t.dark, t.variant]);

  // Apply accent + font as custom props
  const accent = ACCENT_PALETTES[t.accent] || ACCENT_PALETTES["#b8893d"];
  const styleVars = {
    "--gold": accent.gold,
    "--gold-soft": accent.soft,
    "--gold-deep": accent.deep,
    "--gold-tint": accent.tint,
    "--ff-ar": FONTS_AR[t.fontAr] || FONTS_AR["IBM Plex Sans Arabic"],
    "--ff-display-ar": FONTS_AR[t.fontAr] || FONTS_AR["IBM Plex Sans Arabic"],
  };

  // Scroll reveal observer — scoped to the app shell
  React.useEffect(() => {
    const io = new IntersectionObserver(
      (entries) => {
        entries.forEach((e) => {
          if (e.isIntersecting) {
            e.target.classList.add("in");
            io.unobserve(e.target);
          }
        });
      },
      { threshold: 0.1, rootMargin: "0px 0px -40px 0px" }
    );
    document.querySelectorAll(".reveal:not(.in)").forEach((n) => io.observe(n));
    return () => io.disconnect();
  }, [lang, t.variant]);

  // WhatsApp link
  const wa = "01062578541";
  const waInternational = "20" + wa.replace(/^0/, "");
  const waMessage = isRtl
    ? "أهلًا، حابب أعرف تفاصيل أكتر عن مواقعكم"
    : "Hi! I'd like to know more about your websites.";
  const waLink = `https://wa.me/${waInternational}?text=${encodeURIComponent(waMessage)}`;

  const toggleLang = () => setTweak("lang", lang === "ar" ? "en" : "ar");

  // Build the dict object the components need, including dir/lang quick-access
  const T = { ...dict, dir: dict.dir, lang };

  return (
    <div style={styleVars}>
      <window.Nav t={T} lang={lang} onLangToggle={toggleLang} waLink={waLink} />
      <main>
        <window.Hero t={T} waLink={waLink} />
        <window.Problem t={T} />
        <window.Services t={T} />
        <window.Portfolio t={T} />
        <window.Pricing t={T} waLink={waLink} />
        <window.Maintenance t={T} waLink={waLink} />
        <window.Process t={T} />
        <window.Why t={T} />
        <window.FAQ t={T} />
        <window.FinalCTA t={T} waLink={waLink} />
      </main>
      <window.Footer t={T} lang={lang} waLink={waLink} />
      <window.WhatsAppFloat waLink={waLink} label={T.nav.wa} />

      <window.TweaksPanel title="Tweaks">
        <window.TweakSection label={isRtl ? "اللغة والنمط" : "Language & style"} />
        <window.TweakRadio
          label={isRtl ? "اللغة" : "Language"}
          value={t.lang}
          options={[{ value: "ar", label: "AR" }, { value: "en", label: "EN" }]}
          onChange={(v) => setTweak("lang", v)}
        />
        <window.TweakRadio
          label={isRtl ? "النمط" : "Style"}
          value={t.variant}
          options={isRtl
            ? [{ value: "refined", label: "متوازن" }, { value: "bold", label: "جريء" }]
            : [{ value: "refined", label: "Refined" }, { value: "bold", label: "Bold" }]}
          onChange={(v) => setTweak("variant", v)}
        />
        <window.TweakToggle
          label={isRtl ? "الوضع الداكن" : "Dark mode"}
          value={t.dark}
          onChange={(v) => setTweak("dark", v)}
        />

        <window.TweakSection label={isRtl ? "الألوان" : "Accent"} />
        <window.TweakColor
          label={isRtl ? "اللون المميز" : "Accent color"}
          value={t.accent}
          options={["#b8893d", "#c8a97e", "#1E3A8A", "#0f7a5b"]}
          onChange={(v) => setTweak("accent", v)}
        />

        <window.TweakSection label={isRtl ? "الخط" : "Typography"} />
        <window.TweakSelect
          label={isRtl ? "الخط العربي" : "Arabic font"}
          value={t.fontAr}
          options={Object.keys(FONTS_AR)}
          onChange={(v) => setTweak("fontAr", v)}
        />
      </window.TweaksPanel>
    </div>
  );
}

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