import type { ApiSession, SessionPayload } from "../../services/api/sessions"; import type { ApiTrack } from "../../services/api/tracks"; /** Resolved Q&A flag (supports legacy `qnaEnabled` on older session documents). */ export function effectiveEnableQnA(s: ApiSession): boolean { if (typeof s.enableQnA === "boolean") return s.enableQnA; const legacy = (s as ApiSession & { qnaEnabled?: boolean }).qnaEnabled; if (typeof legacy === "boolean") return legacy; return true; } export function effectiveEnableQnP(s: ApiSession): boolean { if (typeof s.enableQnP === "boolean") return s.enableQnP; return true; } export function sessionToPayload(s: ApiSession): SessionPayload { const trackRaw = s.track; let track: string | null = null; if (trackRaw && typeof trackRaw === "object" && "_id" in trackRaw) track = String((trackRaw as ApiTrack)._id); else if (typeof trackRaw === "string" && trackRaw.trim()) track = trackRaw; const speakers = (s.speakers || []).map((x) => (typeof x === "string" ? x : x._id)); const keyPersons = Array.isArray(s.keyPersons) && s.keyPersons.length ? s.keyPersons .map((kp) => { const speakerId = typeof kp.speaker === "object" && kp.speaker && "_id" in kp.speaker ? String(kp.speaker._id) : String(kp.speaker || ""); if (!speakerId) return null; return { speaker: speakerId, role: String(kp.role || "Speaker").trim() || "Speaker" }; }) .filter((x): x is { speaker: string; role: string } => Boolean(x)) : speakers.map((speaker) => ({ speaker, role: "Speaker" })); return { title: s.title, description: s.description ?? "", type: s.type, startTime: s.startTime, endTime: s.endTime, location: s.location, track, speakers, keyPersons, moderator: s.moderator ?? null, capacity: s.capacity, status: s.status, resources: s.resources, audienceFeedbackEnabled: s.audienceFeedbackEnabled, audienceRatingsEnabled: s.audienceRatingsEnabled, audienceKeyPersonsEnabled: s.audienceKeyPersonsEnabled, audienceMySessionsEnabled: s.audienceMySessionsEnabled, audienceAgendaEnabled: s.audienceAgendaEnabled, audienceFeedbackForm: s.audienceFeedbackForm ?? null, audienceRatingsForm: s.audienceRatingsForm ?? null, enableQnA: effectiveEnableQnA(s), enableQnP: effectiveEnableQnP(s), }; }