// ═══════════════════════════════════════════════════════════════════════════ // TYPES - Education Platform for HuggingFace Spaces // ═══════════════════════════════════════════════════════════════════════════ // Session Types export interface Session { id: string; name: string; teacherId: string; teacherName: string; createdAt: string; isActive: boolean; currentSlide: number; totalSlides: number; slideUrls: string[]; whiteboardData: WhiteboardStroke[]; studentCount: number; maxStudents: number; } // User Types export interface User { id: string; name: string; role: 'teacher' | 'student'; sessionId?: string; joinedAt: string; } // Chat Types export interface ChatMessage { id: string; sessionId: string; userId: string; userName: string; message: string; isTeacher: boolean; timestamp: string; } // Poll Types export interface Poll { id: string; sessionId: string; question: string; options: PollOption[]; correctAnswer?: string; duration: number; createdAt: string; endsAt: string; isActive: boolean; results: Record; totalVotes: number; votedStudents: string[]; } export interface PollOption { id: string; text: string; isCorrect?: boolean; } // Doubt Types export interface Doubt { id: string; sessionId: string; studentId: string; studentName: string; question: string; image?: string; slideNumber: number; status: 'pending' | 'in_progress' | 'solved'; createdAt: string; solvedAt?: string; annotatedImage?: string; teacherResponse?: string; } // Reaction Types export interface Reaction { sessionId: string; emoji: string; count: number; lastUpdated: string; } export type ReactionType = '👍' | '❤️' | '🎉' | '😕' | '🚀' | '👏' | '🔥'; // Whiteboard Types export interface WhiteboardStroke { id: string; tool: 'pen' | 'eraser' | 'highlighter' | 'text' | 'arrow' | 'circle' | 'rectangle'; color: string; lineWidth: number; points: Point[]; text?: string; slideNumber: number; timestamp: string; } export interface Point { x: number; y: number; } // Slide Types export interface Slide { id: string; sessionId: string; slideNumber: number; imageUrl: string; annotations: WhiteboardStroke[]; createdAt: string; } // SSE Event Types export type SSEEventType = | 'connected' | 'slide_change' | 'whiteboard_draw' | 'whiteboard_clear' | 'new_poll' | 'poll_update' | 'poll_ended' | 'chat_message' | 'reaction' | 'new_doubt' | 'doubt_update' | 'doubt_solved' | 'student_joined' | 'student_left' | 'session_ended' | 'presence_update'; export interface SSEEvent { id: string; event: SSEEventType; data: any; timestamp: string; } // Storage Types (HuggingFace CDN) export interface StorageFile { path: string; url: string; size: number; contentType: string; uploadedAt: string; } export interface SessionStorage { sessionId: string; slides: StorageFile[]; whiteboardSnapshots: StorageFile[]; doubts: StorageFile[]; chatHistory: ChatMessage[]; pollHistory: Poll[]; } // API Request/Response Types export interface ApiResponse { success: boolean; data?: T; error?: string; message?: string; } // Presence Types export interface PresenceUser { id: string; name: string; role: 'teacher' | 'student'; lastSeen: string; isOnline: boolean; } export interface PresenceUpdate { sessionId: string; onlineCount: number; users: PresenceUser[]; }