<sectionclass="rule-hero mb-4"><div><divclass="eyebrow hero-eyebrow">SUPPORT · AUTOMATISERING</div><h1>Automatiske opgavelister</h1><p>Få dine åbne sager – og valgfrit gruppens – samlet i en kort, klikbar besked på de tidspunkter, der passer din arbejdsdag.</p></div><divclass="hero-icon">✓</div></section>
<divclass="card rule-card border-0 shadow-sm"><divclass="card-body p-4 p-lg-5"><divclass="d-flex align-items-start gap-3 mb-4"><divclass="section-icon">◷</div><div><h2class="h4 mb-1">Ny regel</h2><pclass="text-muted mb-0">Reglen kører automatisk; brug <strong>Send nu</strong> for at teste den med det samme.</p></div></div><divclass="row g-4"><divclass="col-lg-6"><labelclass="form-label fw-semibold"for="ruleTitle">Navn på listen</label><inputid="ruleTitle"class="form-control form-control-lg"value="Min opgaveliste"><divclass="form-text">Kun til din egen oversigt.</div></div><divclass="col-lg-6"><labelclass="form-label fw-semibold"for="ruleTimes">Tidspunkter</label><inputid="ruleTimes"class="form-control form-control-lg"value="09:00, 12:00, 14:00"placeholder="09:00, 12:00"><divclass="form-text">Skriv flere tider adskilt med komma, fx 09:00, 12:00, 14:00.</div></div><divclass="col-12"><divclass="rule-options"><labelclass="form-check option"><inputid="ruleGroups"class="form-check-input"type="checkbox"checked><span><strong>Medtag mine gruppers sager</strong><small>Viser også åbne sager, som er tildelt dine grupper.</small></span></label><labelclass="form-check option"><inputid="ruleMattermost"class="form-check-input"type="checkbox"checked><span><strong>Send til Mattermost</strong><small>Hver sag i beskeden får et direkte link til Hub.</small></span></label></div></div><divclass="col-12 d-flex justify-content-end"><buttonid="saveButton"class="btn btn-primary px-4 py-2"onclick="saveRule()">Gem regel</button></div></div></div></div>
async function responseMessage(response,fallback){const body=await response.json().catch(()=>({}));return body.detail||body.message||fallback}
async function load(){const response=await fetch('/api/v1/reminder-task-rules');if(!response.ok){rulesEl.innerHTML=`<divclass="alert alert-danger">${escapeHtml(await responseMessage(response,'Kunne ikke hente regler'))}</div>`;return}const list=await response.json();rulesEl.innerHTML=list.map(rule=>`<articleclass="rule-entry"><div><divclass="fw-bold fs-5">${escapeHtml(rule.title)}</div><divclass="mt-2">${(rule.times_json||[]).map(time=>`<spanclass="rule-time me-1">${escapeHtml(time)}</span>`).join('')} ${rule.include_groups?'<spanclass="text-muted small ms-1">· Mine grupper er med</span>':''}</div></div><buttonclass="btn btn-outline-primary"onclick="sendRule(${rule.id},this)">Send nu ↗</button></article>`).join('')||'<divclass="empty-rules">Ingen regler endnu. Opret den første ovenfor, og test den derefter med <strong>Send nu</strong>.</div>'}
async function saveRule(){const button=document.getElementById('saveButton');const times=document.getElementById('ruleTimes').value.split(',').map(value=>value.trim()).filter(Boolean);if(!times.length)return alert('Vælg mindst ét tidspunkt');button.disabled=true;button.textContent='Gemmer…';try{const response=await fetch('/api/v1/reminder-task-rules',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({title:document.getElementById('ruleTitle').value,times,include_groups:document.getElementById('ruleGroups').checked,notify_mattermost:document.getElementById('ruleMattermost').checked})});if(!response.ok)throw new Error(await responseMessage(response,'Kunne ikke gemme'));await load()}catch(error){alert(error.message)}finally{button.disabled=false;button.textContent='Gem regel'}}
async function sendRule(id,button){const original=button.innerHTML;button.disabled=true;button.textContent='Sender…';try{const response=await fetch(`/api/v1/reminder-task-rules/${id}/send-now`,{method:'POST'});const result=await response.json().catch(()=>({}));if(!response.ok||!result.sent)throw new Error(result.detail||result.message||'Kunne ikke sende');alert(`Opgavelisten er sendt med ${result.count} sager.`)}catch(error){alert(error.message)}finally{button.disabled=false;button.innerHTML=original}}