1import { LAYOUTS, type LayoutId } from "@/lib/layouts"
2
3/* M8 (SE-01, SE-04): siapa pemilik slot mana di strip estafet. Aturannya satu
4 untuk semua layout: indeks genap (0-based) milik pembuat, ganjil milik teman.
5 Pembuat selalu mengisi dua slot, jadi tombol "Estafet ke Teman" memenuhi
6 syarat "minimal setengah slot terisi" di Strip 4, Strip 3, dan Grid 2 x 2.
7
8 Fungsi murni: dipakai server (menyusun baris `relays`) dan klien (bootstrap
9 sesi tamu, penguncian baki foto), tanpa menyentuh jaringan. */
10
11export type RelayRole = "host" | "guest"
12
13interface RelaySlotOwner {
14 index: number
15 owner: RelayRole
16}
17
18export function relaySlotsFor(layoutId: LayoutId): RelaySlotOwner[] {
19 return Array.from({ length: LAYOUTS[layoutId].shotCount }, (_, index) => ({
20 index,
21 owner: index % 2 === 0 ? "host" : "guest",
22 }))
23}
24
25export function hostSlotIndices(layoutId: LayoutId): number[] {
26 return relaySlotsFor(layoutId)
27 .filter((slot) => slot.owner === "host")
28 .map((slot) => slot.index)
29}
30
31/** SE-05: slot pembuat yang ditampilkan sebagai bayangan di pratinjau kamera
32 * teman saat slot `targetIndex` gilirannya. Selalu slot sebelumnya (satu
33 * kolom di atas pada strip, sebelah kiri pada grid); slot pertama null. */
34export function ghostSlotFor(targetIndex: number): number | null {
35 return targetIndex > 0 ? targetIndex - 1 : null
36}
37