import { calculateMissedPrayers } from "../utils/hijri.js"; const PRAYERS = [ { id: "fajr", name: "SABAH", arabic: "Fecr" }, { id: "dhuhr", name: "ÖĞLE", arabic: "Zuhur" }, { id: "asr", name: "İKİNDİ", arabic: "Asr" }, { id: "maghrib", name: "AKŞAM", arabic: "Mağrib" }, { id: "isha", name: "YATSI", arabic: "İşa" }, { id: "vitr", name: "VİTİR", arabic: "Vitr" }, ]; export function renderKaza(pb) { const user = pb.authStore.model; const birthDate = user?.birthDate || user?.birthdate; const gender = user?.gender || "male"; const html = `
📿

Kaza Namazı Sayaç & Takip

Tamamladığın vakitler anlık olarak PocketBase hesabında güncellenir.

${ !birthDate ? `

Doğum Tarihi Gerekli

Kaza namazı borcunu hesaplayabilmemiz için profil bilgilerinizi girin.

` : `
🎯 GENEL KAZA BİTİRME ORANI %0
Kılınan Toplam: 0 vakit Kalan Toplam Borç: 0 vakit
${PRAYERS.map( (p) => `

${p.name}

Kalan: -

Kılınan: 0

`, ).join("")}

Kaza Sayacı İşlem

` }
`; return { html, initEvents: (container) => { container.querySelector("#closeBtn")?.addEventListener("click", () => { window.dispatchEvent( new CustomEvent("navigate", { detail: "desktop" }), ); }); if (!birthDate) { container .querySelector("#profileForm") ?.addEventListener("submit", async (e) => { e.preventDefault(); const bInput = container.querySelector("#birthDateInput").value; const gInput = container.querySelector("#genderInput").value; try { await pb.collection("users").update(pb.authStore.model.id, { birthdate: bInput, birthDate: bInput, gender: gInput, }); pb.authStore.model.birthdate = bInput; pb.authStore.model.gender = gInput; window.dispatchEvent( new CustomEvent("navigate", { detail: "kaza" }), ); } catch (err) { alert( "Profil kaydedilemedi. PocketBase alan adlarını kontrol edin.", ); } }); } else { refreshKazaStats(container, pb, birthDate, gender); container .querySelector("#addKazaBtn") ?.addEventListener("click", async () => { await updateKazaCount(container, pb, birthDate, gender, 1); }); container .querySelector("#removeKazaBtn") ?.addEventListener("click", async () => { await updateKazaCount(container, pb, birthDate, gender, -1); }); } }, }; } // PocketBase Tek Satır Güncelleme Mantığı async function updateKazaCount(container, pb, birthDate, gender, direction) { const prayerId = container.querySelector("#kazaPrayerType").value; const countInput = container.querySelector("#kazaCount"); const amount = Math.max(1, parseInt(countInput?.value || "1", 10)) * direction; const msg = container.querySelector("#kazaMsg"); try { const userId = pb.authStore.model.id; // Kullanıcının kaza sayacı kaydı var mı kontrol et let userRecord = null; try { userRecord = await pb .collection("kaza_logs") .getFirstListItem(`user = "${userId}"`); } catch { // Yoksa ilk kaydı oluştur userRecord = await pb.collection("kaza_logs").create({ user: userId, fajr: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0, vitr: 0, }); } const currentCompleted = userRecord[prayerId] || 0; const newCompleted = Math.max(0, currentCompleted + amount); // Tek satır kaydı güncelle await pb.collection("kaza_logs").update(userRecord.id, { [prayerId]: newCompleted, }); showKazaMsg( msg, amount > 0 ? `🎉 ${amount} vakit kılınanlara eklendi!` : `${Math.abs(amount)} vakit düşüldü.`, true, ); if (countInput) countInput.value = "1"; await refreshKazaStats(container, pb, birthDate, gender); } catch (err) { console.error("Sayaç güncelleme hatası:", err); showKazaMsg( msg, "Güncelleme başarısız! PocketBase alanlarını ve izinlerini kontrol edin.", false, ); } } async function refreshKazaStats(container, pb, birthDate, gender) { const calc = calculateMissedPrayers(birthDate, gender); const userId = pb.authStore.model.id; let userRecord = { fajr: 0, dhuhr: 0, asr: 0, maghrib: 0, isha: 0, vitr: 0 }; try { const record = await pb .collection("kaza_logs") .getFirstListItem(`user = "${userId}"`); if (record) userRecord = record; } catch (err) { // Kayıt yoksa sorun değil, varsayılan 0 değerleriyle devam eder } let grandTotalMissed = 0; let grandTotalCompleted = 0; PRAYERS.forEach((p) => { const totalMissed = calc[p.id] || 0; // Doğumdan beri olan toplam borç const completed = userRecord[p.id] || 0; // Kılınan miktar const remaining = Math.max(0, totalMissed - completed); // Kalan borç grandTotalMissed += totalMissed; grandTotalCompleted += completed; const remainEl = container.querySelector(`#remaining-${p.id}`); const completedEl = container.querySelector(`#completed-${p.id}`); const progressEl = container.querySelector(`#progress-${p.id}`); if (remainEl) remainEl.textContent = remaining; if (completedEl) completedEl.textContent = completed; if (progressEl) { const pct = totalMissed > 0 ? Math.min(100, Math.round((completed / totalMissed) * 100)) : 100; progressEl.style.width = `${pct}%`; } }); // Genel İlerleme Hesabı const overallPct = grandTotalMissed > 0 ? Math.min( 100, Math.round((grandTotalCompleted / grandTotalMissed) * 100), ) : 100; const bar = container.querySelector("#overallProgressBar"); const pctText = container.querySelector("#overallPercentage"); const compText = container.querySelector("#totalCompletedText"); const remText = container.querySelector("#totalRemainingText"); if (bar) bar.style.width = `${overallPct}%`; if (pctText) pctText.textContent = `%${overallPct}`; if (compText) compText.textContent = grandTotalCompleted; if (remText) remText.textContent = Math.max(0, grandTotalMissed - grandTotalCompleted); } function showKazaMsg(el, text, success) { if (!el) return; el.textContent = text; el.className = `text-xs mt-3 ${success ? "text-emerald-400 font-medium" : "text-rose-400"}`; el.classList.remove("hidden"); }