const YAKINDA_TEXT = {
  musteri: {
    title: "Müşteri Bul",
    sub: "Kayıtlı müşteriler arasında arama yapabileceğiniz alan yakında eklenecek."
  },
  odeme: {
    title: "Ödeme Al",
    sub: "Müşterilerden ödeme alma ekranı yakında eklenecek."
  },
  satislar: {
    title: "Satışlar",
    sub: "Geçmiş satışları toplu olarak görebileceğiniz ekran yakında eklenecek."
  },
  rapor: {
    title: "Raporlar",
    sub: "Satış ve ödeme özetlerini göreceğiniz rapor ekranı yakında eklenecek."
  },
  gecmis: {
    title: "Geçmiş İşlem",
    sub: "Eski satışları sonradan sisteme ekleyebileceğiniz ekran yakında eklenecek."
  }
};

document.addEventListener("DOMContentLoaded", () => {
  bindTopbar();
  bindActionButtons();
  tickClock();
  setInterval(tickClock, 30000);
  initApp();
});

async function initApp() {
  await initOverlayFlow();
}

function bindTopbar() {
  const lockBtn = document.getElementById("lock-btn");
  if (lockBtn) {
    lockBtn.addEventListener("click", handleLock);
  }

  const settingsBtn = document.getElementById("settings-btn");
  if (settingsBtn) {
    settingsBtn.addEventListener("click", async () => {
      document.querySelectorAll(".act").forEach((b) => b.classList.remove("on"));
      await ModuleLoader.loadModule("ayarlar", {});
    });
  }
}

function bindActionButtons() {
  // Tüm .act butonları aynı şekilde çalışır — dropdown yok
  const buttons = document.querySelectorAll(".act");
  buttons.forEach((button) => {
    button.addEventListener("click", async () => {
      document.querySelectorAll(".act").forEach((b) => b.classList.remove("on"));
      button.classList.add("on");

      const moduleName = button.dataset.module || "yakinda";
      await ModuleLoader.loadModule(moduleName, { trigger: button });
    });
  });
}

async function initOverlayFlow() {
  bindOverlayActions();

  const durumResp = await fetch("/api/durum");
  const durumData = await durumResp.json();

  const overlay = document.getElementById("overlay");
  const girisCard = document.getElementById("ov-card-giris");
  const kurulumCard = document.getElementById("ov-card-kurulum");
  const logoName = document.getElementById("ov-shop-name");

  if (!durumData.kurulum) {
    girisCard.style.display = "none";
    kurulumCard.style.display = "block";
    logoName.textContent = "Yeni Kurulum";
    return;
  }

  const shopResp = await fetch("/api/dukkan");
  const shopData = await shopResp.json();
  const shopName = shopData.dukkan_adi || "Sisteme Giriş";
  logoName.textContent = shopName;

  if (overlay.classList.contains("hidden")) {
    await afterLogin(shopName);
    return;
  }

  // F5 / sayfa yenileme: kilit durumunu sunucudan kontrol et
  const kilitResp = await fetch("/api/kilit-durumu");
  const kilitData = await kilitResp.json();
  if (kilitData.kilitli && kilitData.kalan_sn > 0) {
    const parolaInput = document.getElementById("ov-parola");
    const btn = document.querySelector("#ov-card-giris .ov-btn");
    const err = document.getElementById("ov-err");
    parolaInput.disabled = true;
    btn.disabled = true;
    err.style.display = "block";
    startLockoutCountdown(kilitData.kalan_sn, err, parolaInput, btn);
  }
}

