<?php
// شروع session قبل از هر چیز
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

require_once '../config.php';

// بررسی لاگین
if (!isLoggedIn()) {
    redirect('../login.php');
}

// بررسی دسترسی ادمین
if (!isAdmin()) {
    setMessage('دسترسی غیرمجاز', 'error');
    redirect('../login.php');
}

$page_title = 'مدیریت کامل پنل';

// دریافت ID پنل
$panel_id = isset($_GET['id']) ? (int)$_GET['id'] : 0;
if ($panel_id === 0) {
    setMessage('پنل انتخاب نشده است', 'error');
    redirect('panels.php');
}

// دریافت اطلاعات پنل
$panel = $pdo->prepare("SELECT * FROM panels WHERE id = ?");
$panel->execute([$panel_id]);
$panel = $panel->fetch();

if (!$panel) {
    setMessage('پنل یافت نشد', 'error');
    redirect('panels.php');
}

// آماده‌سازی تنظیمات 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'])
    ];
}

require_once '../api/XrayAPI.php';

// عملیات‌های مدیریتی
$error_message = null;
$success_message = null;

try {
    $xrayAPI = new XrayAPI($panel['url'], $panel['username'], $panel['password'], $proxy_config);
    
    // دریافت اطلاعات پنل
    $inbounds = $xrayAPI->getInbounds();
    $inbounds_list = $inbounds['obj'] ?? [];
    
    // دریافت آمار ترافیک
    $traffic_stats = $xrayAPI->getDetailedPanelTraffic();
    
    // دریافت آمار سیستم
    $system_stats = null;
    try {
        $system_stats = $xrayAPI->getSystemStats();
    } catch (Exception $e) {
        // ممکن است این endpoint در برخی نسخه‌ها موجود نباشد
    }
    
    // عملیات‌های POST
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $action = $_POST['action'] ?? '';
        
        switch ($action) {
            case 'toggle_inbound':
                $inbound_id = (int)($_POST['inbound_id'] ?? 0);
                $enable = isset($_POST['enable']) && $_POST['enable'] == '1';
                $xrayAPI->toggleInbound($inbound_id, $enable);
                $success_message = 'وضعیت Inbound تغییر کرد';
                // بارگذاری مجدد
                $inbounds = $xrayAPI->getInbounds();
                $inbounds_list = $inbounds['obj'] ?? [];
                break;
                
            case 'toggle_client':
                $inbound_id = (int)($_POST['inbound_id'] ?? 0);
                $client_id = $_POST['client_id'] ?? '';
                $enable = isset($_POST['enable']) && $_POST['enable'] == '1';
                $xrayAPI->toggleClient($inbound_id, $client_id, $enable);
                $success_message = 'وضعیت کلاینت تغییر کرد';
                // بارگذاری مجدد
                $inbounds = $xrayAPI->getInbounds();
                $inbounds_list = $inbounds['obj'] ?? [];
                break;
                
            case 'reset_client_traffic':
                $inbound_id = (int)($_POST['inbound_id'] ?? 0);
                $client_id = $_POST['client_id'] ?? '';
                $xrayAPI->resetClientTraffic($inbound_id, $client_id);
                $success_message = 'ترافیک کلاینت ریست شد';
                // بارگذاری مجدد
                $inbounds = $xrayAPI->getInbounds();
                $inbounds_list = $inbounds['obj'] ?? [];
                $traffic_stats = $xrayAPI->getDetailedPanelTraffic();
                break;
                
            case 'reset_inbound_traffic':
                $inbound_id = (int)($_POST['inbound_id'] ?? 0);
                $xrayAPI->resetInboundTraffic($inbound_id);
                $success_message = 'ترافیک Inbound ریست شد';
                // بارگذاری مجدد
                $inbounds = $xrayAPI->getInbounds();
                $inbounds_list = $inbounds['obj'] ?? [];
                $traffic_stats = $xrayAPI->getDetailedPanelTraffic();
                break;
                
            case 'reset_all_traffic':
                $xrayAPI->resetAllTraffic();
                $success_message = 'ترافیک کل پنل ریست شد';
                // بارگذاری مجدد
                $inbounds = $xrayAPI->getInbounds();
                $inbounds_list = $inbounds['obj'] ?? [];
                $traffic_stats = $xrayAPI->getDetailedPanelTraffic();
                break;
                
            case 'save_inbound_limits':
                $limits = isset($_POST['inbound_limit']) && is_array($_POST['inbound_limit']) ? $_POST['inbound_limit'] : [];
                try {
                    foreach ($limits as $inbound_id => $user_limit) {
                        $inbound_id = (int)$inbound_id;
                        $user_limit = (int)$user_limit;
                        if ($inbound_id > 0) {
                            $stmt = $pdo->prepare("INSERT INTO panel_inbounds (panel_id, inbound_id, user_limit) VALUES (?, ?, ?) ON DUPLICATE KEY UPDATE user_limit = VALUES(user_limit)");
                            $stmt->execute([$panel_id, $inbound_id, $user_limit]);
                        }
                    }
                    $success_message = 'محدودیت اینباندها ذخیره شد';
                } catch (Exception $ex) {
                    $success_message = 'خطا در ذخیره: ' . $ex->getMessage();
                }
                $inbounds = $xrayAPI->getInbounds();
                $inbounds_list = $inbounds['obj'] ?? [];
                break;
        }
    }
    
    // بارگذاری محدودیت هر اینباند در سطح پنل
    $panel_inbound_limits = [];
    try {
        $stmt = $pdo->prepare("SELECT inbound_id, user_limit FROM panel_inbounds WHERE panel_id = ?");
        $stmt->execute([$panel_id]);
        while ($row = $stmt->fetch()) {
            $panel_inbound_limits[(int)$row['inbound_id']] = (int)$row['user_limit'];
        }
    } catch (Exception $e) {
        // جدول ممکن است وجود نداشته باشد
    }
    
} catch (Exception $e) {
    $error_message = 'خطا در اتصال به پنل: ' . $e->getMessage();
    $inbounds_list = [];
    $traffic_stats = ['total' => 0, 'total_up' => 0, 'total_down' => 0, 'inbounds' => []];
    $panel_inbound_limits = [];
}

