<?php
// 按照自定义排序输出JSON
header('Content-Type: application/json; charset=utf-8');
$BoxId = $Lin->PN("boxid", "1", "1", "BoxId");
$LinDB->OpenConn();
$sql = "SELECT * FROM tvbox_task WHERE BoxId LIKE ? AND Task_State = '1' ORDER BY Task_Orders DESC";
$tasks = $LinDB->GetAll($sql, ['%' . $BoxId . '%']);
// 检查是否有任务
if (!empty($tasks)) {
    // 当前日期和时间
    $Task_NowData = $LinDate->Format($LinDate->DateTime(), 'Y-m-d');
    $currentTime = $LinDate->DateTime();
    // 遍历所有任务
    foreach ($tasks as $task) {
        $Task_ID = $task['Id'];
        // 计算任务执行时间和延长时间窗口
        $Task_DoTime = $task['Task_DoTime'] ?? '';
        $Task_AllTime = $Task_NowData . ' ' . $Task_DoTime; // 原始执行时间
        // 向后延长15分钟作为执行窗口期
        $Task_AddTime = date('Y-m-d H:i:s', strtotime($Task_AllTime) + 15 * 60);
        
        // 检查当前时间是否在任务的有效时间范围内（使用LinDate的ToWithTime）
        if ($LinDate->ToWithTime($currentTime, $task['Task_StartTime'], $task['Task_EndTime'])) {
            $Task_DoNow = "NO";
            $SqlTwo = "";
            // 根据任务类型决定执行条件
            if ($task['Task_DoNum'] == '1') {
                if ($LinDate->ToWithTime($currentTime, $Task_AllTime, $Task_AddTime)) {
                    $SqlTwo = "AND Back_DoTime = '" . $Task_NowData . "' AND Back_DoNum = '1'";
                    $Task_DoNow = "YES";
                }
            } else {
                $SqlTwo = "AND Back_DoNum = '0'";
                $Task_DoNow = "YES";
            }
            if ($Task_DoNow == "YES") {
                $checkSql = "SELECT * FROM tvbox_tasks WHERE BoxId = ? AND Back_TaskId = ? " . $SqlTwo;
                $executed = $LinDB->GetRow($checkSql, [$BoxId, $Task_ID]);
                if (!$executed) {
                    $result = getBashListJson($Task_ID, $task['Task_BashId'], $BoxId);
                    $LinDB->CloseConn();
                    die($result);
                }
            }
        }
    }
    $LinDB->CloseConn();
    die($LinJson->err("当前没有新的任务"));
} else {
    $LinDB->CloseConn();
    die($LinJson->err("没有找到该设备的任务"));
}

/**
 * 获取任务的bash信息并转换为JSON
 * @param int $taskId 任务ID
 * @param int $bashId bash命令ID
 * @param string $boxId 设备ID
 * @return string
 */
function getBashListJson($taskId, $bashId, $boxId) {
    extract($GLOBALS, EXTR_SKIP);
    // 查询bash命令详情
    $bash = $LinDB->Sel("SELECT * FROM tvbox_bash WHERE Id = ? LIMIT 1", [$bashId]);
    if (!$bash) {
        return $LinJson->err("未找到对应的任务!");
    }
    $fileInfo = [];
    if ($bash['Bash_Types'] == 1 || $bash['Bash_Types'] == 2) {
        $fileInfo[] = [
            'id' => $bashId,
            'name' => $bash['Bash_Name'],
            'type' => $bash['Bash_Types']
        ];
    }
    //安装APK
    if ($bash['Bash_Types'] == 3) {
        // APK安装类型
        if (!empty($bash['Bash_APK'])) {
            $apkSql = "SELECT * FROM store_list WHERE Id IN (" . $bash['Bash_APK'] . ") ";
            $apkList = $LinDB->GetAll($apkSql);
            if (!empty($apkList)) {
                foreach ($apkList as $apk) {
                    $fileInfo[] = [
                        'type' => $bash['Bash_Types'],
                        'name' => $apk['Store_Name'],
                        'url' => $apk['Store_FliePath'],
                        'package' => $apk['Store_BaoMing'],
                        'version' => $apk['Store_Version'],
                        'fliesize' => $apk['Store_FlieSize']
                    ];
                }
            }
        }
    }
    //卸载应用
    if ($bash['Bash_Types'] == 4) {
        $fileInfo[] = [
            'id' => $bashId,
            'type' => $bash['Bash_Types'],
            'package' => $bash['Bash_Content']
        ];
    }
    $task = $LinDB->Sel("SELECT * FROM tvbox_task WHERE Id = ? LIMIT 1", [$taskId]);
    $responseData = [
        'id' => $taskId,
        'os' => $bash['Bash_OS'],
        'boxid' => $boxId,
        'name' => $task['Task_Name'],
        'power' => $bash['Bash_Power'],
        'donum' => $task['Task_DoNum'],
        'dotime' => $task['Task_DoTime'],
        'list' => $fileInfo
    ];
    $LinDB->CloseConn();
    $KEYString = json_encode($responseData);
    $KEYDATA = $LinKey->Encode($KEYString);
    // 使用LinJson类的ok方法返回成功响应
    return $LinJson->ok("任务获取成功", $KEYDATA);
}
?>