let reminderUserId = null; const remindersCaseId = {{ case.id }}; function getReminderUserId() { const token = localStorage.getItem('access_token') || sessionStorage.getItem('access_token'); if (token) { try { const payload = JSON.parse(atob(token.split('.')[1])); return payload.sub || payload.user_id; } catch (e) { console.warn('Could not decode token for reminder user_id'); } } const metaTag = document.querySelector('meta[name="user-id"]'); if (metaTag) return metaTag.getAttribute('content'); return null; } async function ensureReminderUserId() { const localId = getReminderUserId(); if (localId) return localId; try { const res = await fetch('/api/v1/auth/me', { credentials: 'include' }); if (!res.ok) return null; const me = await res.json(); return me?.id || me?.user_id || null; } catch (err) { return null; } } function formatReminderDate(value) { if (!value) return '-'; const date = new Date(value); if (Number.isNaN(date.getTime())) return '-'; return date.toLocaleString('da-DK', { hour12: false }); } function updateReminderTriggerFields() { const triggerType = document.getElementById('rem_trigger_type')?.value; const timeWrap = document.getElementById('rem_trigger_time_wrap'); const statusWrap = document.getElementById('rem_trigger_status_wrap'); if (timeWrap && statusWrap) { if (triggerType === 'status_change') { timeWrap.classList.add('d-none'); statusWrap.classList.remove('d-none'); } else { timeWrap.classList.remove('d-none'); statusWrap.classList.add('d-none'); } } } function updateReminderRecurrenceFields() { const recurrenceType = document.getElementById('rem_recurrence_type')?.value; const dowWrap = document.getElementById('rem_recurrence_dow_wrap'); const domWrap = document.getElementById('rem_recurrence_dom_wrap'); if (!dowWrap || !domWrap) return; dowWrap.classList.toggle('d-none', recurrenceType !== 'weekly'); domWrap.classList.toggle('d-none', recurrenceType !== 'monthly'); } function openCreateReminderModal(defaultEventType) { reminderUserId = getReminderUserId(); const warning = document.getElementById('rem_user_warning'); if (warning) warning.classList.toggle('d-none', !!reminderUserId); const form = document.getElementById('createReminderForm'); if (form) form.reset(); document.getElementById('rem_notify_frontend').checked = true; document.getElementById('rem_priority').value = 'normal'; document.getElementById('rem_event_type').value = defaultEventType || 'reminder'; document.getElementById('rem_trigger_type').value = 'time_based'; document.getElementById('rem_recurrence_type').value = 'once'; updateReminderTriggerFields(); updateReminderRecurrenceFields(); new bootstrap.Modal(document.getElementById('createReminderModal')).show(); } async function loadReminders() { const list = document.getElementById('remindersList'); if (!list) return; reminderUserId = await ensureReminderUserId(); if (!reminderUserId) { list.innerHTML = '