export type LiveMeetingLockState = 'locked' | 'unlocked'; export type LiveMeetingQuality = 'good' | 'fair' | 'poor'; export interface LiveMeetingActivity { recording: boolean; streaming: boolean; presenting: boolean; } export interface LiveMeeting { id: string; title: string; ownerName: string; ownerEmail: string; participants: number; lobbyCount: number; lockState: LiveMeetingLockState; activity: LiveMeetingActivity; startTime: string; duration: string; quality: LiveMeetingQuality; cluster: string; } export interface LiveMeetingsSummary { activeMeetings: number; connectedParticipants: number; waitingInLobby: number; recording: number; streaming: number; qualityWarnings: number; } export interface LiveMeetingsSnapshot { summary: LiveMeetingsSummary; meetings: LiveMeeting[]; } export type LiveMeetingParticipantStatus = 'connected' | 'disconnected'; export interface LiveMeetingParticipant { id: string; name: string; initials: string; subBadge?: string; status: LiveMeetingParticipantStatus; audioMuted: boolean; videoOn: boolean; joinTime: string; quality: LiveMeetingQuality | null; endpoint: string; endpointIcon?: 'mail' | 'call'; } export interface LiveMeetingLobbyEntry { id: string; name: string; endpoint: string; waitingSince: string; } export interface LiveMeetingDetails { id: string; title: string; ownerName: string; ownerEmail: string; meetingId: string; startTime: string; duration: string; lockState: LiveMeetingLockState; quality: LiveMeetingQuality; cluster: string; isRecording: boolean; isStreaming: boolean; connectedCount: number; lobbyCount: number; participants: LiveMeetingParticipant[]; lobby: LiveMeetingLobbyEntry[]; }