function bindOverlayActions() {
  const girisBtn = document.querySelector("#ov-card-giris .ov-btn");
  const kurulumBtn = document.querySelector("#ov-card-kurulum .ov-btn");
  const parolaInput = document.getElementById("ov-parola");
  const parola2Input = document.getElementById("ov-parola2");

  if (girisBtn && !girisBtn.dataset.bound) {
    girisBtn.dataset.bound = "1";
    girisBtn.addEventListener("click", handleLogin);
  }

  const sifirlaBtn = document.getElementById("ov-btn-sifirla");
  if (sifirlaBtn && !sifirlaBtn.dataset.bound) {
    sifirlaBtn.dataset.bound = "1";
    sifirlaBtn.addEventListener("click", handleSifirla);
  }

  if (kurulumBtn && !kurulumBtn.dataset.bound) {
    kurulumBtn.dataset.bound = "1";
    kurulumBtn.addEventListener("click", handleSetup);
  }

  if (parolaInput && !parolaInput.dataset.bound) {
    parolaInput.dataset.bound = "1";
    parolaInput.addEventListener("keydown", (event) => {
      if (event.key === "Enter") handleLogin();
    });
  }

  if (parola2Input && !parola2Input.dataset.bound) {
    parola2Input.dataset.bound = "1";
    parola2Input.addEventListener("keydown", (event) => {
      if (event.key === "Enter") handleSetup();
    });
  }
}

async function handleLogin() {
  const parolaInput = document.getElementById("ov-parola");
  const err = document.getElementById("ov-err");
  const btn = document.querySelector("#ov-card-giris .ov-btn");
  err.style.display = "none";

  const response = await fetch("/api/giris", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ parola: parolaInput.value })
  });

  const data = await response.json();

  if (response.status === 429) {
    // Kilitli — geri sayım başlat
    err.style.display = "block";
    err.textContent = data.hata;
    parolaInput.disabled = true;
    btn.disabled = true;
    startLockoutCountdown(data.kalan_sn, err, parolaInput, btn);
    return;
  }

  if (!data.ok) {
    err.style.display = "block";
    err.textContent = data.hata || "Parola hatalı.";
    parolaInput.classList.add("err");
    setTimeout(() => parolaInput.classList.remove("err"), 1500);
    return;
  }

  // Master şifre ile giriş — şifre sıfırlama ekranına yönlendir
  if (data.master) {
    showSifirlaCard();
    return;
  }

  await afterLogin(data.dukkan_adi || "—");
}

function startLockoutCountdown(saniye, errEl, input, btn) {
  let kalan = saniye;
  const timer = setInterval(() => {
    kalan--;
    if (kalan <= 0) {
      clearInterval(timer);
      errEl.style.display = "none";
      input.disabled = false;
      btn.disabled = false;
      input.value = "";
      input.focus();
    } else {
      const dk = Math.floor(kalan / 60);
      const sn = kalan % 60;
      errEl.textContent = `Çok fazla hatalı giriş. ${dk > 0 ? dk + "dk " : ""}${sn}sn sonra tekrar deneyin.`;
    }
  }, 1000);
}

function showSifirlaCard() {
  document.getElementById("ov-card-giris").style.display = "none";
  document.getElementById("ov-card-kurulum").style.display = "none";
  document.getElementById("ov-card-sifirla").style.display = "block";
  document.getElementById("ov-yeni-parola").focus();
}

async function handleSifirla() {
  const yeni = document.getElementById("ov-yeni-parola").value;
  const yeni2 = document.getElementById("ov-yeni-parola2").value;
  const err = document.getElementById("ov-err-sifirla");
  err.style.display = "none";

  if (yeni.length < 4) {
    err.textContent = "Şifre en az 4 karakter olmalı";
    err.style.display = "block";
    return;
  }
  if (yeni !== yeni2) {
    err.textContent = "Şifreler eşleşmiyor";
    err.style.display = "block";
    return;
  }

  const res = await fetch("/api/sifre-sifirla", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ yeni_parola: yeni, yeni_parola_tekrar: yeni2 })
  });

  const d = await res.json();
  if (!d.ok) {
    err.textContent = d.hata || "Hata oluştu";
    err.style.display = "block";
    return;
  }

  // Şifre sıfırlandı, normal akışa devam
  const shopRes = await fetch("/api/dukkan");
  const shopData = await shopRes.json();
  await afterLogin(shopData.dukkan_adi || "—");
}

