export interface Metadata { attempt_id: string; test_id: string; type: string; total_possible_score: number; deduction?: string; num_questions: number; name: string; start_time: string; // keep ISO string for consistency time_limit_minutes?: number; } export type Question = { question_id: string; question: string; options: string[]; type: "Single" | "Multiple"; }; export interface Test { metadata: Metadata; questions: Question[]; } export type Answer = number | null; export type AnswersMap = Record; export interface TestAttempt { user_id: string | undefined; test_id: string; subject_id: string; topic_id: string; test_type: "Subject" | "Topic" | "Mock" | "Past"; attempt_id: string; start_time: string; end_time: string; user_questions: Question[]; user_answers: (number | null)[]; correct_answers: number[]; correct_answers_count: number; wrong_answers_count: number; skipped_questions_count: number; } export interface TestContextType { currentExam: Test | null; currentAttempt: TestAttempt | null; isHydrated: boolean; isInitialized: boolean; // Actions setCurrentExam: (exam: Test) => void; startExam: (exam?: Test) => void; setAnswer: (questionId: string, answer: Answer) => void; submitExam: () => TestAttempt | null; // or Promise if API clearExam: () => void; setApiResponse: (response: any) => void; // Getters getAnswer: (questionId: string) => Answer; getProgress: () => number; isExamStarted: () => boolean; isExamCompleted: () => boolean; getApiResponse: () => any; }