/* ================= Uygulama kabuğu — yönlendirme ve düzen ================= */
/* PHP ile entegre: window.__PHP üzerinden sayfa, dil, bölüm durumları okunur. */

/**
 * Bağımlılık kontrolü.
 *
 * Site 8 ayrı JSX dosyasını tarayıcıda derliyor. Bunlardan biri sunucuya
 * eksik/yarım yüklenirse eskiden sayfa bembeyaz kalıyor ve konsolda anlamsız
 * bir "undefined" hatası çıkıyordu. Artık hangi dosyanın yüklenemediğini
 * ekranda söylüyoruz ve HTTP durumunu da kontrol ediyoruz.
 */
const REQUIRED = [
  ["Icons",     "icons.jsx"],
  ["Scroll",    "scroll.jsx"],
  ["DATA",      "data.jsx"],
  ["UI",        "corporate-ui.jsx"],
  ["ErpDemo",   "erp.jsx"],
  ["CorpPages", "corporate-pages.jsx"],
  ["ErpPage",   "erp-page.jsx"],
];

const MISSING = REQUIRED.filter(function (m) { return !window[m[0]]; });

if (MISSING.length) {
  (function reportMissing() {
    var root = document.getElementById("root");
    if (!root) return;

    var base = "assets/design/js/";
    root.innerHTML =
      '<div style="max-width:760px;margin:60px auto;padding:32px;font-family:system-ui,sans-serif;' +
      'border:1px solid #e5ebf4;border-radius:16px;background:#fff;box-shadow:0 8px 30px -12px rgba(13,22,38,.18)">' +
      '<h1 style="font-size:22px;margin:0 0 10px;color:#0d1626">Site dosyaları eksik yüklenmiş</h1>' +
      '<p style="color:#3f4c61;line-height:1.6;margin:0 0 18px">Aşağıdaki dosyalar sunucuda bulunamadı ya da ' +
      'yarım yüklenmiş. FTP ile tekrar yükleyip sayfayı yenileyin.</p>' +
      '<ul id="dep-list" style="margin:0;padding:0;list-style:none;display:grid;gap:8px"></ul>' +
      '<p style="color:#7b8699;font-size:13px;margin:18px 0 0">FTP programınızda aktarım modunu ' +
      '<b>Binary</b> yapın; ASCII modu büyük dosyaları bozabiliyor.</p></div>';

    var list = document.getElementById("dep-list");

    MISSING.forEach(function (m) {
      var li = document.createElement("li");
      li.style.cssText = "padding:11px 14px;border-radius:10px;background:#fdeae6;color:#b23a23;" +
        "font-size:14px;font-family:ui-monospace,Consolas,monospace";
      li.textContent = base + m[1] + " — kontrol ediliyor…";
      list.appendChild(li);

      // Dosya sunucuda gerçekten var mı, varsa boyutu ne?
      fetch(base + m[1], {cache: "no-store"})
        .then(function (r) {
          if (!r.ok) throw new Error("HTTP " + r.status);
          return r.text();
        })
        .then(function (txt) {
          var tam = txt.indexOf("window." + m[0]) !== -1;
          li.textContent = base + m[1] + " — " + Math.round(txt.length / 1024) + " KB, " +
            (tam ? "dosya tam ama çalışmadı (bir önceki dosyada hata olabilir)"
                 : "DOSYA YARIM — tekrar yükleyin");
          if (tam) { li.style.background = "#fdf3e2"; li.style.color = "#a96a13"; }
        })
        .catch(function (e) {
          li.textContent = base + m[1] + " — SUNUCUDA YOK (" + e.message + ")";
        });
    });

    console.error("[Alker] Yüklenemeyen modüller:", MISSING.map(function (m) { return m[1]; }).join(", "));
  })();
}

const CP = window.CorpPages || {};

/** Sayfa anahtarı → bileşen + bölüm anahtarı (bölüm kapalıysa 404) */
const ROUTES = {
  home:      {c: CP.HomePage,          sec: null},
  hizmetler: {c: CP.ServicesPage,      sec: 'page_hizmetler'},
  hizmet:    {c: CP.ServiceDetailPage, sec: 'page_hizmetler'},
  donanim:   {c: CP.HardwarePage,      sec: 'page_donanim'},
  erp:       {c: window.ErpPage,       sec: 'page_erp'},
  projeler:  {c: CP.ProjectsPage,      sec: 'page_projeler'},
  about:     {c: CP.AboutPage,         sec: 'page_about'},
  destek:    {c: CP.SupportPage,       sec: 'page_destek'},
  faq:       {c: CP.FaqPage,           sec: 'page_faq'},
  contact:   {c: CP.ContactPage,       sec: 'page_contact'},
  yasal:     {c: CP.LegalPage,         sec: 'page_yasal'},
};

