<?php
/**
 * 到期自动停止脚本
 * 定时任务：每天凌晨1点执行，检查并停止到期的用户网站
 * 
 * 使用方法：
 * 1. 手动执行：php cron/auto_stop_expire.php
 * 2. 宝塔定时任务：每天凌晨1点执行
 */

require_once __DIR__ . '/../MPHX/common.php';

$today = date('Y-m-d');
$now = date('Y-m-d H:i:s');

echo "[{$now}] 开始检查到期用户...\n";

// 获取设置
$settings = array();
$result = $DB->query("SELECT * FROM `expire_settings`");
while ($row = $DB->fetch($result)) {
    $settings[$row['setting_key']] = $row['setting_value'];
}

$expire_pause_days = intval($settings['expire_pause_days'] ?? 0);

// 计算应该停止的截止日期（到期时间 + 宽限期）
$stop_deadline = date('Y-m-d', strtotime("-{$expire_pause_days} days"));

echo "[{$now}] 设置: 到期后 {$expire_pause_days} 天暂停，停止截止日期: {$stop_deadline}\n";

// 获取所有已到期且状态正常的用户（考虑宽限期）
$stop_deadline_escaped = $DB->escape($stop_deadline);
$users = $DB->query("SELECT * FROM `zj` WHERE `dqsj` != '' AND `dqsj` < '{$stop_deadline_escaped}' AND `zt`='正常'");

$stopped_count = 0;
$error_count = 0;
$skipped_count = 0;

while ($user = $DB->fetch($users)) {
    $username = $user['user'];
    $webid = $user['webid'];
    $btid = $user['btid'];
    
    // 计算已过期天数
    $expired_days = floor((strtotime($today) - strtotime($user['dqsj'])) / (60 * 60 * 24));
    
    echo "[{$now}] 处理用户: {$username}, 到期时间: {$user['dqsj']}, 已过期 {$expired_days} 天\n";
    
    // 获取宝塔服务器信息
    $btid_escaped = intval($btid);
    $bt = $DB->get_row("SELECT * FROM `bt` WHERE `id`='{$btid_escaped}'");
    if (!$bt) {
        echo "[{$now}] 错误: 用户 {$username} 的宝塔服务器信息不存在\n";
        $error_count++;
        continue;
    }
    
    // 初始化宝塔API
    $protocol = isset($bt['aqfw']) && $bt['aqfw'] == 'true' ? 'https' : 'http';
    $bt_api = new bt_api();
    $bt_api->BT_PANEL = $protocol . '://' . $bt['ip'] . ':' . $bt['dk'];
    $bt_api->BT_KEY = $bt['key'];
    
    // 停止网站
    $result = $bt_api->ztweb($webid, $username);
    
    if ($result && isset($result['status']) && ($result['status'] === true || $result['status'] === 'true')) {
        // 更新用户状态为已过期
        $DB->query("UPDATE `zj` SET `zt`='已过期' WHERE `id`='{$user['id']}'");
        
        // 发送通知给用户
        $title = "主机已到期停止";
        $grace_info = $expire_pause_days > 0 ? "（宽限期 {$expire_pause_days} 天已过）" : "";
        $content = "您的主机已到期{$grace_info}，到期时间：{$user['dqsj']}，网站服务已自动停止。请及时续费以恢复服务。注意：暂停超过 {$settings['pause_delete_days']} 天后数据将被自动删除。";
        
        // 插入站内通知
        $DB->query("INSERT INTO `notifications` (`user_id`,`type`,`title`,`content`,`is_read`,`create_time`) VALUES ('{$user['id']}','expire','{$title}','{$content}',0,NOW())");
        
        // 记录日志
        logjl($username, '到期自动停止', "主机已到期{$grace_info}，网站已自动停止", true);
        
        echo "[{$now}] 成功: 用户 {$username} 的网站已停止\n";
        $stopped_count++;
    } else {
        $error_msg = isset($result['msg']) ? $result['msg'] : '未知错误';
        echo "[{$now}] 错误: 用户 {$username} 的网站停止失败 - {$error_msg}\n";
        
        // 记录日志
        logjl($username, '到期自动停止失败', "停止网站失败: {$error_msg}", false);
        
        $error_count++;
    }
}

$now = date('Y-m-d H:i:s');
echo "[{$now}] 检查完成: 停止 {$stopped_count} 个网站, 失败 {$error_count} 个\n";
