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

Hicri takvime göre kaza borcunuzu sabitleyin ve kıldıkça düşürün.

${ !birthDate ? `

Doğum Tarihi Gerekli

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

` : `

Kaza Borcu Tanımlama

Hicri takvime göre kaza borcunuzu hesaplar ve PocketBase'e kaydeder.

📊 KAZA BORCU TAMAMLAMA ORANI %0 Kılındı
Hesaplanan İlk Borç: 0 vakit Kalan Güncel Borç: 0 vakit
${PRAYERS.map( (p) => `

${p.name}

Kalan: -

İlk Borç: 0

`, ).join("")}

Kaza Kıldım (Borçtan Düş)

` }
`; 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."); } }); } else { refreshKazaStats(container, pb, birthDate, gender); container .querySelector("#calcAndSaveBtn") ?.addEventListener("click", async () => { if ( confirm( "Kaza borcunuz yeniden hesaplanıp PocketBase'e kaydedilecek. Onaylıyor musunuz?", ) ) { const res = await initAndSaveInitialKaza(pb, birthDate, gender); if (res.success) { await refreshKazaStats(container, pb, birthDate, gender); showKazaMsg( container.querySelector("#kazaMsg"), `✓ Borç hesaplandı (${res.days} gün) ve PocketBase'e kaydedildi!`, true, ); } else { showKazaMsg( container.querySelector("#kazaMsg"), `Hata: ${res.error}`, false, ); } } }); container .querySelector("#subtractKazaBtn") ?.addEventListener("click", async () => { await updateKazaDebt(container, pb, birthDate, gender, -1); }); container .querySelector("#addKazaBtn") ?.addEventListener("click", async () => { await updateKazaDebt(container, pb, birthDate, gender, 1); }); } }, }; } async function initAndSaveInitialKaza(pb, birthDate, gender) { try { const calc = calculateMissedPrayers(birthDate, gender, 12); if (!calc || calc.days <= 0) { return { success: false, error: "Doğum tarihiniz henüz mükellefiyet yaşından (12 Hicri yıl) küçük.", }; } const userId = pb.authStore.model.id; let userRecord = null; try { userRecord = await pb .collection("kaza_logs") .getFirstListItem(`user = "${userId}"`); } catch (e) {} // PB tarafındaki varsayılan sütunlara (fajr, dhuhr vb.) borcu yazıyoruz const initialData = { user: userId, fajr: calc.fajr, dhuhr: calc.dhuhr, asr: calc.asr, maghrib: calc.maghrib, isha: calc.isha, vitr: calc.vitr, }; if (userRecord) { await pb.collection("kaza_logs").update(userRecord.id, initialData); } else { await pb.collection("kaza_logs").create(initialData); } return { success: true, days: calc.days, fajr: calc.fajr }; } catch (err) { console.error("PocketBase Kayıt Hatası:", err); return { success: false, error: err?.message || "PocketBase'e kaydedilemedi.", }; } } async function updateKazaDebt(container, pb, birthDate, gender, direction) { const prayerId = container.querySelector("#kazaPrayerType").value; const countInput = container.querySelector("#kazaCount"); const countValue = Math.max(1, parseInt(countInput?.value || "1", 10)); const changeAmount = countValue * direction; const msg = container.querySelector("#kazaMsg"); try { const userId = pb.authStore.model.id; let userRecord = await pb .collection("kaza_logs") .getFirstListItem(`user = "${userId}"`); if (!userRecord) { showKazaMsg( msg, "Önce 'Kaza Borçlarını Otomatik Hesapla & PB'ye Kaydet' butonuna basmalısınız.", false, ); return; } const currentDebt = userRecord[prayerId] || 0; const newDebt = Math.max(0, currentDebt + changeAmount); await pb.collection("kaza_logs").update(userRecord.id, { [prayerId]: newDebt, }); showKazaMsg( msg, direction < 0 ? `✓ ${countValue} vakit kılındı, borçtan düşüldü! Kalan: ${newDebt}` : `${countValue} vakit borca eklendi. Kalan: ${newDebt}`, true, ); if (countInput) countInput.value = "1"; await refreshKazaStats(container, pb, birthDate, gender); } catch (err) { console.error("Güncelleme hatası:", err); showKazaMsg(msg, "PocketBase güncellenirken hata oluştu.", false); } } async function refreshKazaStats(container, pb, birthDate, gender) { // İlk toplam borç verisini direkt doğum tarihinden dinamik alıyoruz (Hiç şaşmaz!) const initialCalc = calculateMissedPrayers(birthDate, gender, 12); const userId = pb.authStore.model.id; let userRecord = null; try { userRecord = await pb .collection("kaza_logs") .getFirstListItem(`user = "${userId}"`); } catch (err) {} let grandInitialTotal = 0; let grandCurrentDebtTotal = 0; PRAYERS.forEach((p) => { const initialDebt = initialCalc[p.id] || 0; // PB kaydı henüz yoksa kalan borç = ilk borçtur const currentDebt = userRecord ? (userRecord[p.id] ?? initialDebt) : initialDebt; grandInitialTotal += initialDebt; grandCurrentDebtTotal += currentDebt; const remainEl = container.querySelector(`#remaining-${p.id}`); const initialEl = container.querySelector(`#initial-${p.id}`); const progressEl = container.querySelector(`#progress-${p.id}`); if (remainEl) remainEl.textContent = currentDebt; if (initialEl) initialEl.textContent = initialDebt; // Yüzde Hesabı: (Kılınan Vakit / İlk Borç) * 100 if (progressEl) { const completed = Math.max(0, initialDebt - currentDebt); const pct = initialDebt > 0 ? Math.min( 100, Math.max(0, Math.round((completed / initialDebt) * 100)), ) : 0; progressEl.style.width = `${pct}%`; } }); const totalCompleted = Math.max(0, grandInitialTotal - grandCurrentDebtTotal); const overallPct = grandInitialTotal > 0 ? Math.min( 100, Math.max(0, Math.round((totalCompleted / grandInitialTotal) * 100)), ) : 0; const bar = container.querySelector("#overallProgressBar"); const pctText = container.querySelector("#overallPercentage"); const initText = container.querySelector("#initialTotalText"); const remText = container.querySelector("#totalRemainingText"); if (bar) bar.style.width = `${overallPct}%`; if (pctText) pctText.textContent = `%${overallPct} Kılındı`; if (initText) initText.textContent = grandInitialTotal; if (remText) remText.textContent = grandCurrentDebtTotal; } 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 font-medium"}`; el.classList.remove("hidden"); }