async function handleSetup() {
  const dukkan = document.getElementById("ov-dukkan").value.trim();
  const p1 = document.getElementById("ov-parola1").value;
  const p2 = document.getElementById("ov-parola2").value;
  const err = document.getElementById("ov-err2");

  err.style.display = "none";

  if (!dukkan) {
    err.textContent = "Dükkan adı zorunlu";
    err.style.display = "block";
    return;
  }

  if (p1.length < 4) {
    err.textContent = "Parola en az 4 karakter olmalı";
    err.style.display = "block";
    return;
  }

  if (p1 !== p2) {
    err.textContent = "Parolalar eşleşmiyor";
    err.style.display = "block";
    return;
  }
  const response = await fetch("/api/kurulum", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({ dukkan_adi: dukkan, parola: p1 })
});

let data;
try {
  data = await response.json();
} catch (e) {
  err.textContent = "Sunucu hatası oluştu. Lütfen uygulamayı yeniden başlatın.";
  err.style.display = "block";
  return;
}
  if (!data.ok) {
    err.textContent = data.hata || "Bir hata oluştu";
    err.style.display = "block";
    return;
  }

  await afterLogin(data.dukkan_adi || dukkan);
}

async function afterLogin(shopName) {
  const overlay = document.getElementById("overlay");
  document.getElementById("shop-name").textContent = shopName;
  overlay.classList.add("hidden");

  // Tema, kilit süresi ve yedek hatırlatıcıyı yükle
  await loadAppSettings();

  await ModuleLoader.loadModule("home");
  syncHomeShopName(shopName);
  await loadDashboard();

  // Dashboard otomatik yenileme (30 saniyede bir)
  if (window._dashboardTimer) clearInterval(window._dashboardTimer);
  window._dashboardTimer = setInterval(loadDashboard, 30000);

  // Yedek hatırlatma kontrolü (2 sn gecikmeyle)
  setTimeout(checkYedekHatirlat, 2000);
}

async function handleLock() {
  // Dashboard otomatik yenilemeyi durdur
  if (window._dashboardTimer) {
    clearInterval(window._dashboardTimer);
    window._dashboardTimer = null;
  }
  await fetch("/api/cikis", { method: "POST" });

  const overlay = document.getElementById("overlay");
  const girisCard = document.getElementById("ov-card-giris");
  const kurulumCard = document.getElementById("ov-card-kurulum");
  const logoName = document.getElementById("ov-shop-name");
  const parolaInput = document.getElementById("ov-parola");
  const err = document.getElementById("ov-err");

  const shopResp = await fetch("/api/dukkan");
  const shopData = await shopResp.json();

  logoName.textContent = shopData.dukkan_adi || "Sisteme Giriş";
  parolaInput.value = "";
  parolaInput.disabled = false;
  err.style.display = "none";
  girisCard.style.display = "block";
  kurulumCard.style.display = "none";
  const sifirlaCard = document.getElementById("ov-card-sifirla");
  if (sifirlaCard) sifirlaCard.style.display = "none";
  overlay.classList.remove("hidden");

  document.querySelectorAll(".act").forEach((b) => b.classList.remove("on"));
}

function tickClock() {
  const clock = document.getElementById("clock");
  if (!clock) return;

  const now = new Date();
  clock.textContent =
    now.toLocaleDateString("tr-TR", {
      day: "2-digit",
      month: "2-digit",
      year: "numeric"
    }) +
    " — " +
    now.toLocaleTimeString("tr-TR", {
      hour: "2-digit",
      minute: "2-digit"
    });
}

