import { BookOpen, Home, LineChart, MessageSquareText, UserRound, } from "lucide-react"; import type { LucideIcon } from "lucide-react"; export type MissionStepId = "lesson" | "notes" | "quiz" | "feedback" | "next"; export type MobileScreenId = "today" | "lesson" | "notes" | "quiz" | "feedback" | "weakAreas" | "next"; export type SourceRef = { file_name: string; book?: string; printed_page?: number; pdf_page?: number; }; export type SessionNavItem = { label: string; href: string; icon: LucideIcon; active?: boolean; }; export type MissionStep = { id: MissionStepId; label: string; }; export type NoteCardData = { id: number; title: string; body: string; tag?: string; tone?: "default" | "warning"; source_refs?: SourceRef[]; }; export type QuizOptionData = { key: "A" | "B" | "C" | "D"; text: string; }; export type TuitionQuizData = { id?: string; mode?: "choice" | "review"; questionNumber: number; totalQuestions: number; question: string; source?: string; options: QuizOptionData[]; correctOption: QuizOptionData["key"]; answerOutline?: string; keywords?: string[]; questionType?: string; marks?: number; source_refs?: SourceRef[]; }; export type TuitionFeedbackData = { why: string; conceptTested: string; mistake: string; toRevise: string; source?: string; source_refs?: SourceRef[]; }; export type WeakAreaData = { label: string; accuracy?: number; status: "Weak" | "Average" | "Review"; studentAnswer?: string; correctAnswer?: string; source_refs?: SourceRef[]; }; export type FlashcardData = { front: string; back: string; type: string; status: string; marks?: number; source_refs: SourceRef[]; }; export type AnswerCorrectionRuleData = { id: string; applies_to: string[]; rule: string; keyword_map?: Record; source_refs: SourceRef[]; }; export type TuitionSessionData = { student: { name: string; initials: string; streak: string; }; brand: { name: string; tagline: string; }; classLabel: string; board?: string; subject?: string; chapterLabel: string; chapterShortTitle: string; chapterSubtitle: string; missionLabel: string; missionGoal: string; missionId?: string; chapterId?: string; missionTitle?: string; nextMissionTitle?: string; sessionProgress: number; estimatedTime: string; video: { currentTime: string; duration: string; speed: string; progress: number; }; lessonTakeaway: string; lessonBoard: { title: string; subtitle: string; points: string[]; source_refs?: SourceRef[]; }; formulaText: string; missionSteps: readonly MissionStep[]; notes: NoteCardData[]; quiz: TuitionQuizData; feedback: TuitionFeedbackData; checklist: string[]; doubtTeacher: { question: string; answer: string; }; weakAreas: WeakAreaData[]; flashcards: FlashcardData[]; nextStep: { completedTitle: string; completedSubtitle: string; tomorrowPlan: string[]; }; answerCorrectionRules: AnswerCorrectionRuleData[]; source_refs: SourceRef[]; formulas?: unknown[]; derivations?: unknown[]; numericalPatterns?: unknown[]; visualLessonFrames?: unknown[]; }; export const missionSteps = [ { id: "lesson", label: "Watch Lesson" }, { id: "notes", label: "Key Notes" }, { id: "quiz", label: "Quiz" }, { id: "feedback", label: "Feedback" }, { id: "next", label: "Next Step" }, ] as const satisfies readonly MissionStep[]; export const missionStageOrder = missionSteps.map((step) => step.id) satisfies MissionStepId[]; export const mobileMissionFlow = ["today", "lesson", "notes", "quiz", "feedback", "weakAreas", "next"] as const satisfies readonly MobileScreenId[]; export const noteTabs = ["Key Notes", "Formula Sheet", "Board Answer"] as const; export const missionNextActions: Record = { lesson: "Watch the source-backed lesson", notes: "Read the 5 key notes", quiz: "Answer the mission quiz", feedback: "Review the answer rule", next: "Save weak areas and continue", }; export const tuitionSession: TuitionSessionData = { student: { name: "Asnan", initials: "AS", streak: "", }, brand: { name: "DocDoe", tagline: "Today's Tuition", }, classLabel: "+2 Physics", chapterLabel: "Chapter 1: Electric Charges and Fields", chapterShortTitle: "Chapter 1", chapterSubtitle: "Electric Charges and Fields", missionLabel: "Today's Chapter Mission", missionGoal: "Understand Coulomb's Law, finish one quiz, fix weak points.", sessionProgress: 65, estimatedTime: "~45 mins", video: { currentTime: "12:18", duration: "28:40", speed: "1.0x", progress: 43, }, lessonTakeaway: "Force \u221d q\u2081q\u2082 and Force \u221d 1/r\u00b2. Doubling distance \u2192 force becomes 1/4th.", lessonBoard: { title: "Coulomb's Law", subtitle: "Electric Charges and Fields", points: [ "Force is directly proportional to the product of charges.", "Force is inversely proportional to the square of distance.", "Force acts along the line joining two point charges.", ], source_refs: [], }, formulaText: "F = k |q1 q2| / r\u00b2", missionSteps, notes: [ { id: 1, title: "Law statement", body: "Force between two point charges is directly proportional to the product of charges.", tag: "NCERT 1.1", }, { id: 2, title: "Formula", body: "F = k |q\u2081q\u2082| / r\u00b2, where k = 9 \u00d7 10\u2079 N m\u00b2/C\u00b2.", tag: "Board formula", }, { id: 3, title: "Meaning of r\u00b2", body: "When distance doubles, force becomes one-fourth. This is the inverse square relation.", tag: "PYQ 2024", }, { id: 4, title: "Direction of force", body: "Force acts along the straight line joining the two point charges.", tag: "NCERT 1.2", }, { id: 5, title: "Common exam mistake", body: "Using r instead of r\u00b2 is the #1 error in board exams.", tag: "Exam alert", tone: "warning", }, ] satisfies NoteCardData[], quiz: { questionNumber: 1, totalQuestions: 5, question: "According to Coulomb's law, what happens to the electrostatic force between two point charges if the distance between them is doubled?", source: "PYQ 2024", options: [ { key: "A", text: "It becomes half" }, { key: "B", text: "It becomes one-fourth" }, { key: "C", text: "It becomes four times" }, { key: "D", text: "It remains the same" }, ] satisfies QuizOptionData[], correctOption: "B" as const, }, feedback: { why: "F is proportional to 1/r\u00b2. If r becomes 2r, (2r)\u00b2 = 4r\u00b2, making the force 1/4th.", conceptTested: "Inverse square dependence of Coulomb's Law", mistake: "You chose 1/r instead of 1/r\u00b2. This is the most common board exam error.", toRevise: "Mathematical interpretation of inverse square laws.", source: "NCERT Ch.1, Ex. 1.1", }, checklist: [ "Learn today's concept", "Read the key notes", "Pass the checkpoints", "Fix weak areas", "Save revision", ], doubtTeacher: { question: "Why does the force act strictly along the line joining them?", answer: "Because electrostatic force is a central force. By symmetry, the only unique direction between two point charges is the straight line connecting them.", }, weakAreas: [ { label: "Inverse square law", accuracy: 30, status: "Weak", studentAnswer: "half", correctAnswer: "one-fourth" }, { label: "Units & dimensions", accuracy: 60, status: "Average" }, { label: "Direction of force", accuracy: 70, status: "Average" }, ] satisfies WeakAreaData[], flashcards: [], nextStep: { completedTitle: "Great job, Asnan!", completedSubtitle: "You've completed today's mission.", tomorrowPlan: ["Revise: Inverse square law", "Learn: Gauss's Theorem"], }, answerCorrectionRules: [], source_refs: [], formulas: [], derivations: [], numericalPatterns: [], visualLessonFrames: [], }; /** Minimal global rail — Progress holds weekly plan, weak areas, revision, practice. */ export const sessionNavItems: SessionNavItem[] = [ { label: "Today", href: "/tuition", icon: Home, active: true }, { label: "Learn Anything", href: "/learn-anything", icon: BookOpen }, { label: "Study Chat", href: "/study-chat", icon: MessageSquareText }, { label: "Progress", href: "/progress", icon: LineChart }, { label: "Profile", href: "/settings", icon: UserRound }, ]; export const mobileBottomNavItems: SessionNavItem[] = [ { label: "Today", href: "/tuition", icon: Home, active: true }, { label: "Learn", href: "/learn-anything", icon: BookOpen }, { label: "Chat", href: "/study-chat", icon: MessageSquareText }, { label: "Progress", href: "/progress", icon: LineChart }, { label: "Profile", href: "/settings", icon: UserRound }, ];