<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);

require_once '../../vippanneladmin56329803/config.php';

// تابع لاگینگ ساده
function log_msg($msg) {
    echo date('Y-m-d H:i:s') . " - " . $msg . "<br>";
    flush();
}

log_msg("========== شروع تست پنل سنایی ==========");

// دریافت اطلاعات سرور با ID 12
$server_id = 12;

$stmt = $pdo->prepare("
    SELECT asv.*, p.url, p.api_token, p.inbound_id, p.panel_type
    FROM agent_servers asv
    JOIN panels p ON asv.panel_id = p.id
    WHERE asv.id = ?
");
$stmt->execute([$server_id]);
$server = $stmt->fetch(PDO::FETCH_ASSOC);

if (!$server) {
    die("❌ سرویس با ID $server_id یافت نشد!");
}

log_msg("✅ سرویس پیدا شد:");
log_msg("   - Username: " . $server['username']);
log_msg("   - UUID: " . $server['uuid']);
log_msg("   - Panel URL: " . $server['url']);
log_msg("   - Panel Type: " . $server['panel_type']);
log_msg("   - API Token: " . (empty($server['api_token']) ? '❌ خالی است!' : '✅ وجود دارد'));
log_msg("   - Inbound ID: " . $server['inbound_id']);

if (empty($server['api_token'])) {
    die("❌ API Token خالی است! لطفا در جدول panels مقدار api_token را وارد کنید.");
}

if (empty($server['uuid'])) {
    die("❌ UUID خالی است! لطفا در جدول agent_servers مقدار uuid را بررسی کنید.");
}

// ========== تابع درخواست API ==========
function api_request_direct($url, $method = 'GET', $data = null, $api_token = null) {
    log_msg("   📡 درخواست: $method $url");
    
    $ch = curl_init();
    $headers = ["Accept: application/json"];
    
    if ($api_token) {
        $headers[] = "Authorization: Bearer " . $api_token;
        log_msg("   🔑 توکن ارسال شد: " . substr($api_token, 0, 20) . "...");
    }
    
    $options = [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_HTTPHEADER => $headers,
        CURLOPT_FOLLOWLOCATION => true
    ];
    
    if ($method == 'POST' && $data !== null) {
        $options[CURLOPT_POST] = true;
        $options[CURLOPT_POSTFIELDS] = json_encode($data);
        $headers[] = "Content-Type: application/json";
        $options[CURLOPT_HTTPHEADER] = $headers;
    }
    
    curl_setopt_array($ch, $options);
    $response = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $curl_error = curl_error($ch);
    curl_close($ch);
    
    log_msg("   📊 HTTP Code: $http_code");
    
    if ($curl_error) {
        log_msg("   ❌ CURL Error: $curl_error");
        return null;
    }
    
    log_msg("   📦 Response: " . substr($response, 0, 500));
    return json_decode($response, true);
}

// ========== تست 1: دریافت اطلاعات کاربر با UUID ==========
log_msg("<br><strong>🔍 تست 1: دریافت اطلاعات کاربر با UUID</strong>");
$url1 = rtrim($server['url'], '/') . "/panel/api/inbounds/getClientTrafficsById/" . urlencode($server['uuid']);
$result1 = api_request_direct($url1, 'GET', null, $server['api_token']);

if ($result1 && isset($result1['success']) && $result1['success'] === true) {
    log_msg("✅ اطلاعات کاربر دریافت شد!");
    
    $user = isset($result1['obj'][0]) ? $result1['obj'][0] : $result1['obj'];
    
    log_msg("   - Email: " . ($user['email'] ?? 'N/A'));
    log_msg("   - TotalGB: " . ($user['totalGB'] ?? $user['total'] ?? 'N/A'));
    log_msg("   - Up (upload): " . ($user['up'] ?? '0') . " bytes");
    log_msg("   - Down (download): " . ($user['down'] ?? '0') . " bytes");
    log_msg("   - Enable: " . (($user['enable'] ?? false) ? 'فعال' : 'غیرفعال'));
    
    $expiry = ($user['expiryTime'] ?? 0);
    if ($expiry > 0) {
        log_msg("   - Expiry Time: " . date('Y-m-d H:i:s', $expiry / 1000));
    } else {
        log_msg("   - Expiry Time: نامحدود");
    }
    
    // محاسبه مصرف
    $used_bytes = ($user['up'] ?? 0) + ($user['down'] ?? 0);
    $total_bytes = $user['totalGB'] ?? $user['total'] ?? 0;
    $used_gb = round($used_bytes / 1073741824, 2);
    $total_gb = round($total_bytes / 1073741824, 2);
    log_msg("   - مصرف شده: $used_gb GB");
    log_msg("   - حجم کل: $total_gb GB");
    
} else {
    log_msg("❌ خطا در دریافت اطلاعات: " . ($result1['msg'] ?? json_encode($result1)));
}

// ========== تست 2: بررسی API Token با یک درخواست ساده ==========
log_msg("<br><strong>🔍 تست 2: بررسی اعتبار API Token</strong>");
$url2 = rtrim($server['url'], '/') . "/panel/api/inbounds/list";
$result2 = api_request_direct($url2, 'GET', null, $server['api_token']);

if ($result2 && isset($result2['success']) && $result2['success'] === true) {
    log_msg("✅ API Token معتبر است!");
    log_msg("   تعداد inbound ها: " . count($result2['obj'] ?? []));
} else {
    log_msg("❌ API Token نامعتبر است یا دسترسی ندارد!");
    log_msg("   پاسخ: " . json_encode($result2));
}

// ========== تست 3: چک کردن لاگین با username/password (راه جایگزین) ==========
log_msg("<br><strong>🔍 تست 3: بررسی لاگین با username/password (راه جایگزین)</strong>");

// اطلاعات لاگین پنل رو از دیتابیس بگیر
$stmt2 = $pdo->prepare("SELECT username, password FROM panels WHERE id = ?");
$stmt2->execute([$server['panel_id']]);
$panel_login = $stmt2->fetch(PDO::FETCH_ASSOC);

if ($panel_login && !empty($panel_login['username'])) {
    log_msg("   تلاش برای لاگین با username: " . $panel_login['username']);
    
    $login_url = rtrim($server['url'], '/') . "/login";
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $login_url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => http_build_query([
            'username' => $panel_login['username'],
            'password' => $panel_login['password']
        ]),
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_COOKIEJAR => 'cookies.txt',
        CURLOPT_COOKIEFILE => 'cookies.txt',
        CURLOPT_HEADER => true
    ]);
    
    $response = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);
    
    log_msg("   HTTP Code: $http_code");
    if ($http_code == 200) {
        log_msg("   ✅ لاگین موفق بود!");
    } else {
        log_msg("   ❌ لاگین ناموفق!");
    }
} else {
    log_msg("   ⚠️ اطلاعات لاگین پنل در دیتابیس موجود نیست!");
}

log_msg("<br><strong>========== پایان تست ==========</strong>");
?>