(() => {
'use strict';
const id=Number(location.pathname.match(/^\/sag\/(\d+)(?:\/|$)/)?.[1]),host=document.getElementById('planner');
if(!id||!host)return;
const card=document.createElement('section');card.className='card p-3 mb-3';
card.innerHTML=`
Samlet planlægningRedigér sagsplan Henter overblik…
`;
host.prepend(card);
const status=card.querySelector('[role=status]'),scope=card.querySelector('select');
const minutes=n=>n==null?'—':`${(Number(n)/60).toLocaleString('da-DK',{maximumFractionDigits:1})} t`;
const date=v=>v?new Intl.DateTimeFormat('da-DK',{dateStyle:'short',timeStyle:'short',timeZone:'Europe/Copenhagen'}).format(new Date(v)):'—';
let loading=false;
async function load(){
if(loading)return;loading=true;
try{const response=await fetch(`/api/v1/planner/cases/${id}/summary?scope=${scope.value}`);const value=await response.json();if(!response.ok)throw new Error(typeof value.detail==='string'?value.detail:'Overblikket kunne ikke indlæses');status.textContent=`Estimat: ${minutes(value.estimated_minutes)} · Planlagt (persontid): ${minutes(value.planned_person_minutes)} · Registreret: ${minutes(value.actual_minutes)} · Rest af estimat: ${minutes(value.remaining_minutes)} · Næste aktivitet: ${date(value.next_activity)} · Seneste deadline: ${date(value.latest_deadline)}${value.unestimated_cases?' · '+value.unestimated_cases+' sager uden estimat':''}`;}catch(e){status.textContent=e.message;}finally{loading=false;}
}
scope.onchange=load;new MutationObserver(()=>{if(host.classList.contains('active'))load();}).observe(host,{attributes:true,attributeFilter:['class']});
document.getElementById('planner-tab')?.addEventListener('click',load);
setInterval(()=>{if(!document.hidden&&host.offsetParent!==null)load();},30000);
if(host.classList.contains('active'))load();
})();