export type RoleState = 'role-selection' | 'dashboard' | 'classroom' export type Role = 'teacher' | 'student' | 'observer' export interface User { id: string name: string email: string role: Role } export interface ClassroomDto { id: string name: string description?: string subject?: string teacherId: string teacherName: string scheduledStartTime: string actualStartTime?: string endTime?: string duration?: number maxParticipants?: number isActive: boolean isScheduled: boolean participantCount: number canJoin: boolean settingsDto?: ClassroomSettingsDto } export interface ClassroomSettingsDto { allowHandRaise: boolean allowStudentChat: boolean allowPrivateMessages: boolean allowStudentScreenShare: boolean defaultMicrophoneState: 'muted' | 'unmuted' defaultCameraState: 'on' | 'off' defaultLayout: string autoMuteNewParticipants: boolean } export interface ClassAttendanceDto { id: string sessionId: string studentId: string studentName: string joinTime: string leaveTime?: string totalDurationMinutes: number } export type MediaType = 'audio' | 'video' | 'screen' export interface SignalingMessageDto { type: MediaType fromUserId: string toUserId: string data: any } export interface ClassParticipantDto { id: string name: string isTeacher: boolean isObserver?: boolean isAudioMuted?: boolean isVideoMuted?: boolean stream?: MediaStream screenStream?: MediaStream isScreenSharing?: boolean peerConnection?: RTCPeerConnection } export type messageType = 'public' | 'private' | 'announcement' export interface ClassChatDto { id: string senderId: string senderName: string message: string timestamp: string isTeacher: boolean recipientId?: string // Özel mesaj için recipientName?: string messageType: messageType } export type VideoLayoutType = 'grid' | 'sidebar' | 'teacher-focus' export interface VideoLayoutDto { id: string name: string type: VideoLayoutType description: string } export interface TeacherLayoutDto extends VideoLayoutDto { id: 'teacher-focus' name: 'Öğretmen Odaklı' type: 'teacher-focus' description: 'Öğretmen tam ekranda, öğrenciler küçük panelde' } export interface ScheduledClassDto { id: string name: string scheduledTime: string duration: number canJoin: boolean } export interface HandRaiseDto { id: string studentId: string studentName: string timestamp: string isActive: boolean } export interface ClassDocumentDto { id: string name: string url: string type: string size: number uploadedAt: string uploadedBy: string isPresentation?: boolean totalPages?: number } export interface ScreenShareRequestDto { userId: string userName: string isActive: boolean }