<?php

declare(strict_types=1);
require_once __DIR__ . '/../app/config/bootstrap.php';
require_once __DIR__ . '/../app/core/Auth.php';
require_once __DIR__ . '/../app/core/AdminLayout.php';
require_once __DIR__ . '/../app/core/Csrf.php';
require_once __DIR__ . '/../app/models/User.php';

Auth::requireAdmin();
$userModel = new User();
$message = null;
$error = null;

if ($_SERVER['REQUEST_METHOD'] === 'POST' && Csrf::validate($_POST['_csrf'] ?? null)) {
    $action = (string)($_POST['action'] ?? 'create');

    if ($action === 'role') {
        $uid = (int)($_POST['user_id'] ?? 0);
        $role = trim((string)($_POST['role'] ?? 'customer'));
        if ($uid > 0 && in_array($role, ['admin', 'manager', 'customer'], true)) {
            $message = $userModel->setRole($uid, $role) ? 'نقش به‌روز شد.' : 'خطا در به‌روزرسانی.';
        } else {
            $error = 'نقش نامعتبر است.';
        }
    } elseif ($action === 'suspend') {
        $uid = (int)($_POST['user_id'] ?? 0);
        $s = isset($_POST['suspended']);
        if ($uid > 0) {
            $message = $userModel->setSuspended($uid, $s) ? 'وضعیت کاربر ذخیره شد.' : 'خطا.';
        }
    } else {
        $fullName = trim((string)($_POST['full_name'] ?? ''));
        $username = trim((string)($_POST['username'] ?? ''));
        $password = (string)($_POST['password'] ?? '');
        $role = trim((string)($_POST['role'] ?? 'customer'));
        $email = trim((string)($_POST['email'] ?? ''));
        $phone = trim((string)($_POST['phone'] ?? ''));
        $allowedRoles = ['admin', 'manager', 'customer'];

        if ($fullName === '' || $username === '' || strlen($password) < 6 || !in_array($role, $allowedRoles, true)) {
            $error = 'اطلاعات نامعتبر است. رمز باید حداقل ۶ کاراکتر باشد.';
        } else {
            try {
                $created = $userModel->create($fullName, $username, $password, $role, $email ?: null, $phone ?: null);
                $message = $created ? 'کاربر با موفقیت ایجاد شد.' : 'ایجاد کاربر انجام نشد.';
            } catch (Throwable $e) {
                $error = 'نام کاربری تکراری است یا خطای دیتابیس رخ داده است.';
            }
        }
    }
}

$users = $userModel->all(500);
?>
<!doctype html>
<html lang="fa" dir="rtl">

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="<?= htmlspecialchars(assetPath('/assets/css/admin.css')) ?>">
    <title>مدیریت کاربران</title>
</head>

<body>
    <div class="admin-wrap">
        <?php renderAdminSidebar('users'); ?>
        <main class="content">
            <h1>مدیریت کاربران</h1><?php if ($message): ?><p class="admin-flash ok"><?= htmlspecialchars($message) ?></p><?php endif; ?><?php if ($error): ?><p class="admin-flash err"><?= htmlspecialchars($error) ?></p><?php endif; ?>
            <h2>کاربر جدید</h2>
            <form method="post" class="admin-form">
                <input type="hidden" name="_csrf" value="<?= htmlspecialchars(Csrf::token()) ?>">
                <input type="hidden" name="action" value="create">
                <input name="full_name" placeholder="نام و نام خانوادگی" required>
                <input name="username" placeholder="نام کاربری" required>
                <input name="email" type="email" placeholder="ایمیل (اختیاری)">
                <input name="phone" placeholder="تلفن (اختیاری)">
                <input name="password" type="password" placeholder="رمز عبور (حداقل ۶ کاراکتر)" required>
                <select name="role">
                    <option value="customer">مشتری</option>
                    <option value="manager">سرپرست</option>
                    <option value="admin">مدیر</option>
                </select>
                <button type="submit">افزودن کاربر</button>
            </form>
            <h2>فهرست</h2>
            <table class="admin-table">
                <thead>
                    <tr>
                        <th>#</th>
                        <th>نام</th>
                        <th>نام کاربری</th>
                        <th>ایمیل</th>
                        <th>تلفن</th>
                        <th>نقش</th>
                        <th>کیف پول</th>
                        <th>مسدود</th>
                        <th>عملیات</th>
                    </tr>
                </thead>
                <tbody><?php foreach ($users as $u): ?><tr>
                            <td><?= (int)$u['id'] ?></td>
                            <td><?= htmlspecialchars((string)$u['full_name']) ?></td>
                            <td><?= htmlspecialchars((string)$u['username']) ?></td>
                            <td><?= htmlspecialchars((string)($u['email'] ?? '')) ?></td>
                            <td><?= htmlspecialchars((string)($u['phone'] ?? '')) ?></td>
                            <td>
                                <form method="post" class="inline-form">
                                    <input type="hidden" name="_csrf" value="<?= htmlspecialchars(Csrf::token()) ?>">
                                    <input type="hidden" name="action" value="role">
                                    <input type="hidden" name="user_id" value="<?= (int)$u['id'] ?>">
                                    <select name="role" onchange="this.form.submit()">
                                        <option value="customer" <?= ($u['role'] ?? '') === 'customer' ? 'selected' : '' ?>>customer</option>
                                        <option value="manager" <?= ($u['role'] ?? '') === 'manager' ? 'selected' : '' ?>>manager</option>
                                        <option value="admin" <?= ($u['role'] ?? '') === 'admin' ? 'selected' : '' ?>>admin</option>
                                    </select>
                                </form>
                            </td>
                            <td><?= number_format((float)($u['wallet_balance'] ?? 0)) ?></td>
                            <td><?= !empty($u['suspended']) ? 'بله' : 'خیر' ?></td>
                            <td>
                                <form method="post" class="inline-form">
                                    <input type="hidden" name="_csrf" value="<?= htmlspecialchars(Csrf::token()) ?>">
                                    <input type="hidden" name="action" value="suspend">
                                    <input type="hidden" name="user_id" value="<?= (int)$u['id'] ?>">
                                    <label class="checkbox-inline"><input type="checkbox" name="suspended" value="1" <?= !empty($u['suspended']) ? 'checked' : '' ?> onchange="this.form.submit()"> مسدود</label>
                                </form>
                            </td>
                        </tr><?php endforeach; ?></tbody>
            </table>
        </main>
    </div>
    <script src="<?= htmlspecialchars(assetPath('/assets/js/admin.js')) ?>" defer></script>
</body>

</html>
<?php Performance::finish('admin.users'); ?>
