import type { ElementType } from "react"; import { BookOpen, ClipboardList, FileQuestion, FileText, Folder, GraduationCap, Layers3, Link as LinkIcon, Mic, Moon, Upload, Video, } from "lucide-react"; import type { StudyIntent } from "@/lib/study-intents"; import type { UploadMenuAction } from "./types"; export type PrimaryStudyAction = { label: string; intent: StudyIntent; prompt: string; icon: ElementType; }; export type UploadMenuItem = { label: string; description: string; icon: ElementType; action: UploadMenuAction; enabled: boolean; }; export const primaryChips: PrimaryStudyAction[] = [ { label: "Teach chapter", intent: "teach_topic", prompt: "Teach the most important chapter from {context}. Start from basics, then give scoring keywords, examples, common mistakes, and one practice question.", icon: BookOpen, }, { label: "Analyze uploaded PYQ", intent: "analyze_pyq", prompt: "Analyze repeated questions and paper signals from {context}. Base every pattern only on the papers I have uploaded, and if there is not enough evidence yet, say exactly what is missing.", icon: GraduationCap, }, { label: "Make quiz", intent: "generate_quiz", prompt: "Make an exam-focused quiz from {context}. Include answers, traps, and what each question helps me score.", icon: FileQuestion, }, { label: "Flashcards", intent: "generate_flashcards", prompt: "Make high-yield flashcards from {context}. Focus on definitions, formulas, diagrams, and common mistakes.", icon: Layers3, }, { label: "Study video", intent: "create_video_plan", prompt: "Create a 10-minute exam-focused study video plan from {context}. Break it into scenes, narration, on-screen text, and revision keywords.", icon: Video, }, { label: "Last night revision", intent: "create_revision_plan", prompt: "I have one night left. Make a last-night revision plan for {context}. Tell me what to study, skim, skip, and self-test. If the topic is missing, ask me one friendly question first.", icon: Moon, }, { label: "Study plan", intent: "continue_learning", prompt: "Build my study plan for {context}. Rank what scores, what to do first, weak areas, quick wins, and the next best action. If I did not give a topic yet, ask the smallest useful question.", icon: ClipboardList, }, ]; export const loadingMessages: Partial> = { teach_topic: "Retrieving concepts and shaping an exam-focused explanation...", explain_source: "Searching your source and building a grounded answer...", generate_notes: "Extracting scoring points, traps, and revision hooks from your material...", generate_quiz: "Building practice questions with traps and mark-wise explanations...", generate_flashcards: "Creating active-recall cards with memory hooks...", generate_exam_answer: "Structuring mark-wise board answers and underline keywords...", create_revision_plan: "Ranking what to study, skim, and self-test before the exam...", create_video_plan: "Planning scenes, narration beats, and revision moments...", render_video: "Preparing a render-ready lesson plan from your material...", continue_learning: "Building a study path ranked by scoring impact...", analyze_pyq: "Fetching verified previous-year papers and pattern signals...", summarize_source: "Summarizing retrieved chunks from your selected source...", }; /** * Ordered "thinking" beats per intent — shown one at a time while the answer * is generating, so the wait reads like real work (StudyFetch's staged * loader) instead of one frozen spinner line. The last beat lingers until the * response actually lands. Falls back to loadingMessages for any intent not * listed here. */ export const loadingStages: Partial> = { teach_topic: ["Reading your topic", "Pulling the core concepts", "Structuring the lesson", "Writing clear examples"], explain_source: ["Opening your source", "Finding the relevant passages", "Grounding the answer", "Writing it plainly"], generate_notes: ["Reading the material", "Extracting scoring points", "Marking traps and keywords", "Laying out the notes"], generate_quiz: ["Reading the topic", "Choosing what to test", "Writing questions and traps", "Adding mark-wise answers"], generate_flashcards: ["Reading the topic", "Picking the key ideas", "Writing fronts and backs", "Adding memory hooks"], generate_exam_answer: ["Reading the question", "Planning the mark scheme", "Writing the board answer", "Underlining keywords"], create_revision_plan: ["Checking time left", "Ranking by scoring impact", "Sequencing study and skim", "Adding self-test checkpoints"], create_video_plan: ["Reading the topic", "Blocking out scenes", "Writing narration beats", "Placing revision moments"], render_video: ["Reading your material", "Planning the lesson", "Preparing the render", "Finalizing scenes"], continue_learning: ["Reading your context", "Ranking by scoring impact", "Choosing the next move", "Writing the path"], analyze_pyq: ["Fetching verified papers", "Scanning for patterns", "Weighing repeated topics", "Summarizing honest signals"], summarize_source: ["Opening your source", "Reading the chunks", "Distilling the core", "Writing the summary"], predict_questions: ["Reading available papers", "Weighing question styles", "Avoiding false certainty", "Writing likely patterns"], show_formulas: ["Reading the chapter", "Collecting the formulas", "Noting when to use each", "Laying them out"], simplify_answer: ["Reading what's confusing", "Finding a simpler angle", "Rewriting in plain words"], }; export const uploadMenuItems: UploadMenuItem[] = [ { label: "Upload material", description: "Selectable-text PDF or TXT", icon: Upload, action: "material", enabled: true }, { label: "Question paper", description: "Selectable-text PDF for the PYQ pipeline", icon: FileQuestion, action: "paper", enabled: true }, { label: "Syllabus", description: "Paste syllabus text", icon: BookOpen, action: "syllabus", enabled: true }, { label: "Paste link", description: "Save a link source", icon: LinkIcon, action: "link", enabled: true }, { label: "Add text", description: "Paste syllabus or notes", icon: FileText, action: "text", enabled: true }, { label: "Record audio", description: "Coming soon", icon: Mic, action: "audio", enabled: false }, { label: "Import document", description: "Coming soon", icon: Folder, action: "import", enabled: false }, ];