function ScrollProgressBar() {
  const [w, setW] = useState(0);
  useEffect(() => {
    const h = () => {
      const max = document.documentElement.scrollHeight - window.innerHeight;
      setW(max > 0 ? (window.scrollY / max) * 100 : 0);
    };
    h();
    window.addEventListener("scroll", h, {passive: true});
    window.addEventListener("resize", h);
    return () => { window.removeEventListener("scroll", h); window.removeEventListener("resize", h); };
  }, []);
  if (!secOn('scroll_progress')) return null;
  return <div style={{position:"fixed",top:0,left:0,height:3,zIndex:300,width:w+"%",
    background:"var(--grad-brand)",boxShadow:"0 0 12px rgba(37,99,235,.55)",transition:"width .09s linear"}}/>;
}

function App() {
  const [state, setState] = useState({
    page: PHP.page || "home",
    service: PHP.serviceKey || "",
    cat: PHP.hardwareCat || "",
    doc: PHP.legalDoc || "",
    scroll: (window.location.hash || "").replace("#", ""),
  });

  /** Sayfa geçişi — adres çubuğunu da günceller (SEO ve geri tuşu için) */
  const nav = useCallback((page, opts) => {
    opts = opts || {};
    const next = {
      page,
      service: opts.s || "",
      cat: opts.cat || "",
      doc: opts.doc || "",
      scroll: opts.scroll || "",
    };
    setState(next);

    let url = "?page=" + encodeURIComponent(page) + "&lang=" + (PHP.lang || "tr");
    if (next.service) url += "&s=" + encodeURIComponent(next.service);
    if (next.cat)     url += "&cat=" + encodeURIComponent(next.cat);
    if (next.doc)     url += "&doc=" + encodeURIComponent(next.doc);
    if (next.scroll)  url += "#" + next.scroll;
    window.history.pushState(next, "", url);

    if (!next.scroll) window.scrollTo({top: 0});
  }, []);

  // Tarayıcı geri / ileri
  useEffect(() => {
    const pop = () => {
      const p = new URLSearchParams(window.location.search);
      setState({
        page: p.get("page") || "home",
        service: p.get("s") || "",
        cat: p.get("cat") || "",
        doc: p.get("doc") || "",
        scroll: (window.location.hash || "").replace("#", ""),
      });
    };
    window.addEventListener("popstate", pop);
    return () => window.removeEventListener("popstate", pop);
  }, []);

  // Sayfa değişince başlığı bildir (erişilebilirlik)
  useEffect(() => {
    const main = document.getElementById("main");
    if (main) main.setAttribute("data-page", state.page);
  }, [state.page]);

  const route = ROUTES[state.page];
  const disabled = route && route.sec && !secOn(route.sec);
  const Page = (!route || disabled || !route.c) ? CP.NotFoundPage : route.c;

  const extra = {};
  if (Page === CP.ServiceDetailPage) extra.serviceKey = state.service;
  if (Page === CP.HardwarePage)      extra.initialCat = state.cat;
  if (Page === CP.LegalPage)         extra.initialDoc = state.doc;
  if (Page === window.ErpPage)       extra.scrollTo = state.scroll;

  return (
    <>
      <ScrollProgressBar/>
      <a className="skip" href="#main">{T('skip_to_content', 'İçeriğe geç')}</a>
      <U.TopBar nav={nav}/>
      <U.Navbar page={state.page} nav={nav}/>
      <main id="main" key={state.page + state.service + state.cat}>
        <Page nav={nav} {...extra}/>
      </main>
      <U.Footer nav={nav}/>
      <U.QuoteModal/>
      <U.ProductModal/>
      <U.CookieBanner/>
      <U.FloatButtons nav={nav}/>
      <U.Toast/>
    </>
  );
}

// Bağımlılıklardan biri eksikse yukarıdaki tanı ekranı kalsın, üzerine render etme
if (!MISSING.length) {
  ReactDOM.createRoot(document.getElementById("root")).render(<App/>);
}
