<?php

function getSetting($db, $key, $default = '') {
    $stmt = $db->prepare("SELECT setting_value FROM settings WHERE setting_key = :key");
    $stmt->execute([':key' => $key]);
    if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        return $row['setting_value'];
    }
    return $default;
}

function getRandomNumber($min, $max) {
    return rand($min, $max);
}

function getDayNameRu($dayNum) {
    $days = [
        1 => "Понедельник",
        2 => "Вторник",
        3 => "Среда",
        4 => "Четверг",
        5 => "Пятница",
        6 => "Суббота",
        7 => "Воскресенье"
    ];
    return $days[$dayNum] ?? $dayNum;
}

function getCurrentBroadcast($db) {
    $currentDay = (int)date('N'); // 1 (Mon) to 7 (Sun)
    $currentTime = date('H:i:s');

    // Get Active CDN URL from settings
    $activeCdnId = getSetting($db, 'active_cdn_id');
    $cdnUrl = '';
    if (!empty($activeCdnId)) {
        $stmtCdn = $db->prepare("SELECT url FROM cdn_links WHERE id = :id");
        $stmtCdn->execute([':id' => $activeCdnId]);
        if ($cdnRow = $stmtCdn->fetch(PDO::FETCH_ASSOC)) {
            $cdnUrl = $cdnRow['url'];
        }
    }

    // 1. Check for ongoing broadcast (including 5 min grace period)
    $stmt = $db->prepare("
        SELECT * 
        FROM schedule 
        WHERE day_of_week = :day 
          AND start_time <= :now 
          AND ADDTIME(end_time, '00:05:00') > :now 
          AND is_active = 1 
        LIMIT 1
    ");
    $stmt->execute([':day' => $currentDay, ':now' => $currentTime]);
    $broadcast = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($broadcast) {
        $broadcast['cdn_url'] = $cdnUrl;
        $broadcast['is_ongoing'] = true;
        // Calculate time difference from start_time manually today
        $startTs = strtotime(date('Y-m-d') . ' ' . $broadcast['start_time']);
        $broadcast['time_elapsed'] = time() - $startTs;
        return $broadcast;
    }

    // 2. Find next broadcast
    $stmt = $db->prepare("
        SELECT * 
        FROM schedule 
        WHERE is_active = 1 
        ORDER BY 
            CASE 
                WHEN day_of_week = :day AND start_time > :now THEN 0
                WHEN day_of_week > :day THEN day_of_week - :day
                ELSE day_of_week + 7 - :day
            END ASC,
            start_time ASC
        LIMIT 1
    ");
    $stmt->execute([':day' => $currentDay, ':now' => $currentTime]);
    $broadcast = $stmt->fetch(PDO::FETCH_ASSOC);

    if ($broadcast) {
        $broadcast['cdn_url'] = $cdnUrl;
        $broadcast['is_ongoing'] = false;
        
        // Calculate countdown
        $targetDay = (int)$broadcast['day_of_week'];
        $daysDiff = $targetDay - $currentDay;
        if ($daysDiff < 0 || ($daysDiff === 0 && $broadcast['start_time'] <= $currentTime)) {
            $daysDiff += 7;
        }
        
        $targetDate = date('Y-m-d', strtotime("+$daysDiff days"));
        $targetTs = strtotime($targetDate . ' ' . $broadcast['start_time']);
        $broadcast['countdown_seconds'] = max(0, $targetTs - time());
        return $broadcast;
    }

    return null;
}

