import {
gregorianToHijri,
calculateMissedPrayers,
getHijriAge,
getHijriBirthDate,
} 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İTR", arabic: "Vitr" },
];
export function renderKaza(pb) {
const pbBirthDate = pb.authStore.model?.birthdate;
const pbGender = pb.authStore.model?.gender;
const profileS = localStorage.getItem("kaza_profile");
let profile = profileS ? JSON.parse(profileS) : null;
const birthDate = pbBirthDate || profile?.birthDate;
const gender = pbGender || profile?.gender;
const html = `
🕌 Kaza Namaz Takibi
Hicri yaşını ve kalan kaza namazını takip et.
${
!birthDate
? `
`
: `
${PRAYERS.map(
(p) => `
${p.name}
Kalan: -
Toplam: -
`,
).join("")}
Bugünkü Namazlar
${PRAYERS.map((p) => {
const todayKey = new Date().toISOString().split("T")[0];
const alreadyDone = profile?.todayLogs?.some(
(l) => l.prayerId === p.id && l.date === todayKey,
);
return `
${p.arabic}
${p.name}
${alreadyDone ? "
✓ Kılındı
" : ""}
`;
}).join("")}
Son İşlemler
`
}
`;
return {
html,
initEvents: (container) => {
const closeBtn = container.querySelector("#closeBtn");
if (closeBtn) {
closeBtn.addEventListener("click", () => {
const event = new CustomEvent("navigate", { detail: "desktop" });
window.dispatchEvent(event);
});
}
if (!birthDate) {
const form = container.querySelector("#profileForm");
const genderSelect = container.querySelector("#gender");
if (gender && genderSelect) {
genderSelect.value = gender;
}
if (form) {
form.addEventListener("submit", async (e) => {
e.preventDefault();
const birthDateInput = container.querySelector("#birthDate").value;
const genderInput = container.querySelector("#gender").value;
if (!birthDateInput) {
alert("Lütfen doğum tarihinizi girin.");
return;
}
try {
await pb.collection("users").update(pb.authStore.model.id, {
birthDate: birthDateInput,
gender: genderInput,
});
} catch (err) {
console.error("PocketBase kaydedilemedi:", err);
}
profile = {
gender: genderInput,
logs: profile?.logs || [],
todayLogs: profile?.todayLogs || [],
createdAt: profile?.createdAt || new Date().toISOString(),
};
localStorage.setItem("kaza_profile", JSON.stringify(profile));
const event = new CustomEvent("navigate", { detail: "kaza" });
window.dispatchEvent(event);
});
}
} else {
refreshKazaStats(container, pb, birthDate, gender, profile);
const addBtn = container.querySelector("#addKazaBtn");
const removeBtn = container.querySelector("#removeKazaBtn");
if (addBtn) {
addBtn.addEventListener("click", async () => {
const prayerId = container.querySelector("#kazaPrayerType").value;
const countInput = container.querySelector("#kazaCount");
const count = Math.max(1, parseInt(countInput?.value || "1", 10));
const msg = container.querySelector("#kazaMsg");
try {
await pb.collection("kaza_logs").create({
user: pb.authStore.model.id,
prayerId,
count,
date: new Date().toISOString().split("T")[0],
});
showKazaMsg(msg, `${count} kaza namaz eklendi!`, true);
if (countInput) countInput.value = "1";
await refreshKazaStats(container, pb, birthDate, gender, profile);
} catch (err) {
console.error("Kaza eklenemedi:", err);
showKazaMsg(
msg,
"Eklenemedi. PocketBase bağlantısını kontrol et.",
false,
);
}
});
}
if (removeBtn) {
removeBtn.addEventListener("click", async () => {
const prayerId = container.querySelector("#kazaPrayerType").value;
const countInput = container.querySelector("#kazaCount");
const count = Math.max(1, parseInt(countInput?.value || "1", 10));
const msg = container.querySelector("#kazaMsg");
try {
const records = await pb.collection("kaza_logs").getFullList({
filter: `user = "${pb.authStore.model.id}" && prayerId = "${prayerId}"`,
sort: "-createdAt",
});
let remaining = count;
for (const record of records) {
if (remaining <= 0) break;
const recordCount = record.count || 1;
if (recordCount > remaining) {
await pb.collection("kaza_logs").update(record.id, {
count: recordCount - remaining,
});
remaining = 0;
} else {
await pb.collection("kaza_logs").delete(record.id);
remaining -= recordCount;
}
}
showKazaMsg(msg, `${count} kaza namaz çıkarıldı!`, true);
if (countInput) countInput.value = "1";
await refreshKazaStats(container, pb, birthDate, gender, profile);
} catch (err) {
console.error("Kaza çıkarılamadı:", err);
showKazaMsg(
msg,
"Çıkarılamadı. PocketBase bağlantısını kontrol et.",
false,
);
}
});
}
}
},
};
}
async function refreshKazaStats(container, pb, birthDate, gender, profile) {
if (!birthDate) return;
const calc = calculateMissedPrayers(birthDate, gender);
const hijriBirth = getHijriBirthDate(birthDate);
const birthDateEl = container.querySelector("#hijriBirthDateDisplay");
if (birthDateEl) {
birthDateEl.textContent = `${hijriBirth.day} ${hijriBirth.monthName} ${hijriBirth.year}`;
}
let logs = [];
let logsByPrayer = {};
try {
const records = await pb.collection("kaza_logs").getFullList({
filter: `user = "${pb.authStore.model.id}"`,
sort: "-createdAt",
});
logs = records.map((r) => ({
id: r.id,
prayerId: r.prayerId,
count: r.count || 1,
date: r.date,
createdAt: r.createdAt,
}));
logs.forEach((l) => {
logsByPrayer[l.prayerId] =
(logsByPrayer[l.prayerId] || 0) + (l.count || 1);
});
} catch (err) {
console.error("Loglar yüklenemedi:", err);
}
PRAYERS.forEach((p) => {
const totalEl = container.querySelector(`#total-${p.id}`);
const remainEl = container.querySelector(`#remaining-${p.id}`);
const missed = calc[p.id] || 0;
const completed = logsByPrayer[p.id] || 0;
const remaining = Math.max(0, missed - completed);
if (totalEl) totalEl.textContent = missed;
if (remainEl) remainEl.textContent = remaining;
});
const todayKey = new Date().toISOString().split("T")[0];
const todayLogs = logs.filter((l) => l.date === todayKey);
if (profile) {
profile.todayLogs = todayLogs;
localStorage.setItem("kaza_profile", JSON.stringify(profile));
}
const logsContainer = container.querySelector("#logsContainer");
if (logsContainer) {
logsContainer.innerHTML =
logs
.slice(0, 20)
.map((log) => {
const prayer = PRAYERS.find((p) => p.id === log.prayerId);
return `
${prayer?.name || log.prayerId} x${log.count} - ${log.date}
+${log.count}
`;
})
.join("") || 'Henüz kayıt yok.
';
}
}
function showKazaMsg(el, text, success) {
el.textContent = text;
el.className = `text-xs mt-2 ${success ? "text-emerald-400" : "text-rose-400"}`;
el.classList.remove("hidden");
}