"use client"; import { useMemo } from "react"; import type { CoursePlanResult } from "./learnAnythingTypes"; interface CoursePlanCardProps { coursePlan: CoursePlanResult; } /** * Display the backend-generated course plan. * Must show all available fields from CoursePlanResult. * Must respect truth rules: no fake claims, honest source labels. */ export function CoursePlanCard({ coursePlan }: CoursePlanCardProps) { const hasUploadedSource = coursePlan.data_source_label === "Uploaded source"; const contextItems = [ ["Class", coursePlan.student_context.class_level], ["Syllabus", coursePlan.student_context.syllabus], ["Subject", coursePlan.student_context.subject], ["Chapter", coursePlan.student_context.chapter], ["Exam", coursePlan.student_context.exam_date], ["Daily time", coursePlan.student_context.daily_study_time], ["Goal", coursePlan.student_context.goal], ].filter(([, value]) => value); // Format duration const formatDuration = (minutes: number) => { if (minutes < 60) return `${minutes} min`; const hours = Math.floor(minutes / 60); const remainingMinutes = minutes % 60; if (remainingMinutes === 0) return hours === 1 ? "1 hour" : `${hours} hours`; return hours === 1 ? `1 hour ${remainingMinutes} min` : `${hours} hours ${remainingMinutes} min`; }; // Format course type label const courseTypeLabel = useMemo(() => { if (coursePlan.source_basis === "source_upload") return "Source-backed course"; if (coursePlan.source_basis === "catalog_seed") return "Catalog-based course"; if (coursePlan.source_basis === "syllabus") return "Syllabus-based course"; return "Starter course plan"; }, [coursePlan.source_basis]); return (
{label}
{value}
{item}
{coursePlan.concept_explanation.title}
{coursePlan.concept_explanation.explanation}
{coursePlan.concept_explanation.board_exam_focus && ({coursePlan.concept_explanation.board_exam_focus}
)}{item.title}
Common mark loss: {item.common_mistake}
)}{coursePlan.final_outcome}
{coursePlan.next_action}
{repair.topic}
{repair.symptom}
{repair.repair_task}
{item.timing}
{item.estimated_minutes} min{item.task}
{item.purpose}
~{formatDuration(module.estimated_minutes)}
)}Source: {module.source_basis}
{lesson.title}
{lesson.task}
{task.title}
{task.description || task.task_type}
Type: {task.task_type}
{quiz.title}
{quiz.question_count} questions
{quiz.focus_areas && quiz.focus_areas.length > 0 && (Focus: {quiz.focus_areas.join(", ")}
)}{checkpoint.title}
{checkpoint.estimated_minutes} minutes
{checkpoint.focus_areas && checkpoint.focus_areas.length > 0 && (Focus: {checkpoint.focus_areas.join(", ")}
)}Generated by DocDoe AI | {courseTypeLabel} {!hasUploadedSource && " | No uploaded source used"}
{question.question}
{question.answer_hint && ({question.answer_hint}
)}