require_once '../includes/header.php';
?>

<?php if ($error_message): ?>
    <div class="alert alert-danger alert-dismissible fade show">
        <?= htmlspecialchars($error_message) ?>
        <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
    </div>
<?php endif; ?>

<?php if ($success_message): ?>
    <div class="alert alert-success alert-dismissible fade show">
        <?= htmlspecialchars($success_message) ?>
        <button type="button" class="btn-close" data-bs-dismiss="alert"></button>
    </div>
<?php endif; ?>

<div class="card mb-3">
            <div class="card-header d-flex justify-content-between align-items-center">
                <h5 class="mb-0">
                    <i class="bi bi-server"></i> مدیریت پنل: <?= htmlspecialchars($panel['name']) ?>
                </h5>
                <a href="panels.php" class="btn btn-sm btn-secondary">
                    <i class="bi bi-arrow-left"></i> بازگشت
                </a>
            </div>
            <div class="card-body">
                <div class="row">
                    <div class="col-md-3">
                        <div class="card bg-primary text-white">
                            <div class="card-body">
                                <h6>آدرس پنل</h6>
                                <p class="mb-0"><?= htmlspecialchars($panel['url']) ?></p>
                            </div>
                        </div>
                    </div>
                    <div class="col-md-3">
                        <div class="card bg-info text-white">
                            <div class="card-body">
                                <h6>تعداد Inbound ها</h6>
                                <p class="mb-0 h4"><?= count($inbounds_list) ?></p>
                            </div>
                        </div>
                    </div>
                    <div class="col-md-3">
                        <div class="card bg-success text-white">
                            <div class="card-body">
                                <h6>ترافیک کل (آپلود)</h6>
                                <p class="mb-0"><?= number_format($traffic_stats['total_up'] / (1024 * 1024 * 1024), 2) ?> GB</p>
                            </div>
                        </div>
                    </div>
                    <div class="col-md-3">
                        <div class="card bg-warning text-white">
                            <div class="card-body">
                                <h6>ترافیک کل (دانلود)</h6>
                                <p class="mb-0"><?= number_format($traffic_stats['total_down'] / (1024 * 1024 * 1024), 2) ?> GB</p>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>

