<?php
/**
 * 用户退出登录
 * 清除所有SESSION数据和Cookie，确保完全退出
 */
require_once __DIR__ . '/includes/init.php';

if (is_file(__DIR__ . '/includes/session_fallback_helper.php')) {
    require_once __DIR__ . '/includes/session_fallback_helper.php';
}
if (function_exists('ggai_clear_impersonate_resume_cookie')) {
    ggai_clear_impersonate_resume_cookie();
}

// 记录退出日志
$userId = null;
if (isset($_SESSION['user_id'])) {
    $userId = $_SESSION['user_id'];
    try {
        $username = $_SESSION['username'] ?? '未知用户';
        logSystemAction('logout', '用户退出登录', [
            'username' => $username,
            'ip' => getClientIP()
        ], $username, $_SESSION['user_id']);
    } catch (Exception $e) {
        error_log('记录退出日志失败: ' . $e->getMessage());
    }
    
    // 清除数据库中的登录token（仅当前会话/当前设备，避免影响其他浏览器/机器）
    try {
        $db = Database::getInstance()->getConnection();
        $tokenToDelete = $_SESSION['user_login_token'] ?? ($_POST['localStorage_token'] ?? ($_GET['localStorage_token'] ?? null));
        if ($tokenToDelete) {
            $stmt = $db->prepare("DELETE FROM user_login_tokens WHERE token = ?");
            $stmt->execute([$tokenToDelete]);
            error_log("[LOGOUT] 已清除当前token: " . $tokenToDelete);
        } else {
            error_log("[LOGOUT] 未找到当前token，跳过token删除（不影响其他端）");
        }
    } catch (Exception $e) {
        error_log("[LOGOUT] 清除登录token失败: " . $e->getMessage());
    }
}

// 统一日志：用户退出
if (function_exists('log_auth_event')) {
    log_auth_event('user_logout', [
        'reason' => 'explicit_logout',
        'target' => '/login.php?logout=1',
    ]);
}

// 清除所有SESSION数据
$_SESSION = [];

// 清除SESSION Cookie（必须在使用session_destroy之前）
if (ini_get('session.use_cookies')) {
    $params = session_get_cookie_params();
    $cookieName = session_name();
    $cookieDomain = ini_get('session.cookie_domain') ?: $params['domain'];
    
    // 清除当前域 SESSION Cookie
    setcookie($cookieName, '', time() - 3600, $params['path'] ?: '/', '', $params['secure'], $params['httponly']);
    setcookie($cookieName, '', time() - 3600, '/', '', $params['secure'], $params['httponly']);
    // 如果设置了 cookie_domain（.主域名），同步清除该域名下 Cookie（同域子域共享时必须清）
    if (!empty($cookieDomain)) {
        setcookie($cookieName, '', time() - 3600, $params['path'] ?: '/', $cookieDomain, $params['secure'], $params['httponly']);
        setcookie($cookieName, '', time() - 3600, '/', $cookieDomain, $params['secure'], $params['httponly']);
    }
}

// 清除用户 token Cookie（仅当前域/共享域）
if (ini_get('session.use_cookies')) {
    $params = session_get_cookie_params();
    $cookieDomain = ini_get('session.cookie_domain') ?: $params['domain'];
    setcookie('user_login_token', '', time() - 3600, '/', '');
    if (!empty($cookieDomain)) {
        setcookie('user_login_token', '', time() - 3600, '/', $cookieDomain);
    }
}

// 销毁SESSION
session_destroy();

// 输出JavaScript清除localStorage（在重定向前执行）
echo '<script>
(function(){
    if(typeof(Storage) !== "undefined") {
        try {
            localStorage.removeItem("user_login_token");
            localStorage.removeItem("user_id");
            localStorage.removeItem("user_login_time");
            localStorage.removeItem("user_token_expiry");
            console.log("已清除localStorage登录信息");
        } catch(e) {
            console.error("清除localStorage失败:", e);
        }
    }
})();
</script>';

// 重定向到登录页
header('Location: /login.php?logout=1');
exit; 