<?php
/**
 * Cron: sync user traffic from x-ui panel (trend line in rep user management).
 * Run every 5 min. Linux: 0/5 * * * * php /path/to/sync_traffic.php
 * Windows: Task Scheduler, run php.exe sync_traffic.php every 5 min.
 */

// اجرا از هر مسیری: پوشهٔ پروژه = همان پوشهٔ این فایل
chdir(__DIR__);
require_once __DIR__ . '/config.php';
require_once __DIR__ . '/api/XrayAPI.php';

echo "=== شروع همگام‌سازی ترافیک ===\n";
echo "زمان: " . date('Y-m-d H:i:s') . "\n\n";

try {
    // دریافت تمام پنل‌های فعال
    $panels = $pdo->query("SELECT * FROM panels WHERE status = 'active'")->fetchAll();
    
    foreach ($panels as $panel) {
        echo "پردازش پنل: {$panel['name']}\n";
        
        try {
            // آماده‌سازی تنظیمات proxy
            $proxy_config = null;
            if (!empty($panel['proxy_host'])) {
                $proxy_config = [
                    'type' => $panel['proxy_type'] ?? 'socks5',
                    'host' => $panel['proxy_host'],
                    'port' => $panel['proxy_port'] ?? 1080,
                    'username' => $panel['proxy_username'] ?? null,
                    'password' => $panel['proxy_password'] ?? null,
                    'use_on_error' => !empty($panel['use_proxy'])
                ];
            }
            
            $xrayAPI = new XrayAPI($panel['url'], $panel['username'], $panel['password'], $proxy_config);
            
            // دریافت لیست inbound ها
            $inbounds_result = $xrayAPI->getInbounds();
            $inbounds = $inbounds_result['obj'] ?? [];
            
            // دریافت کاربران این پنل
            $users = $pdo->prepare("SELECT * FROM reseller_users WHERE panel_id = ?");
            $users->execute([$panel['id']]);
            $users = $users->fetchAll();
            
            foreach ($users as $user) {
                $inbound_id = (int)($user['inbound_id'] ?? 0);
                if ($inbound_id <= 0) continue;

                // شناسه کلاینت برای API: اول xray_user_id، اگر خالی بود از email استفاده می‌کنیم (مثل پنل x-ui)
                $client_id = trim($user['xray_user_id'] ?? '');
                if ($client_id === '' && !empty($user['email'])) {
                    $client_id = trim($user['email']);
                }
                if ($client_id === '') continue;

                try {
                    $stats = $xrayAPI->getClientStats($inbound_id, $client_id);
                    $traffic = isset($stats['obj']) ? $stats['obj'] : $stats;
                    if (!is_array($traffic)) continue;

                    $total_traffic = (int)(($traffic['up'] ?? 0) + ($traffic['down'] ?? 0));

                    $stmt = $pdo->prepare("UPDATE reseller_users SET total_traffic = ? WHERE id = ?");
                    $stmt->execute([$total_traffic, $user['id']]);

                    echo "  ✓ کاربر {$user['email']}: " .
                         number_format($total_traffic / (1024 * 1024 * 1024), 2) . " GB\n";

                    $status = 'active';
                    if (!empty($user['expiry_date']) && strtotime($user['expiry_date']) < time()) {
                        $status = 'expired';
                    } elseif ($user['traffic_limit'] > 0 && $total_traffic >= $user['traffic_limit']) {
                        $status = 'limited';
                    }
                    if (($user['status'] ?? '') !== $status) {
                        $pdo->prepare("UPDATE reseller_users SET status = ? WHERE id = ?")->execute([$status, $user['id']]);
                        echo "    → وضعیت تغییر کرد به: $status\n";
                    }
                } catch (Exception $e) {
                    echo "  ✗ خطا در دریافت آمار کاربر {$user['email']}: " . $e->getMessage() . "\n";
                }
            }
            
            echo "✓ پنل {$panel['name']} با موفقیت پردازش شد\n\n";
            
        } catch (Exception $e) {
            echo "✗ خطا در اتصال به پنل {$panel['name']}: " . $e->getMessage() . "\n\n";
        }
    }
    
    echo "=== همگام‌سازی ترافیک تکمیل شد ===\n";
    
    // به‌روزرسانی ترافیک نمایندگان
    echo "\n=== به‌روزرسانی ترافیک نمایندگان ===\n";
    $reps = $pdo->query("SELECT id FROM representatives")->fetchAll();
    foreach ($reps as $rep) {
        $rep_id = $rep['id'];
        $total_traffic = $pdo->prepare("SELECT SUM(total_traffic) FROM reseller_users WHERE representative_id = ?");
        $total_traffic->execute([$rep_id]);
        $total_traffic = $total_traffic->fetchColumn() ?: 0;
        
        $stmt = $pdo->prepare("UPDATE representatives SET used_traffic = ? WHERE id = ?");
        $stmt->execute([$total_traffic, $rep_id]);
        
        echo "  ✓ نماینده #$rep_id: " . number_format($total_traffic / (1024 * 1024 * 1024), 2) . " GB\n";
    }
    
    echo "\n=== همگام‌سازی کامل شد ===\n";
    
} catch (Exception $e) {
    echo "✗ خطای کلی: " . $e->getMessage() . "\n";
    exit(1);
}
?>