<div class="card admin-main-card">
            <div class="card-header d-flex justify-content-between align-items-center">
                <h5 class="mb-0">لیست Inbound ها</h5>
                <div>
                    <form method="POST" style="display: inline;" onsubmit="return confirm('آیا مطمئن هستید که می‌خواهید ترافیک کل پنل را ریست کنید؟')">
                        <input type="hidden" name="action" value="reset_all_traffic">
                        <button type="submit" class="btn btn-sm btn-danger">
                            <i class="bi bi-arrow-clockwise"></i> ریست ترافیک کل
                        </button>
                    </form>
                </div>
            </div>
            <div class="card-body">
                <?php if (empty($inbounds_list)): ?>
                    <div class="alert alert-info">
                        <i class="bi bi-info-circle"></i> هیچ Inbound یافت نشد
                    </div>
                <?php else: ?>
                    <?php
                    // برای جلوگیری از شلوغی UI، نمایش لیست کلاینت‌ها به صورت پیش‌فرض خاموش است.
                    // برای نمایش، صفحه را با ?show_clients=1 باز کنید.
                    $show_clients = isset($_GET['show_clients']) && $_GET['show_clients'] == '1';
                    ?>
                    <form method="POST" class="mb-3">
                        <input type="hidden" name="action" value="save_inbound_limits">
                    <div class="table-responsive">
                        <table class="table table-hover">
                            <thead>
                                <tr>
                                    <th>ID</th>
                                    <th>نام</th>
                                    <th>پورت</th>
                                    <th>پروتکل</th>
                                    <th>وضعیت</th>
                                    <th>تعداد کلاینت</th>
                                    <th>ترافیک</th>
                                    <th>حد کاربر پنل</th>
                                    <th>عملیات</th>
                                </tr>
                            </thead>
                            <tbody>
                                <?php foreach ($inbounds_list as $inbound): 
                                    $inbound_traffic = null;
                                    foreach ($traffic_stats['inbounds'] as $t) {
                                        if ($t['id'] == $inbound['id']) {
                                            $inbound_traffic = $t;
                                            break;
                                        }
                                    }
                                    // بعضی نسخه‌ها clients را داخل settings (JSON) برمی‌گردانند نه در ریشه inbound
                                    $clients = [];
                                    if (isset($inbound['clients']) && is_array($inbound['clients'])) {
                                        $clients = $inbound['clients'];
                                    } elseif (!empty($inbound['clients'])) {
                                        // اگر به شکل رشته برگشته باشد
                                        $tmp = json_decode((string)$inbound['clients'], true);
                                        if (is_array($tmp)) $clients = $tmp;
                                    }
                                    if (empty($clients) && isset($inbound['settings'])) {
                                        $settings = is_string($inbound['settings']) ? json_decode($inbound['settings'], true) : $inbound['settings'];
                                        if (is_array($settings) && isset($settings['clients']) && is_array($settings['clients'])) {
                                            $clients = $settings['clients'];
                                        }
                                    }
                                    $clients_count = is_array($clients) ? count($clients) : 0;
                                    $is_enabled = isset($inbound['enable']) ? $inbound['enable'] : true;
                                ?>
                                    <tr>
                                        <td><?= $inbound['id'] ?></td>
                                        <td>
                                            <strong><?= htmlspecialchars($inbound['remark'] ?? 'بدون نام') ?></strong>
                                        </td>
                                        <td><?= $inbound['port'] ?? '-' ?></td>
                                        <td>
                                            <span class="badge bg-primary"><?= htmlspecialchars($inbound['protocol'] ?? '-') ?></span>
                                        </td>
                                        <td>
                                            <?php if ($is_enabled): ?>
                                                <span class="badge bg-success">فعال</span>
                                            <?php else: ?>
                                                <span class="badge bg-danger">غیرفعال</span>
                                            <?php endif; ?>
                                        </td>
                                        <td><?= $clients_count ?></td>
                                        <td>
                                            <?php if ($inbound_traffic): ?>
                                                <small>
                                                    ↑ <?= number_format($inbound_traffic['up'] / (1024 * 1024 * 1024), 2) ?> GB<br>
                                                    ↓ <?= number_format($inbound_traffic['down'] / (1024 * 1024 * 1024), 2) ?> GB<br>
                                                    <strong>کل: <?= number_format($inbound_traffic['total'] / (1024 * 1024 * 1024), 2) ?> GB</strong>
                                                </small>
                                            <?php else: ?>
                                                <span class="text-muted">-</span>
                                            <?php endif; ?>
                                        </td>
                                        <td>
                                            <?php $pid = (int)($inbound['id'] ?? 0); $lim = (int)($panel_inbound_limits[$pid] ?? defaultInboundUserLimit($pdo)); ?>
                                            <input type="number" name="inbound_limit[<?= $pid ?>]" value="<?= $lim ?>" min="0" class="form-control form-control-sm" style="width:80px" placeholder="<?= defaultInboundUserLimit($pdo) ?: '0=نامحدود' ?>" title="حداکثر کاربر کل روی این اینباند">
                                        </td>
                                        <td>
                                            <div class="btn-group btn-group-sm">
                                                <button type="button" class="btn btn-sm btn-<?= $is_enabled ? 'warning' : 'success' ?>" 
                                                        onclick="toggleInbound(<?= $inbound['id'] ?>, <?= $is_enabled ? 'false' : 'true' ?>)">
                                                    <i class="bi bi-toggle-<?= $is_enabled ? 'on' : 'off' ?>"></i>
                                                </button>
                                                <?php if ($inbound_traffic): ?>
                                                    <form method="POST" style="display: inline;" onsubmit="return confirm('آیا مطمئن هستید؟')">
                                                        <input type="hidden" name="action" value="reset_inbound_traffic">
                                                        <input type="hidden" name="inbound_id" value="<?= $inbound['id'] ?>">
                                                        <button type="submit" class="btn btn-sm btn-danger" title="ریست ترافیک">
                                                            <i class="bi bi-arrow-clockwise"></i>
                                                        </button>
                                                    </form>
                                                <?php endif; ?>
                                                <button type="button" class="btn btn-sm btn-info" 
                                                        onclick="showInboundDetails(<?= htmlspecialchars(json_encode($inbound, JSON_UNESCAPED_UNICODE)) ?>)">
                                                    <i class="bi bi-info-circle"></i>
                                                </button>
                                            </div>
                                        </td>
                                    </tr>
                                    
                                    <!-- نمایش کلاینت‌های این Inbound -->
                                    <?php if ($show_clients && !empty($clients) && is_array($clients) && count($clients) > 0): ?>
                                        <tr class="table-light">
                                            <td colspan="9">
                                                <div class="ms-4">
                                                    <strong>کلاینت‌ها:</strong>
                                                    <div class="table-responsive mt-2">
                                                        <table class="table table-sm table-bordered">
                                                            <thead>
                                                                <tr>
                                                                    <th>ایمیل</th>
                                                                    <th>وضعیت</th>
                                                                    <th>ترافیک مصرفی</th>
                                                                    <th>تاریخ انقضا</th>
                                                                    <th>عملیات</th>
                                                                </tr>
                                                            </thead>
                                                            <tbody>
                                                                <?php foreach ($clients as $client): 
                                                                    $client_traffic = null;
                                                                    try {
                                                                        $client_uuid = $client['id'] ?? ($client['uuid'] ?? '');
                                                                        if ($client_uuid !== '') {
                                                                            $client_traffic = $xrayAPI->getClientStats($inbound['id'], $client_uuid);
                                                                        }
                                                                    } catch (Exception $e) {
                                                                        // خطا را نادیده می‌گیریم
                                                                    }
                                                                    $is_client_enabled = isset($client['enable']) ? $client['enable'] : true;
                                                                    $expiry_time = isset($client['expiryTime']) && $client['expiryTime'] > 0 
                                                                        ? $client['expiryTime'] / 1000
                                                                        : null;

                                                                    $total_gb = isset($client['totalGB']) ? (float)$client['totalGB'] : 0;
                                                                    $total_traffic = $total_gb > 0 ? $total_gb * 1024 * 1024 * 1024 : 0;
                                                                    
                                                                    // Fix for API returning bogus large numbers for traffic
                                                                    $up = $client_traffic['up'] ?? 0;
                                                                    $down = $client_traffic['down'] ?? 0;
                                                                    $bogus_traffic_value = 4294967296; // 2^32
                                                                    if ($up >= $bogus_traffic_value) $up = 0;
                                                                    if ($down >= $bogus_traffic_value) $down = 0;
                                                                    $used_traffic = $up + $down;

                                                                    $percentage = 0;
                                                                    if ($total_traffic > 0) {
                                                                        $percentage = round(($used_traffic / $total_traffic) * 100);
                                                                    }

                                                                    $progress_color_class = 'bg-success';
                                                                    if ($percentage > 85) {
                                                                        $progress_color_class = 'bg-danger';
                                                                    } elseif ($percentage > 60) {
                                                                        $progress_color_class = 'bg-warning';
                                                                    }
                                                                ?>
                                                                    <tr>
                                                                        <td><?= htmlspecialchars($client['email'] ?? '-') ?></td>
                                                                        <td>
                                                                            <?php if ($is_client_enabled): ?>
                                                                                <span class="badge bg-success">فعال</span>
                                                                            <?php else: ?>
                                                                                <span class="badge bg-danger">غیرفعال</span>
                                                                            <?php endif; ?>
                                                                        </td>
                                                                        <td>
                                                                            <div class="d-flex align-items-center" style="min-width: 220px;">
                                                                                <span class="text-nowrap" style="width: 75px; text-align: right; font-size: 0.85em;"><?= formatBytes($used_traffic) ?></span>
                                                                                <div class="progress flex-grow-1 mx-2" style="height: 8px;">
                                                                                    <div class="progress-bar <?= $progress_color_class ?>" role="progressbar" style="width: <?= $percentage ?>%;" aria-valuenow="<?= $percentage ?>" aria-valuemin="0" aria-valuemax="100"></div>
                                                                                </div>
                                                                                <span class="text-nowrap" style="width: 50px; font-size: 0.85em;"><?= $total_traffic > 0 ? formatBytes($total_traffic) : '∞' ?></span>
                                                                            </div>
                                                                        </td>
                                                                        <td>
                                                                            <?php if ($expiry_time): ?>
                                                                                <?= date('Y-m-d', $expiry_time) ?>
                                                                                <?php 
                                                                                    $remaining_days = floor(($expiry_time - time()) / (60 * 60 * 24));
                                                                                    if ($remaining_days >= 0) {
                                                                                        echo "<br><span class=\"badge bg-info\">{$remaining_days} روز دیگر</span>";
                                                                                    } else {
                                                                                        echo "<br><span class=\"badge bg-danger\">منقضی شده</span>";
                                                                                    }
                                                                                ?>
                                                                            <?php else: ?>
                                                                                <span class="text-muted">نامحدود</span>
                                                                            <?php endif; ?>
                                                                        </td>
                                                                        <td>
                                                                            <div class="d-flex justify-content-center align-items-center gap-2">
                                                                                <button class="btn btn-icon-action <?= $is_client_enabled ? 'text-success' : 'text-warning' ?>" title="<?= $is_client_enabled ? 'غیرفعال کردن' : 'فعال کردن' ?>" onclick="toggleClient(<?= $inbound['id'] ?>, '<?= htmlspecialchars($client_uuid) ?>', <?= $is_client_enabled ? 'false' : 'true' ?>)">
                                                                                    <i class="bi bi-toggle-<?= $is_client_enabled ? 'on' : 'off' ?>"></i>
                                                                                </button>
                                                                                <form method="POST" class="d-inline" onsubmit="return confirm('آیا از ریست کردن ترافیک این کاربر مطمئن هستید؟')">
                                                                                    <input type="hidden" name="action" value="reset_client_traffic">
                                                                                    <input type="hidden" name="inbound_id" value="<?= $inbound['id'] ?>">
                                                                                    <input type="hidden" name="client_id" value="<?= htmlspecialchars($client_uuid) ?>">
                                                                                    <button type="submit" class="btn btn-icon-action text-info" title="ریست ترافیک">
                                                                                        <i class="bi bi-arrow-clockwise"></i>
                                                                                    </button>
                                                                                </form>
                                                                                <button class="btn btn-icon-action text-primary" title="ویرایش کاربر">
                                                                                    <i class="bi bi-pencil-square"></i>
                                                                                </button>
                                                                                <button class="btn btn-icon-action text-danger" title="حذف کاربر">
                                                                                    <i class="bi bi-trash"></i>
                                                                                </button>
                                                                            </div>
                                                                        </td>
                                                                    </tr>
                                                                <?php endforeach; ?>
                                                            </tbody>
                                                        </table>
                                                    </div>
                                                </div>
                                            </td>
                                        </tr>
                                    <?php endif; ?>
                                <?php endforeach; ?>
                            </tbody>
                        </table>
                    </div>
                        <button type="submit" class="btn btn-primary btn-sm mt-2"><i class="bi bi-check2"></i> ذخیره محدودیت اینباندها</button>
                    </form>
                <?php endif; ?>
            </div>
        </div>

