/** Cloudflare Stream /lifecycle 的 status 正規化 */
export function normalizeLifecycleStatus(status: string | null | undefined): string {
    return String(status ?? 'disconnected').trim().toLowerCase()
}

/** 明確未開播（優先判斷） */
export const OFFLINE_LIFECYCLE_STATUSES = [
    'disconnected',
    'idle',
    'offline',
    'ended',
    'inactive',
    'not_connected',
] as const

/**
 * 視為開播中。
 * ready / initializing 為使用者指定；connected / streaming 等為推流進行中常見值。
 */
export const LIVE_LIFECYCLE_STATUSES = [
    'ready',
    'initializing',
    'connected',
    'streaming',
    'live',
    'live-inprogress',
    'reconnected',
] as const

export function isStreamOfflineByLifecycleStatus(status: string | null | undefined): boolean {
    const s = normalizeLifecycleStatus(status)
    return (OFFLINE_LIFECYCLE_STATUSES as readonly string[]).includes(s)
}

export function isStreamLiveByLifecycleStatus(status: string | null | undefined): boolean {
    const s = normalizeLifecycleStatus(status)
    if (isStreamOfflineByLifecycleStatus(s)) return false
    return (LIVE_LIFECYCLE_STATUSES as readonly string[]).includes(s)
}

/** SQL：room_streams 是否開播 */
export function sqlRoomStreamIsLive(alias = 'rs'): string {
    const col = alias ? `${alias}.stream_status` : 'stream_status'
    const quoted = LIVE_LIFECYCLE_STATUSES.map((s) => `'${s}'`).join(', ')
    return `${col} IN (${quoted})`
}

/** SQL：非直播（影片／未開播列表用） */
export function sqlRoomStreamIsNotLive(alias = 'rs'): string {
    const col = alias ? `${alias}.stream_status` : 'stream_status'
    const quoted = LIVE_LIFECYCLE_STATUSES.map((s) => `'${s}'`).join(', ')
    return `${col} NOT IN (${quoted})`
}
