/* ═══════════════════════════════════════════════════════════
13. MAP RENDER
═══════════════════════════════════════════════════════════ */
function renderMap(){
const db=Store.allDb();
// SPBU
App._groups.spbu.clearLayers();
db.spbu.forEach(r=>{
const m=L.circleMarker([r.lat,r.lng],{radius:9,fillColor:CFG.spbu.color(r),color:'#fff',weight:2,fillOpacity:1});
m.bindPopup(Popup.spbu(r),{maxWidth:320});
m.on('click',()=>highlightCard(r.id));
App._groups.spbu.addLayer(m);
});
// Warga
App._groups.warga.clearLayers();
db.warga.forEach(r=>{
const clr=CFG.warga.color(r);
// Check if in any RI radius
const inRadius=db.rumahIbadah.some(hub=>{
if(!hub.lat) return false;
const d=L.latLng(r.lat,r.lng).distanceTo(L.latLng(hub.lat,hub.lng));
return d<=(parseFloat(hub.radius)||300);
});
const iconHtml=`
👨👩👧
${inRadius?'':''}`;
const icon=L.divIcon({html:`${iconHtml}
`,className:'',iconSize:[22,22],iconAnchor:[11,11]});
const m=L.marker([r.lat,r.lng],{icon});
m.bindPopup(Popup.warga(r),{maxWidth:360});
m.on('click',()=>highlightCard(r.id));
App._groups.warga.addLayer(m);
});
// Rumah Ibadah
App._groups.rumahIbadah.clearLayers();
db.rumahIbadah.forEach(r=>{
const clr=CFG.rumahIbadah.color(r);
const m=L.circleMarker([r.lat,r.lng],{radius:10,fillColor:clr,color:'#fff',weight:2.5,fillOpacity:1});
m.bindPopup(Popup.rumahIbadah(r),{maxWidth:320});
m.on('click',()=>highlightCard(r.id));
App._groups.rumahIbadah.addLayer(m);
// Always draw radius 300m coverage circle
const radiusM=parseFloat(r.radius)||300;
const ring=L.circle([r.lat,r.lng],{radius:radiusM,color:clr,weight:1.5,fillColor:clr,fillOpacity:.06,dashArray:'6 4'});
App._groups.rumahIbadah.addLayer(ring);
});
// Jalan
App._groups.jalan.clearLayers();
db.jalan.forEach(r=>{
const l=L.polyline(r.coords,{color:CFG.jalan.color(r),weight:4,opacity:.9});
l.bindPopup(Popup.jalan(r),{maxWidth:300});
l.on('click',()=>highlightCard(r.id));
App._groups.jalan.addLayer(l);
});
// Parsil
App._groups.parsil.clearLayers();
db.parsil.forEach(r=>{
const clr=CFG.parsil.color(r);
const p=L.polygon(r.coords,{color:clr,weight:2,fillColor:clr,fillOpacity:.2});
p.bindPopup(Popup.parsil(r),{maxWidth:300});
p.on('click',()=>highlightCard(r.id));
App._groups.parsil.addLayer(p);
});
}