import { useMyBackgrounds } from '@/hooks/useMyBackgrounds'
import { useVirtualBackground } from '@/hooks/useVirtualBackground'
import { BackgroundDialog } from '@/components/room/BackgroundDialog'

interface VirtualBackgroundControllerProps {
  /** Открыта ли модалка выбора; сам фон применяется независимо от этого. */
  open: boolean
  onClose: () => void
  /** Аутентифицированный участник — только у него есть свои картинки (гость их иметь не может). */
  canManageOwn: boolean
}

/**
 * Живёт ВНУТРИ `<LiveKitRoom>` и держит замену фона включённой всё время
 * пребывания в комнате.
 *
 * Почему это отдельный компонент, а не хук прямо в `RoomPage`:
 * `useVirtualBackground` читает локального участника через `useLocalParticipant`,
 * а тот берёт комнату из `RoomContext` — контекст создаётся самим
 * `<LiveKitRoom>`, и в теле `RoomPage` (которое этот элемент только
 * возвращает) его ещё нет.
 *
 * Компонент смонтирован ВСЁ время, пока модуль включён, а не только пока
 * открыта модалка: фон должен переживать закрытие окна выбора, выключение и
 * повторное включение камеры и смену устройства (см. докстринг хука).
 */
export function VirtualBackgroundController({
  open,
  onClose,
  canManageOwn,
}: VirtualBackgroundControllerProps) {
  const { items } = useMyBackgrounds(canManageOwn)
  const { backgroundKey, selectBackground, status } = useVirtualBackground(true, items)

  if (!open) return null
  return (
    <BackgroundDialog
      onClose={onClose}
      value={backgroundKey}
      onChange={selectBackground}
      customBackgrounds={items}
      status={status}
      canManageOwn={canManageOwn}
    />
  )
}
