const STORAGE_KEY = 'vidconf-stage-layout-mode'

/**
 * Режим показа участников на сцене конференции — выбирается пользователем
 * явно (до 0.0.11 раскладка выбиралась автоматически по наличию демонстрации
 * экрана и числу участников).
 *
 * - `standard` — один крупный участник (фокус) + остальные в карусели сбоку;
 *   кто именно в фокусе, по-прежнему решает `pickStageFocus`.
 * - `tiles` — все участники равными плитками, без выделенного крупного.
 * - `live-tiles` — равномерная сетка ТОЛЬКО из участников с включённой
 *   камерой, остальные (камера выключена) — в карусели сбоку.
 */
export type StageLayoutMode = 'standard' | 'tiles' | 'live-tiles'

/** Порядок и подписи режимов в переключателе (единый источник для тулбара и мобильной шторки). */
export const STAGE_LAYOUT_MODE_OPTIONS: readonly {
  mode: StageLayoutMode
  title: string
  hint: string
}[] = [
  { mode: 'standard', title: 'Стандарт', hint: 'Крупно — активный участник, остальные сбоку' },
  { mode: 'tiles', title: 'Плитки', hint: 'Все участники равными плитками' },
  { mode: 'live-tiles', title: 'Живые плитки', hint: 'Плитками — только с камерой, остальные сбоку' },
]

function isStageLayoutMode(value: string | null): value is StageLayoutMode {
  return value === 'standard' || value === 'tiles' || value === 'live-tiles'
}

/**
 * Сохранённый режим показа — читается при входе в комнату.
 *
 * Персист сделан своим модулем (как `lib/audioOutputDevice.ts`), а не через
 * `usePersistentUserChoices` LiveKit: их `LocalUserChoices` — фиксированная
 * структура про устройства и имя, поля для нашей раскладки там нет и добавить
 * его нельзя. Схема хранения та же: одна строка в localStorage, любые сбои
 * доступа к нему гасятся (приватный режим/политики браузера).
 */
export function loadStageLayoutMode(): StageLayoutMode {
  try {
    const stored = localStorage.getItem(STORAGE_KEY)
    return isStageLayoutMode(stored) ? stored : 'standard'
  } catch {
    return 'standard'
  }
}

export function saveStageLayoutMode(mode: StageLayoutMode): void {
  try {
    localStorage.setItem(STORAGE_KEY, mode)
  } catch {
    // Сохранение недоступно — выбор продержится до конца сессии в комнате.
  }
}
