<?php
require_once 'vendor/autoload.php';

use RouterOS\Client;
use RouterOS\Config;
use RouterOS\Exceptions\ConnectException;
use RouterOS\Query;

header('Content-Type: text/html; charset=utf-8');

// إعدادات اتصال MikroTik
$config = (new Config())
    ->set('host', '192.168.0.104')
    ->set('user', 'admin')
    ->set('pass', '1234')
    ->set('port', 8728);

try {
    $client = new Client($config);
} catch (ConnectException $e) {
    die('فشل الاتصال بالرواتر: ' . $e->getMessage());
}

// معالجة طلب AJAX
$action = $_GET['action'] ?? '';

switch ($action) {
    case 'count':
        $users = $client->query('/user-manager/user/print')->read();
        echo count($users);
        break;
        
    case 'load':
        $page = intval($_GET['page'] ?? 1);
        $perPage = intval($_GET['per_page'] ?? 100);
        $searchTerm = $_GET['search'] ?? '';
        $sort = explode(',', $_GET['sort'] ?? '1,asc');
        
        // جلب المستخدمين مع إمكانية التصفية
        $query = (new Query('/user-manager/user/print'));
        if ($searchTerm) {
            $query->where('name', $searchTerm);
        }
        
        $users = $client->query($query)->read();
        
        // فرز المستخدمين (يتم الفرز في PHP لأن مكتبة RouterOS لا تدعم الفرز مباشرة)
        usort($users, function($a, $b) use ($sort) {
            $field = $sort[0];
            $direction = $sort[1];
            
            $valueA = match($field) {
                1 => $a['.id'],
                2 => $a['name'],
                4 => $a['limit-bytes-total'] ?? 0,
                default => $a['last-logged-out'] ?? ''
            };
                     
            $valueB = match($field) {
                1 => $b['.id'],
                2 => $b['name'],
                4 => $b['limit-bytes-total'] ?? 0,
                default => $b['last-logged-out'] ?? ''
            };
                     
            return $direction == 'asc' ? $valueA <=> $valueB : $valueB <=> $valueA;
        });
        
        // التقسيم إلى صفحات
        $totalUsers = count($users);
        $offset = ($page - 1) * $perPage;
        $paginatedUsers = array_slice($users, $offset, $perPage);
        
        // توليد HTML للجدول
        $html = '';
        foreach ($paginatedUsers as $user) {
            $status = ($user['disabled'] ?? 'false') == 'true' ? 
                     '<span class="badge bg-danger">معطل</span>' : 
                     '<span class="badge bg-success">نشط</span>';
                     
            $html .= '<tr>
                <td><input type="checkbox" class="form-check-input user-checkbox" value="'.$user['.id'].'"></td>
                <td>'.$user['.id'].'</td>
                <td>'.htmlspecialchars($user['name'] ?? '').'</td>
                <td>'.htmlspecialchars($user['profile'] ?? 'N/A').'</td>
                <td>'.formatBytes($user['limit-bytes-total'] ?? 0).'</td>
                <td>'.formatUptime($user['limit-uptime'] ?? '').'</td>
                <td>'.formatTime($user['last-logged-out'] ?? '').'</td>
                <td>'.$status.'</td>
                <td>
                    <div class="dropdown">
                        <button class="btn btn-sm btn-outline dropdown-toggle" data-bs-toggle="dropdown">
                            <i class="fas fa-cog"></i>
                        </button>
                        <ul class="dropdown-menu">
                            <li><a class="dropdown-item" href="#" onclick="showAddBalanceModal(\''.htmlspecialchars($user['name'] ?? '').'\')">
                                <i class="fas fa-coins me-2"></i>إضافة رصيد
                            </a></li>
                            <li><a class="dropdown-item" href="#" onclick="showFreezeModal(\''.htmlspecialchars($user['name'] ?? '').'\', '.($user['disabled'] == 'true' ? 'true' : 'false').')">
                                <i class="fas '.($user['disabled'] == 'true' ? 'fa-unlock' : 'fa-lock').' me-2"></i>'.
                                ($user['disabled'] == 'true' ? 'إلغاء التجميد' : 'تجميد').'
                            </a></li>
                            <li><hr class="dropdown-divider"></li>
                            <li><a class="dropdown-item text-danger" href="#" onclick="confirmDelete(\''.htmlspecialchars($user['name'] ?? '').'\', \''.$user['.id'].'\')">
                                <i class="fas fa-trash me-2"></i>حذف
                            </a></li>
                        </ul>
                    </div>
                </td>
            </tr>';
        }
        
        echo $html;
        break;
        
    // إجراءات أخرى مثل إضافة رصيد، تجميد، حذف...
    case 'update_balance':
        $username = $_POST['username'] ?? '';
        $amount = $_POST['amount'] ?? 0;
        $unit = $_POST['unit'] ?? 'GB';
        
        // تحويل المقدار إلى بايت
        $bytes = $unit == 'GB' ? $amount * 1024 * 1024 * 1024 : $amount * 1024 * 1024;
        
        $client->query([
            '/user-manager/user/set',
            '=.id=' . $username,
            '=limit-bytes-total=' . $bytes
        ])->read();
        
        echo 'تم تحديث الرصيد بنجاح';
        break;
        
    default:
        $users = $client->query('/user-manager/user/print')->read();
        echo json_encode($users);
}

// دوال مساعدة للتنسيق
function formatBytes($bytes, $precision = 2) {
    if ($bytes == 0) return '0 GB';
    $units = ['B', 'KB', 'MB', 'GB', 'TB'];
    $bytes = max($bytes, 0);
    $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
    $pow = min($pow, count($units) - 1);
    $bytes /= pow(1024, $pow);
    return round($bytes, $precision) . ' ' . $units[$pow];
}

function formatUptime($uptime) {
    if (empty($uptime)) return 'غير محدد';
    return $uptime; // يمكنك تحسين هذا لتحويل الصيغة
}

function formatTime($time) {
    if (empty($time)) return 'لم يتصل';
    return date('Y-m-d H:i', strtotime($time));
}


اريد ان تقوم بعرض البيانات في جدول مع تصميم مناسب عبر css