<!-- Modal جزئیات Inbound -->
<div class="modal fade" id="inboundDetailsModal" tabindex="-1">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <h5 class="modal-title">جزئیات Inbound</h5>
                <button type="button" class="btn-close" data-bs-dismiss="modal"></button>
            </div>
            <div class="modal-body" id="inboundDetailsContent">
                <!-- محتوا از طریق JavaScript پر می‌شود -->
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">بستن</button>
            </div>
        </div>
    </div>
</div>

<script>
function toggleInbound(inboundId, enable) {
    const form = document.createElement('form');
    form.method = 'POST';
    form.innerHTML = `
        <input type="hidden" name="action" value="toggle_inbound">
        <input type="hidden" name="inbound_id" value="${inboundId}">
        <input type="hidden" name="enable" value="${enable ? '1' : '0'}">
    `;
    document.body.appendChild(form);
    form.submit();
}

function toggleClient(inboundId, clientId, enable) {
    const form = document.createElement('form');
    form.method = 'POST';
    form.innerHTML = `
        <input type="hidden" name="action" value="toggle_client">
        <input type="hidden" name="inbound_id" value="${inboundId}">
        <input type="hidden" name="client_id" value="${clientId}">
        <input type="hidden" name="enable" value="${enable ? '1' : '0'}">
    `;
    document.body.appendChild(form);
    form.submit();
}

function showInboundDetails(inbound) {
    const content = document.getElementById('inboundDetailsContent');
    content.innerHTML = `
        <div class="row">
            <div class="col-md-6">
                <p><strong>ID:</strong> ${inbound.id}</p>
                <p><strong>نام:</strong> ${inbound.remark || '-'}</p>
                <p><strong>پورت:</strong> ${inbound.port || '-'}</p>
                <p><strong>پروتکل:</strong> ${inbound.protocol || '-'}</p>
            </div>
            <div class="col-md-6">
                <p><strong>وضعیت:</strong> ${inbound.enable ? '<span class="badge bg-success">فعال</span>' : '<span class="badge bg-danger">غیرفعال</span>'}</p>
                <p><strong>Tag:</strong> ${inbound.tag || '-'}</p>
                <p><strong>تعداد کلاینت:</strong> ${inbound.clients ? inbound.clients.length : 0}</p>
            </div>
        </div>
        ${inbound.settings ? '<pre class="mt-3">' + JSON.stringify(JSON.parse(inbound.settings), null, 2) + '</pre>' : ''}
    `;
    new bootstrap.Modal(document.getElementById('inboundDetailsModal')).show();
}
</script>

<?php require_once '../includes/footer.php'; ?>
