// 화상회의 도메인 타입 — 백엔드 MeetingService 응답/DTO 와 1:1
import type { ApiMember } from '@/types/repo'

// 회의 내 역할
export type MeetingRole = 'host' | 'participant'

// 회의 방(API 원시) — 백엔드 MeetingRoomResponse 와 1:1
export interface ApiMeetingRoom {
  id: string
  code: string // 입장 코드(불변) — 입장 URL·초대 링크의 기준
  name: string
  host: { id: string; name: string; avatarUrl: string | null } | null
  scheduledAt: string | null // ISO, 예약 시각(없으면 null)
  restricted: boolean // 참여 제한(allow-list) 여부
  isHost: boolean // 현재 사용자가 진행자
  canJoin: boolean // 현재 사용자가 입장 가능
  // 참여 허용 멤버 — 진행자에게만 내려옴(편집 폼 사전 채움용). 공개 방/비진행자는 null.
  allowedUsers: ApiMember[] | null
  createdAt: string
}

// 방 생성 요청
export interface CreateMeetingRoomPayload {
  name: string
  scheduledAt?: string // ISO
  allowedUserIds?: string[] // 비우면 전체 공개
}

// 방 수정 요청 — 생성과 동일 필드(진행자가 이름·예약·참여 제한 변경)
export type UpdateMeetingRoomPayload = CreateMeetingRoomPayload

// 회의실 채팅 메시지 — LiveKit 데이터 채널로 주고받는 인메모리 메시지(서버 저장 없음)
export interface ChatMessage {
  id: string
  senderId: string // 보낸 사람 identity(사용자 ID)
  senderName: string // 보낸 사람 표시 이름
  senderAvatarUrl: string | null // 보낸 사람 프로필 이미지(참여자 metadata 에서 파생)
  text: string
  ts: number // 보낸 시각(epoch ms)
  self: boolean // 본인이 보낸 메시지 여부
}

// 연결 품질 단계 — UI 막대(3/2/1)용으로 정규화한 값
export type MeetingQuality = 'good' | 'medium' | 'poor'
