const LaporanPanel = (() => { const DEMO = [ { id:1, nama_pelapor:'Anonim', deskripsi:'Ibu Maria sakit keras sudah seminggu, tidak bisa berobat karena tidak ada biaya. Butuh bantuan medis segera.', urgensi:'darurat', status:'diverifikasi', alamat_laporan:'Jl. Kemuning No.3, Akcaya', created_at:'2025-05-01T08:00:00', nama_ri:'Gereja Katedral' }, { id:2, nama_pelapor:'Eko Prasetyo', deskripsi:'Ada keluarga baru pindah ke Gg. Melati yang sepertinya sangat membutuhkan bantuan. Anak-anak tidak sekolah.', urgensi:'sedang', status:'pending', alamat_laporan:'Gg. Melati, Dalam Bugis', created_at:'2025-05-10T10:00:00', nama_ri:"Masjid Jami'" }, { id:3, nama_pelapor:'Anonim', deskripsi:'Pak Tan penyandang disabilitas, hidup sebatang kara dan sangat sulit mendapat penghasilan. Perlu perhatian.', urgensi:'tinggi', status:'diproses', alamat_laporan:'Jl. Gusti Situt No.7', created_at:'2025-05-12T14:00:00', nama_ri:'Klenteng Kwan Ti Miau' }, { id:4, nama_pelapor:'Hendra', deskripsi:'Balita 2 tahun kondisi gizi buruk. Orang tua tidak mampu memenuhi kebutuhan gizi anak.', urgensi:'darurat', status:'pending', alamat_laporan:'Gg. Teratai, Parit Tokaya', created_at:'2025-05-15T09:00:00', nama_ri:'Masjid Mujahidin' }, ]; const URG = { darurat:'🔴', tinggi:'🟠', sedang:'🟡', rendah:'🟢' }; const URG_COLOR = { darurat:'var(--red)', tinggi:'var(--orange)', sedang:'var(--yellow)', rendah:'var(--green)' }; const STATUS_LABEL = { pending:'⏳ Pending', diverifikasi:'✅ Diverifikasi', diproses:'🔄 Diproses', selesai:'🏁 Selesai' }; async function load() { const st = gv('lf-status'); const ur = gv('lf-urgensi'); let url = '/laporan'; const p = []; if(st) p.push(`status=${st}`); if(ur) p.push(`urgensi=${ur}`); if(p.length) url += '?' + p.join('&'); let data; try { data = await Api.get(url); } catch { data = DEMO; } if(st) data = data.filter(l => l.status === st); if(ur) data = data.filter(l => l.urgensi === ur); render(data); } function render(data) { const el = ge('laporan-grid'); if (!data.length) { el.innerHTML = '

Tidak ada laporan

Semua laporan sudah ditangani

'; return; } el.innerHTML = data.map(l => `
${URG[l.urgensi]||'📋'} ${(l.urgensi||'').toUpperCase()}
#${l.id} — ${l.nama_pelapor||'Anonim'}
${STATUS_LABEL[l.status]||l.status}
${l.deskripsi}
📍 ${l.alamat_laporan||'—'} 🕌 ${l.nama_ri||'—'} 📅 ${(l.created_at||'').substring(0,10)}
${App.canEdit() && l.status !== 'selesai' ? `
${l.status === 'pending' ? `` : ''} ${l.status === 'diverifikasi' ? `` : ''} ${l.status !== 'selesai' ? `` : ''}
` : ''}
`).join(''); } async function updateStatus(id, status) { try { await Api.put(`/laporan/${id}`, { status }); App.toast(`Status laporan diubah: ${STATUS_LABEL[status]||status}`, 'success'); load(); App.updateHeaderStats(); } catch(e) { App.toast(e.message,'error'); } } async function hapus(id) { if (!confirm('Hapus laporan ini?')) return; try { await Api.delete(`/laporan/${id}`); App.toast('Laporan dihapus','success'); load(); } catch(e) { App.toast(e.message,'error'); } } function showKirimModal() { ['fl-nama','fl-hp','fl-nik','fl-alamat','fl-deskripsi'].forEach(id => sv(id,'')); sv('fl-urgensi','sedang'); App.showModal('modal-laporan'); } async function kirim() { if (!gv('fl-deskripsi')) { App.toast('Deskripsi kondisi wajib diisi','error'); return; } const body = { nama_pelapor: gv('fl-nama') || null, no_hp_pelapor: gv('fl-hp') || null, nik_terdampak: gv('fl-nik') || null, urgensi: gv('fl-urgensi'), alamat_laporan:gv('fl-alamat'), deskripsi: gv('fl-deskripsi'), }; try { await Api.post('/laporan', body); App.closeModal('modal-laporan'); App.toast('Laporan berhasil dikirim! Terima kasih 🙏','success'); load(); App.updateHeaderStats(); } catch(e) { App.toast(e.message,'error'); } } return { load, updateStatus, hapus, showKirimModal, kirim }; })();