window.loadDashboard = async function loadDashboard() {
  try {
    const response = await fetch("/api/dashboard");
    if (response.status === 401) return;

    const data = await response.json();
    animateValue("d-islem", Number(data.gunluk_islem || 0), "");
    document.getElementById("d-gelen").textContent = "₺" + formatMoney(data.tahsilat || 0);
    document.getElementById("d-kalan").textContent = "₺" + formatMoney(data.toplam_alacak || 0);
  } catch (_) {}
}

function animateValue(id, target, prefix) {
  const el = document.getElementById(id);
  if (!el) return;

  let current = 0;
  if (!target) {
    el.textContent = prefix + "0";
    return;
  }

  const step = Math.max(1, Math.ceil(target / 20));
  const timer = setInterval(() => {
    current = Math.min(current + step, target);
    el.textContent = prefix + current;
    if (current >= target) clearInterval(timer);
  }, 40);
}

function formatMoney(value) {
  return Number(value || 0).toLocaleString("tr-TR", {
    minimumFractionDigits: 0,
    maximumFractionDigits: 2
  });
}

function syncHomeShopName(shopName) {
  const target = document.getElementById("home-shopname");
  if (target) target.textContent = shopName;
}

window.showToast = function (message, type = "ok") {
  const toast = document.getElementById("toast");
  if (!toast) return;

  toast.textContent = message;
  toast.className = "toast " + type + " show";

  setTimeout(() => {
    toast.classList.remove("show");
  }, 2800);
};

window.initModule = function (moduleName, options = {}) {
  const trigger = options.trigger || null;

  if (moduleName === "home") {
    syncHomeShopName(document.getElementById("shop-name").textContent || "—");
    return;
  }

  if (moduleName === "yakinda") {
    initYakinda(trigger);
    return;
  }

  if (moduleName === "storage") {
    import("/static/js/pages/storage.js")
      .then((module) => {
        if (typeof module.initStoragePage === "function") {
          module.initStoragePage();
        }
      })
      .catch(() => {
        showToast("Depo modülü yüklenemedi", "err");
      });
    return;
  }

  if (moduleName === "sales") {
    import("/static/js/pages/sales.js")
      .then((module) => {
        if (typeof module.initSalesPage === "function") {
          module.initSalesPage();
        }
      })
      .catch(() => {
        showToast("Satış modülü yüklenemedi", "err");
      });
    return;
  }

  if (moduleName === "customers") {
    import("/static/js/pages/customers.js")
      .then((module) => {
        if (typeof module.initCustomersPage === "function") {
          module.initCustomersPage();
        }
      })
      .catch(() => {
        showToast("Müşteri modülü yüklenemedi", "err");
      });
    return;
  }

  if (moduleName === "sales_list") {
    import("/static/js/pages/sales_list.js")
      .then((module) => {
        if (typeof module.initSalesListPage === "function") {
          module.initSalesListPage();
        }
      })
      .catch((err) => {
        console.error("[sales_list] Modül yüklenemedi:", err);
        showToast("Satışlar modülü yüklenemedi", "err");
      });
    return;
  }

  if (moduleName === "ayarlar") {
    import("/static/js/pages/ayarlar.js")
      .then((module) => {
        if (typeof module.initAyarlarPage === "function") {
          module.initAyarlarPage();
        }
      })
      .catch((err) => {
        console.error("[ayarlar] Modül yüklenemedi:", err);
        showToast("Ayarlar modülü yüklenemedi", "err");
      });
    return;
  }

  if (moduleName === "rapor_donem") {
    // Önceki rapor script'ini temizle (her seferinde taze yükle)
    const oldScript = document.getElementById("rapor-donem-script");
    if (oldScript) oldScript.remove();
    delete window._initRaporDonem;

    const s = document.createElement("script");
    s.id = "rapor-donem-script";
    s.src = "/static/js/pages/rapor_donem.js?v=" + Date.now();
    s.onload = () => {
      if (typeof window._initRaporDonem === "function") window._initRaporDonem();
    };
    document.head.appendChild(s);
    return;
  }

  if (moduleName === "payment") {
    import("/static/js/pages/payment.js")
      .then((module) => {
        if (typeof module.initPaymentPage === "function") {
          module.initPaymentPage();
        } else {
          console.error("[payment] initPaymentPage export bulunamadı", module);
        }
      })
      .catch((err) => {
        console.error("[payment] Modül yüklenemedi:", err);
        showToast("Ödeme modülü yüklenemedi", "err");
      });
    return;
  }
};

