import type { VideoLessonPlan } from "@/lib/video/videoLessonPlanner";
type VideoLessonPreviewProps = {
plan: VideoLessonPlan;
};
function Metric({ label, value }: { label: string; value: string | number }) {
return (
);
}
function SectionLabel({ children }: { children: React.ReactNode }) {
return {children}
;
}
function sceneTypeLabel(sceneType: string): string {
const labels: Record = {
intro: "class intro",
session_plan: "session plan",
teacher_explanation: "tutor explanation",
board_drawing: "board drawing",
worked_example: "worked example",
method: "DocDoe method",
notes: "notebook notes",
exam_answer: "exam answer",
practice_pause: "practice pause",
quiz: "quiz",
revision: "revision",
outro: "class finish",
};
return labels[sceneType] ?? sceneType.replace(/_/g, " ");
}
function voiceStyleLabel(style: string): string {
const labels: Record = {
calm_teacher: "calm tutor",
exam_coach: "exam coach",
quick_revision: "quick revision",
};
return labels[style] ?? style.replace(/_/g, " ");
}
export function VideoLessonPreview({ plan }: VideoLessonPreviewProps) {
const narrationPreview = plan.audioScript.slice(0, 2);
const boardPreview = plan.boardTimeline.slice(0, 3);
const notebookPreview = plan.notebookSections.slice(0, 2);
const practicePreview = plan.practicePauses.slice(0, 2);
return (
Audio/video preview
{plan.missionTitle}
Video renderer coming later; this is today's lesson plan. No MP4 or generated video is created here.
Renderer coming later
{plan.warnings.length > 0 ? (
Planner warnings
{plan.warnings.map((warning) => (
- {warning}
))}
) : null}
Lesson timeline
{plan.scenes.slice(0, 8).map((scene) => (
-
{scene.title}
{scene.startMinute}-{scene.startMinute + scene.durationMinutes} min
{sceneTypeLabel(scene.sceneType)}
{scene.narration[0]}
))}
Board drawing
{boardPreview.map((frame) => (
{frame.frameTitle}
at {frame.timestampMinute} min
{frame.drawingSteps.slice(0, 3).map((step) => (
- {step}
))}
))}
Tutor explanation
{narrationPreview.map((block) => (
{voiceStyleLabel(block.voiceStyle)}
{block.script}
))}
Copy this to notebook
{notebookPreview.map((section) => (
{section.title}
{section.copyToNotebook.slice(0, 3).map((line) => (
- {line}
))}
))}
Notice this
{practicePreview.map((pause) => (
{pause.prompt}
Pause: {pause.pauseSeconds} sec
Hint: {pause.hint}
))}
);
}