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 `
| Client |
Cycle |
Session |
Counselor |
Supervisor |
${sorted.map(row => `
| ${esc(row.clientCode)} |
${esc(String(row.programCycleNumber))} |
${esc(String(row.programSessionNumber))} |
${esc(row.coachUsername || row.coachID || '—')} |
${esc(row.supervisorUsername || '—')} |
`).join('')}
`;
}
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, '"');
}