const MAX_SLOTS = 2

let active = 0
const waitQueue: Array<() => void> = []

export async function acquireLivePreviewSlot(): Promise<() => void> {
    if (active < MAX_SLOTS) {
        active += 1
        return release
    }
    await new Promise<void>((resolve) => {
        waitQueue.push(resolve)
    })
    active += 1
    return release
}

function release() {
    active = Math.max(0, active - 1)
    const next = waitQueue.shift()
    next?.()
}
