import { apiGet } from '../api.js'; import { pageHeaderHTML, showToast } from '../app.js'; export async function schedulePage() { const app = document.getElementById('app'); app.innerHTML = ` ${pageHeaderHTML('Schedule', '', { subtitle: 'Upcoming session appointments set by counselors in the app', })}
`; try { const data = await apiGet('schedule'); renderSchedule(data.entries || [], data.byDate || {}); } catch (e) { showToast(e.message, 'error'); document.getElementById('scheduleContent').innerHTML = `

${esc(e.message)}

`; } } function renderSchedule(entries, byDate) { const el = document.getElementById('scheduleContent'); const todayStart = new Date(); todayStart.setHours(0, 0, 0, 0); const futureEntries = entries.filter(e => parseDdMmYyyy(e.scheduledDate) > todayStart.getTime()); const futureByDate = {}; futureEntries.forEach(e => { (futureByDate[e.scheduledDate] ||= []).push(e); }); if (!futureEntries.length) { el.innerHTML = `

No upcoming session appointments.

`; return; } const dates = Object.keys(futureByDate).sort((a, b) => parseDdMmYyyy(a) - parseDdMmYyyy(b)); el.innerHTML = `

${futureEntries.length} scheduled client${futureEntries.length === 1 ? '' : 's'} across ${dates.length} date${dates.length === 1 ? '' : 's'}. Counselors set dates in the mobile app.

${dates.map(date => dateGroupHTML(date, futureByDate[date] || [])).join('')} `; } function dateGroupHTML(scheduledDate, rows) { const sorted = [...rows].sort((a, b) => String(a.coachUsername || '').localeCompare(String(b.coachUsername || '')) || String(a.clientCode).localeCompare(String(b.clientCode)), ); return `

${esc(scheduledDate)}

${sorted.length} client${sorted.length === 1 ? '' : 's'}

${sorted.map(row => ` `).join('')}
Client Cycle Session Counselor Supervisor
${esc(row.clientCode)} ${esc(String(row.programCycleNumber))} ${esc(String(row.programSessionNumber))} ${esc(row.coachUsername || row.coachID || '—')} ${esc(row.supervisorUsername || '—')}
`; } function parseDdMmYyyy(date) { const m = /^(\d{2})-(\d{2})-(\d{4})$/.exec(String(date)); if (!m) return 0; return new Date(Number(m[3]), Number(m[2]) - 1, Number(m[1])).getTime(); } function esc(value) { return String(value ?? '') .replace(/&/g, '&') .replace(//g, '>') .replace(/"/g, '"'); }