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 hesaplayın ve PocketBase'de takip edin.

${ !birthDate ? `

Doğum Tarihi Gerekli

Kaza namazı borcunuzu Hicri takvime göre hesaplayabilmemiz için doğum tarihini ve saatinizi girin.

` : `

Hicri Kaza Borcu Tanımlama

12 yaş mükellefiyeti ve doğum saatiniz (hilal düzeltmesi) baz alınarak borcunuz sabitlenir.

📊 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 Kıldım / Düzenle

` }
`; 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 kullanıcı alanlarını kontrol edin.", ); } }); } else { refreshKazaStats(container, pb); container .querySelector("#calcAndSaveBtn") ?.addEventListener("click", async () => { if ( confirm( "Doğum tarihiniz ve saatiniz Hicri takvime dönüştürülüp 12 yaş borcunuz PocketBase'e kaydedilecek. Onaylıyor musunuz?", ) ) { const res = await initAndSaveInitialKaza(pb, birthDate, gender); if (res.success) { await refreshKazaStats(container, pb); showKazaMsg( container.querySelector("#kazaMsg"), `✓ Hicri borç hesaplandı (${res.days} gün) ve PocketBase'e kaydedildi!`, true, ); } else { showKazaMsg( container.querySelector("#kazaMsg"), `Hata: ${res.error}`, false, ); } } }); container .querySelector("#addKazaBtn") ?.addEventListener("click", async () => { await updateKazaCount(container, pb, 1); }); container .querySelector("#removeKazaBtn") ?.addEventListener("click", async () => { await updateKazaCount(container, pb, -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 görünüyor.", }; } const userId = pb.authStore.model.id; let userRecord = null; try { userRecord = await pb .collection("kaza_logs") .getFirstListItem(`user = "${userId}"`); } catch (e) { // Kayıt yoksa yeni oluşturulacak } const initialData = { user: userId, target_fajr: calc.fajr, target_dhuhr: calc.dhuhr, target_asr: calc.asr, target_maghrib: calc.maghrib, target_isha: calc.isha, target_vitr: calc.vitr, fajr: userRecord?.fajr || 0, dhuhr: userRecord?.dhuhr || 0, asr: userRecord?.asr || 0, maghrib: userRecord?.maghrib || 0, isha: userRecord?.isha || 0, vitr: userRecord?.vitr || 0, }; 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 kayıt yaparken hata oluştu. kaza_logs izinlerini kontrol edin.", }; } } async function updateKazaCount(container, pb, 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; let userRecord = await pb .collection("kaza_logs") .getFirstListItem(`user = "${userId}"`); if (!userRecord) { showKazaMsg( msg, "Önce yukarıdaki 'Kaza Borçlarını Otomatik Hesapla & PB'ye Kaydet' butonuna tıklamalısınız.", false, ); return; } const currentCompleted = userRecord[prayerId] || 0; const newCompleted = Math.max(0, currentCompleted + amount); 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); } catch (err) { console.error("Güncelleme hatası:", err); showKazaMsg(msg, "Güncelleme başarısız.", false); } } async function refreshKazaStats(container, pb) { const userId = pb.authStore.model.id; let userRecord = null; try { userRecord = await pb .collection("kaza_logs") .getFirstListItem(`user = "${userId}"`); } catch (err) {} if (!userRecord) { PRAYERS.forEach((p) => { const remainEl = container.querySelector(`#remaining-${p.id}`); const completedEl = container.querySelector(`#completed-${p.id}`); if (remainEl) remainEl.textContent = "Hesaplanmadı"; if (completedEl) completedEl.textContent = "0"; }); return; } let grandTotalTarget = 0; let grandTotalCompleted = 0; PRAYERS.forEach((p) => { const target = userRecord[`target_${p.id}`] || 0; const completed = userRecord[p.id] || 0; const remaining = Math.max(0, target - completed); grandTotalTarget += target; 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 = target > 0 ? Math.min(100, Math.round((completed / target) * 100)) : 100; progressEl.style.width = `${pct}%`; } }); const grandTotalRemaining = Math.max( 0, grandTotalTarget - grandTotalCompleted, ); const overallPct = grandTotalTarget > 0 ? Math.min( 100, Math.round((grandTotalCompleted / grandTotalTarget) * 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 = grandTotalRemaining; } 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"); }