<?php
// تنظیمات نمایش خطا (برای جلوگیری از خرابی خروجی Base64 کلاینت)
error_reporting(E_ALL & ~E_DEPRECATED & ~E_NOTICE & ~E_WARNING);
ini_set('display_errors', 0);

include "../baseInfo.php";
include "../config.php";

$connection = new mysqli('localhost', $dbUserName, $dbPassword, $dbName);
if($connection->connect_error){
    exit("error " . $connection->connect_error);  
}
$connection->set_charset("utf8mb4");

$token = isset($_GET['token']) ? trim($_GET['token']) : null;

if(!empty($token) && strlen($token) >= 16 && strlen($token) <= 50){
    // 1. دریافت اطلاعات سفارش از دیتابیس ربات
    $stmt = $connection->prepare("SELECT * FROM `orders_list` WHERE `token` = ? OR `uuid` = ?");
    $stmt->bind_param("ss", $token, $token);
    $stmt->execute();
    $info = $stmt->get_result()->fetch_assoc();
    $stmt->close();
    
    if (!$info) {
        http_response_code(404);
        exit("Subscription Not Found");
    }
    
    $remark = $info['remark'];
    $server_id = $info['server_id'];
    
    // 2. دریافت اطلاعات و API Token سرور
    $stmt = $connection->prepare("SELECT * FROM `server_config` WHERE `id` = ?");
    $stmt->bind_param("i", $server_id);
    $stmt->execute();
    $server_info = $stmt->get_result()->fetch_assoc();
    $stmt->close();
    
    if(!$server_info) exit("Server Config Error");
    
    $serverType = $server_info['type'];
    $panelUrl = rtrim($server_info['panel_url'], '/');
    $apiToken = trim($server_info['password']);

    if($serverType == "marzban"){
        header("Location: " . $panelUrl . "/sub/" . $token);
        exit();
    }

    // ۳. ارتباط با درگاه رسمی کلاینت‌محور سنایی نسخه 3.1.0 برای واکشی مصرف کلاینت
    // ریمارک را تمیز کرده تا ایمیل فابریک ساخته شده در پنل به دست بیاید
    $cleanEmailRemark = preg_replace("/\(📊.+-.+\|📅.+\)/", "", $remark);
    $finalEmail = $cleanEmailRemark . "@tg.com";
    
    $trafficApiUrl = $panelUrl . '/panel/api/clients/traffic/' . urlencode($finalEmail);
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $trafficApiUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 8);
    curl_setopt($ch, CURLOPT_TIMEOUT, 8);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept: application/json', 'Authorization: Bearer ' . $apiToken]);
    $raw_response = curl_exec($ch);
    $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    $trafficDecoded = json_decode($raw_response, true);
    $found = false;
    $up = 0; $down = 0; $totalBytes = 0;

    if (($http_code == 200 || $http_code == 201) && isset($trafficDecoded['success']) && $trafficDecoded['success'] == true) {
        $found = true;
        $clientData = $trafficDecoded['obj'];
        $up = $clientData['up']; $down = $clientData['down']; $totalBytes = $clientData['total'];
    }

    // ۴. صید آنی و زنده لینک‌های اتصال مستقیماً از وب‌سرویس رسمی پنل سنایی (بای‌پَس دیتابیس)
    $configLinks = [];
    $subUrl = $panelUrl . "/panel/api/clients/links/" . urlencode($finalEmail);
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $subUrl);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HTTPHEADER, ['Accept: application/json', 'Authorization: Bearer ' . $apiToken]);
    $subResponse = curl_exec($ch);
    curl_close($ch);
    
    $subDecoded = json_decode($subResponse, true);
    if (isset($subDecoded['success']) && $subDecoded['success'] && is_array($subDecoded['obj'])) {
        $configLinks = $subDecoded['obj'];
    }

    // اگر لینک‌ها از API دریافت نشد، به عنوان زاپاس از فیلد دیتابیس بخواند
    if (empty($configLinks)) {
        $configLinks = json_decode($info['link'], true);
        if (!is_array($configLinks)) {
            $configLinks = !empty($info['link']) ? explode("\n", $info['link']) : [];
        }
    }

    // ۵. محاسبه حجم مصرفی و باقی‌مانده دوره جهت ساخت نام داینامیک کانفیگ‌ها
    $totalUsedGb = round(($up + $down) / 1073741824, 2);
    $totalGb = $totalBytes != 0 ? round($totalBytes / 1073741824, 2) : 0;
    
    $daysLeft = round(($info['expire_date'] - time()) / 86400, 1);
    if($daysLeft < 0) $daysLeft = 0;

    $totalUsedTxt = $totalUsedGb . "GB";
    $totalTxt = $totalBytes != 0 ? $totalGb . "GB" : "نامحدود";
    $daysTxt = $daysLeft . "Days";

    $newRemark = $cleanEmailRemark . "(📊" . $totalUsedTxt . " - " . $totalTxt . "|📅" . $daysTxt . ")";

    // ۶. تزریق اطلاعات مصرف لایو روی ریمارک نهایی تک تک کانفیگ‌ها
    $updatedLinksArray = [];
    if (is_array($configLinks)) {
        foreach($configLinks as $singleLink) {
            $singleLink = trim($singleLink);
            if(empty($singleLink)) continue;

            if(strpos($singleLink, '#') !== false) {
                $basePart = explode('#', $singleLink)[0];
                $updatedLinksArray[] = $basePart . "#" . urlencode($newRemark);
            } else {
                $updatedLinksArray[] = $singleLink . "#" . urlencode($newRemark);
            }
        }
    }

    // ۷. به‌روزرسانی ریمارک در دیتابیس ربات جهت هماهنگی با بخش «کانفیگ‌های من»
    $stmt = $connection->prepare("UPDATE `orders_list` SET `remark` = ? WHERE `token` = ? OR `uuid` = ?");
    $stmt->bind_param("sss", $newRemark, $token, $token);
    $stmt->execute();
    $stmt->close();

    // ۸. خروجی نهایی رمزگذاری شده Base64 معتبر و بدون نقص کلاینت
    if (!empty($updatedLinksArray)) {
        echo base64_encode(implode("\n", $updatedLinksArray));
    } else {
        // زاپاس نهایی برای جلوگیری از صفحه سفید در نرم‌افزار
        $panelHost = parse_url($panelUrl, PHP_URL_HOST);
        echo base64_encode("vless://0000@{$panelHost}:2096?type=tcp#🌐_Subscription_Empty");
    }
    exit();
}

http_response_code(403);
echo "Invalid Token";
?>