<?php
// فایل تست اتصال به پنل سرور جهت دیباگ ارور 404
header('Content-Type: text/html; charset=utf-8');
echo "<h1>شروع تست ارتباط با پنل سرور</h1>";

echo "<h3>تست دسترسی نوشتن پوشه‌های هاست</h3>";
echo "پوشه pay: <b>" . (is_writable(__DIR__ . '/pay') ? '✅ قابل نوشتن' : '❌ غیر قابل نوشتن') . "</b><br>";
echo "پوشه storage: <b>" . (is_writable(__DIR__ . '/storage') ? '✅ قابل نوشتن' : '❌ غیر قابل نوشتن') . "</b><br>";
echo "پوشه storage/logs: <b>" . (is_writable(__DIR__ . '/storage/logs') ? '✅ قابل نوشتن' : '❌ غیر قابل نوشتن') . "</b><br>";
echo "پوشه storage/cookies: <b>" . (is_writable(__DIR__ . '/storage/cookies') ? '✅ قابل نوشتن' : '❌ غیر قابل نوشتن') . "</b><br>";

include_once 'config.php';

if (!isset($connection)) {
    die("❌ دیتابیس متصل نیست. لطفا فایل config.php را بررسی کنید.");
}

// ۱. پیدا کردن پلن تست رایگان
$stmt = $connection->prepare("SELECT * FROM `server_plans` WHERE `price` = 0 LIMIT 1");
$stmt->execute();
$plan = $stmt->get_result()->fetch_assoc();
$stmt->close();

if (!$plan) {
    echo "⚠️ هیچ پلن تستی (با قیمت 0) در دیتابیس یافت نشد. اولین پلن معمولی فعال را بررسی می‌کنیم:<br>";
    $stmt = $connection->prepare("SELECT * FROM `server_plans` LIMIT 1");
    $stmt->execute();
    $plan = $stmt->get_result()->fetch_assoc();
    $stmt->close();
}

if (!$plan) {
    die("❌ هیچ پلنی در دیتابیس تعریف نشده است.");
}

$server_id = $plan['server_id'];
echo "🔹 پلن یافت شده: <b>" . htmlspecialchars($plan['title']) . "</b> (شناسه پلن: {$plan['id']})<br>";
echo "🔹 شناسه سرور پلن: <b>{$server_id}</b><br>";

// ۲. واکشی تنظیمات سرور
$stmt = $connection->prepare("SELECT * FROM `server_config` WHERE `id` = ?");
$stmt->bind_param("i", $server_id);
$stmt->execute();
$serverConfig = $stmt->get_result()->fetch_assoc();
$stmt->close();

if (!$serverConfig) {
    die("❌ تنظیمات سرور با شناسه {$server_id} در جدول server_config یافت نشد.");
}

$panel_url = rtrim($serverConfig['panel_url'], '/');
$username = $serverConfig['username'];
$password = $serverConfig['password'];
$serverType = $serverConfig['type'];

echo "🔹 نوع پنل: <b>" . htmlspecialchars($serverType) . "</b><br>";
echo "🔹 آدرس پنل در دیتابیس: <code style='background:#eee;padding:2px 5px;'>" . htmlspecialchars($panel_url) . "</code><br>";
echo "🔹 نام کاربری: <b>" . htmlspecialchars(substr($username, 0, 3)) . "***</b> (طول: " . strlen($username) . ")<br>";

// ۳. تست پورت خروجی با fsockopen
$parsed = parse_url($panel_url);
$host = $parsed['host'] ?? '';
$port = $parsed['port'] ?? ($parsed['scheme'] == 'https' ? 443 : 80);

echo "<h3>تست اتصال فایروال هاست (Outbound Connection Test)</h3>";
echo "تلاش برای اتصال به <b>{$host}:{$port}</b> ...<br>";

$t1 = microtime(true);
$fp = @fsockopen($host, $port, $errno, $errstr, 5);
$t2 = microtime(true);
$duration = round(($t2 - $t1) * 1000, 2);

if ($fp) {
    echo "<b style='color:green'>✅ موفقیت‌آمیز! پورت خروجی باز است. (زمان پاسخ: {$duration} میلی‌ثانیه)</b><br>";
    fclose($fp);
} else {
    echo "<b style='color:red'>❌ شکست در اتصال به پورت سرور! خطا: {$errstr} ({$errno}) - احتمالاً فایروال هاست شما این پورت خروجی را مسدود کرده است. (زمان تلاش: {$duration} میلی‌ثانیه)</b><br>";
}

// ۴. تست درخواست GET به صفحه اصلی پنل (با روت اصلی مسیر پسوند)
echo "<h3>تست درخواست GET به صفحه اصلی پنل</h3>";
$panelBaseUrl = $panel_url . '/';
echo "آدرس درخواست: <code>" . htmlspecialchars($panelBaseUrl) . "</code><br>";

$cookieFile = __DIR__ . '/storage/cookies/cookie_test.txt';
$cookieDir = dirname($cookieFile);
if (!is_dir($cookieDir)) {
    @mkdir($cookieDir, 0775, true);
}
if (file_exists($cookieFile)) {
    @unlink($cookieFile);
}

echo "آدرس فایل کوکی: <code>" . htmlspecialchars($cookieFile) . "</code><br>";
echo "آیا پوشه کوکی قابل نوشتن است؟ <b>" . (is_writable($cookieDir) ? 'بله' : 'خیر') . "</b><br>";

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => $panelBaseUrl,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => true,
    CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_TIMEOUT => 15,
    CURLOPT_COOKIEJAR => $cookieFile,
    CURLOPT_COOKIEFILE => $cookieFile
]);