function initYakinda(trigger) {
  let key = "musteri";

  if (trigger) {
    const cls = Array.from(trigger.classList).find((c) => c.startsWith("a-"));
    key = (cls || "a-musteri").replace("a-", "");
  }

  const fakeModuleKey = window.lastYakindaKey || null;
  if (fakeModuleKey) {
    key = fakeModuleKey;
    window.lastYakindaKey = null;
  }

  const info = YAKINDA_TEXT[key] || {
    title: "Yakında",
    sub: "Bu modül geliştirme aşamasında."
  };

  const title = document.getElementById("yakinda-title");
  const sub = document.getElementById("yakinda-sub");

  if (title) title.textContent = info.title;
  if (sub) sub.textContent = info.sub;
}

const originalLoadModule = ModuleLoader.loadModule.bind(ModuleLoader);

ModuleLoader.loadModule = async function (moduleName, options = {}) {
  if (moduleName === "yakinda" && options.fakeModule) {
    window.lastYakindaKey = options.fakeModule;
  }
  await originalLoadModule(moduleName, options);
};

// ===== TEMA =====

window.applyTema = function(tema) {
  // Önceki sistem tema dinleyicisini temizle
  if (window._sistemTemaQuery) {
    window._sistemTemaQuery.removeEventListener('change', window._sistemTemaHandler);
    window._sistemTemaQuery = null;
    window._sistemTemaHandler = null;
  }

  if (tema === 'dark') {
    document.body.classList.add('dark');
  } else if (tema === 'sistem') {
    // Sistem tercihine göre otomatik
    const mq = window.matchMedia('(prefers-color-scheme: dark)');
    const handler = (e) => {
      document.body.classList.toggle('dark', e.matches);
    };
    mq.addEventListener('change', handler);
    window._sistemTemaQuery = mq;
    window._sistemTemaHandler = handler;
    document.body.classList.toggle('dark', mq.matches);
  } else {
    // light
    document.body.classList.remove('dark');
  }
  window._aktifTema = tema;
};

async function loadAppSettings() {
  try {
    const res = await fetch("/api/ayarlar");
    if (!res.ok) return;
    const d = await res.json();

    // Tema uygula
    applyTema(d.tema || "light");

    // Otomatik kilit süresini kaydet
    window._autoLockDk = parseInt(d.otomatik_kilit_dk || "0");
    resetAutoLockTimer();
  } catch (_) {}
}

// ===== OTOMATİK KİLİT =====

let _autoLockTimer = null;

window.resetAutoLockTimer = function() {
  if (_autoLockTimer) clearTimeout(_autoLockTimer);
  const dk = window._autoLockDk || 0;
  if (dk <= 0) return;
  _autoLockTimer = setTimeout(() => {
    handleLock();
  }, dk * 60 * 1000);
};

// Kullanıcı aktivitesinde sayacı sıfırla
["click", "keydown", "mousemove", "touchstart"].forEach((ev) => {
  document.addEventListener(ev, () => {
    if (window._autoLockDk > 0) resetAutoLockTimer();
  }, { passive: true });
});

// ===== YEDEK HATIRLATICI =====

async function checkYedekHatirlat() {
  try {
    const res = await fetch("/api/ayarlar/yedek-kontrol");
    if (!res.ok) return;
    const d = await res.json();
    if (d.hatirlat) {
      const gun = d.gun_gecti || "?";
      showToast(`⚠️ ${gun} gündür yedek almadınız!`, "err");
    }
  } catch (_) {}
}