#!/usr/bin/env php
<?php
/** CMS: auto-start ABR cluster streams after full reload (no supervisor cron). */
chdir("/home/xtreamcodes/iptv_xtream_codes/admin");
require_once "functions.php";

if (!defined("XC_CMS_REMOTE_PANEL")) {
    define("XC_CMS_REMOTE_PANEL", 1);
}

$rStreamIds = array();
if (isset($argv[1]) && trim($argv[1]) !== "") {
    foreach (explode(",", $argv[1]) as $p) {
        $id = intval(trim($p));
        if ($id > 0) {
            $rStreamIds[] = $id;
        }
    }
}
if (count($rStreamIds) === 0) {
    $rStreamIds = array();
    $rResult = $db->query(
        "SELECT s.`id` FROM `streams` s "
        ."INNER JOIN `streams_sys` ss ON ss.`stream_id` = s.`id` "
        ."WHERE ss.`server_id` > 1 AND s.`type` = 1 "
        ."ORDER BY CASE WHEN s.`adaptive_child_of` = 0 THEN s.`id` ELSE s.`adaptive_child_of` END, "
        ."s.`adaptive_child_of`, s.`id`;"
    );
    if ($rResult && $rResult->num_rows > 0) {
        while ($rRow = $rResult->fetch_assoc()) {
            $rStreamIds[] = intval($rRow["id"]);
        }
    }
    if (count($rStreamIds) === 0) {
        $rStreamIds = range(23, 31);
    }
    echo "[*] auto-start ".count($rStreamIds)." stream(s) on LB node(s)\n";
}

$rOk = 0;
$rFail = 0;
foreach ($rStreamIds as $rStreamID) {
    $rServers = xtStreamServersForStream($rStreamID);
    if (count($rServers) === 0) {
        echo "[skip] stream $rStreamID — no server in streams_sys\n";
        $rFail++;
        continue;
    }
    $rRaw = APIRequest(array(
        "action" => "stream",
        "sub" => "start",
        "stream_ids" => array($rStreamID),
        "servers" => $rServers,
    ));
    $rResp = xtFormatPanelApiResponse($rRaw);
    if (!empty($rResp["result"])) {
        echo "[ok] stream $rStreamID on server(s) ".implode(",", $rServers)."\n";
        $rOk++;
    } else {
        $rErr = $rResp["error"] ?? $rRaw ?? "start failed";
        echo "[warn] stream $rStreamID — $rErr\n";
        $rFail++;
    }
    usleep(500000);
}

echo "[ok] started $rOk stream(s)".($rFail > 0 ? " ($rFail skipped/failed)" : "")."\n";
exit($rOk > 0 ? 0 : 1);