$responseGet = curl_exec($ch);
$httpCodeGet = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlErrGet = curl_error($ch);
curl_close($ch);

echo "کد وضعیت HTTP درخواست GET: <b>{$httpCodeGet}</b><br>";
if ($curlErrGet) {
    echo "<b style='color:red'>خطای cURL: {$curlErrGet}</b><br>";
}

echo "آیا فایل کوکی بعد از GET ساخته شد؟ <b>" . (file_exists($cookieFile) ? 'بله' : 'خیر') . "</b><br>";
if (file_exists($cookieFile)) {
    echo "محتوای فایل کوکی:<br>";
    echo "<pre style='background:#ffe;padding:10px;border:1px solid #ccc;overflow:auto;max-height:100px;'>" . htmlspecialchars(file_get_contents($cookieFile)) . "</pre>";
}

$csrfToken = '';
if ($responseGet) {
    echo "پاسخ کامل GET:<br>";
    echo "<pre style='background:#eef;padding:10px;border:1px solid #ccc;overflow:auto;max-height:400px;'>" . htmlspecialchars($responseGet) . "</pre>";

    // استخراج توکن CSRF
    if (preg_match('/<meta[^>]*name=["\']csrf-token["\'][^>]*content=["\']([^"\']+)["\']/i', $responseGet, $matches)) {
        $csrfToken = $matches[1];
    } elseif (preg_match('/<meta[^>]*content=["\']([^"\']+)["\'][^>]*name=["\']csrf-token["\']/i', $responseGet, $matches)) {
        $csrfToken = $matches[1];
    }
    
    if ($csrfToken) {
        echo "<b style='color:green'>توکن CSRF یافت شد: {$csrfToken}</b><br>";
    } else {
        echo "<b style='color:orange'>⚠️ توکن CSRF در پاسخ یافت نشد!</b><br>";
    }
}

// ۵. تست درخواست HTTP لاگین با cURL (POST)
echo "<h3>تست درخواست POST به صفحه لاگین</h3>";
$loginUrl = $panel_url . '/login';
$ch = curl_init();

$headers = [
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
];
if ($csrfToken) {
    $headers[] = 'X-Csrf-Token: ' . $csrfToken;
}

echo "هدرهای ارسالی POST:<br>";
echo "<pre style='background:#eee;padding:10px;border:1px solid #ccc;'>" . htmlspecialchars(print_r($headers, true)) . "</pre>";

curl_setopt_array($ch, [
    CURLOPT_URL => $loginUrl,
    CURLOPT_POST => true,
    CURLOPT_POSTFIELDS => http_build_query([
        "username" => $username,
        "password" => $password
    ]),
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => true,
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_TIMEOUT => 15,
    CURLOPT_COOKIEJAR => $cookieFile,
    CURLOPT_COOKIEFILE => $cookieFile
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$curlErr = curl_error($ch);
curl_close($ch);

echo "کد وضعیت HTTP لاگین (POST): <b>{$httpCode}</b><br>";
if ($curlErr) {
    echo "<b style='color:red'>خطای cURL: {$curlErr}</b><br>";
}

if ($response) {
    echo "پاسخ دریافتی POST (هدر + متن):<br>";
    echo "<pre style='background:#f4f4f4;padding:10px;border:1px solid #ccc;overflow:auto;max-height:300px;'>" . htmlspecialchars($response) . "</pre>";
} else {
    echo "<b style='color:red'>پاسخ دریافتی کاملاً خالی است!</b><br>";
}

// ۶. تست درخواست API با توکن Bearer (بدون کوکی)
echo "<h3>تست درخواست API با توکن Bearer (بدون نیاز به لاگین و کوکی)</h3>";
$apiUrl = $panel_url . '/panel/api/inbounds/list';
echo "آدرس درخواست API: <code>" . htmlspecialchars($apiUrl) . "</code><br>";

$chApi = curl_init();
$apiHeaders = [
    'Accept: application/json',
    'Authorization: Bearer ' . $password,
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
];

curl_setopt_array($chApi, [
    CURLOPT_URL => $apiUrl,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HEADER => true,
    CURLOPT_HTTPHEADER => $apiHeaders,
    CURLOPT_SSL_VERIFYPEER => false,
    CURLOPT_SSL_VERIFYHOST => false,
    CURLOPT_TIMEOUT => 15
]);

$responseApi = curl_exec($chApi);
$httpCodeApi = curl_getinfo($chApi, CURLINFO_HTTP_CODE);
$curlErrApi = curl_error($chApi);
curl_close($chApi);

echo "کد وضعیت HTTP درخواست API: <b>{$httpCodeApi}</b><br>";
if ($curlErrApi) {
    echo "<b style='color:red'>خطای cURL درخواست API: {$curlErrApi}</b><br>";
}
if ($responseApi) {
    echo "پاسخ دریافتی API:<br>";
    echo "<pre style='background:#efe;padding:10px;border:1px solid #ccc;overflow:auto;max-height:300px;'>" . htmlspecialchars($responseApi) . "</pre>";
} else {
    echo "<b style='color:red'>پاسخ دریافتی API کاملاً خالی است!</b><br>";
}

echo "<h3>پایان تست دیباگ</h3>";

if (file_exists($cookieFile)) {
    @unlink($cookieFile);
}
