<?php
// تفعيل عرض الأخطاء لغرض التطوير
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

$pageTitle = 'إضافة مستخدم جديد';
include '../../includes/header.php';

// التحقق من تسجيل الدخول والصلاحية
checkLogin();
if (!hasPermission('create_users')) {
    $_SESSION['error_message'] = 'ليس لديك صلاحية لإضافة مستخدمين جدد.';
    header('Location: index.php');
    exit();
}

$db = getDB();
$errors = [];
$formData = [];
$employees = [];
$roles = [];

try {
    // جلب قائمة الموظفين الذين لا يملكون حساب مستخدم بعد
    $employees = $db->select("
        SELECT id, full_name
        FROM employees
        WHERE user_id IS NULL
        ORDER BY full_name
    ");
    
    // الحصول على قائمة الأدوار
    if (hasPermission('manage_user_roles')) {
        $roles = $db->select("SELECT * FROM roles ORDER BY role_name");
    }
} catch (Exception $e) {
    error_log("Database error fetching data: " . $e->getMessage());
    $errors['general'] = 'حدث خطأ في قاعدة البيانات أثناء جلب البيانات.';
}

// معالجة بيانات النموذج عند الإرسال
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $formData = [
        'employee_id' => $_POST['employee_id'] ?? null,
        'username' => trim($_POST['username'] ?? ''),
        'email' => trim($_POST['email'] ?? ''),
        'password' => $_POST['password'] ?? '',
        'confirm_password' => $_POST['confirm_password'] ?? '',
        'is_active' => isset($_POST['is_active']) ? 1 : 0,
        'roles' => $_POST['roles'] ?? []
    ];
    
    // ⚡️ التحقق الإجباري من الموظف
    if (empty($formData['employee_id'])) {
        $errors['employee_id'] = 'ربط المستخدم بموظف إجباري.';
    } else {
        $selectedEmployee = $db->selectOne("SELECT full_name FROM employees WHERE id = ?", [$formData['employee_id']]);
        if (!$selectedEmployee) {
            $errors['employee_id'] = 'الموظف المحدد غير موجود.';
        } else {
            $formData['full_name'] = $selectedEmployee['full_name'];
        }
    }

    // ⚡️ التحقق الإجباري من اسم المستخدم
    if (empty($formData['username'])) {
        $errors['username'] = 'اسم المستخدم مطلوب.';
    } elseif (strlen($formData['username']) < 3) {
        $errors['username'] = 'اسم المستخدم يجب أن يكون 3 أحرف على الأقل.';
    }
    
    // ⚡️ التحقق الإجباري من البريد
    if (empty($formData['email'])) {
        $errors['email'] = 'البريد الإلكتروني مطلوب.';
    } elseif (!filter_var($formData['email'], FILTER_VALIDATE_EMAIL)) {
        $errors['email'] = 'البريد الإلكتروني غير صحيح.';
    }
    
    // ⚡️ التحقق الإجباري من كلمة المرور
    if (empty($formData['password'])) {
        $errors['password'] = 'كلمة المرور مطلوبة.';
    } elseif (strlen($formData['password']) < (defined('PASSWORD_MIN_LENGTH') ? PASSWORD_MIN_LENGTH : 6)) {
        $errors['password'] = 'كلمة المرور قصيرة جداً.';
    }
    
    if ($formData['password'] !== $formData['confirm_password']) {
        $errors['confirm_password'] = 'تأكيد كلمة المرور غير متطابق.';
    }

    // ⚡️ التحقق الإجباري من الصلاحيات (الأدوار)
    if (empty($formData['roles'])) {
        $errors['roles'] = 'يجب اختيار صلاحية واحدة على الأقل.';
    }
    
    // التحقق من عدم تكرار البيانات
    if (empty($errors['username'])) {
        $existingUser = $db->selectOne("SELECT id FROM users WHERE username = ?", [$formData['username']]);
        if ($existingUser) { $errors['username'] = 'اسم المستخدم موجود بالفعل.'; }
    }
    
    if (empty($errors['email'])) {
        $existingEmail = $db->selectOne("SELECT id FROM users WHERE email = ?", [$formData['email']]);
        if ($existingEmail) { $errors['email'] = 'البريد الإلكتروني موجود بالفعل.'; }
    }
    
    // تنفيذ الحفظ إذا لم توجد أخطاء
    if (empty($errors)) {
        try {
            $db->beginTransaction();
            $hashedPassword = password_hash($formData['password'], PASSWORD_DEFAULT);
            $userId = $db->insert(
                "INSERT INTO users (employee_id, username, email, full_name, password, is_active, created_by, created_at) 
                 VALUES (?, ?, ?, ?, ?, ?, ?, NOW())",
                [$formData['employee_id'], $formData['username'], $formData['email'], $formData['full_name'], $hashedPassword, $formData['is_active'], $_SESSION['user_id']]
            );
            
            if ($userId) {
                $db->update("UPDATE employees SET user_id = ? WHERE id = ?", [$userId, $formData['employee_id']]);
                foreach ($formData['roles'] as $roleId) {
                    $db->insert("INSERT INTO user_roles (user_id, role_id) VALUES (?, ?)", [$userId, $roleId]);
                }
            }
            
            $db->commit();
            $_SESSION['success_message'] = 'تم إنشاء المستخدم بنجاح!';
            header('Location: index.php');
            exit();
        } catch (Exception $e) {
            $db->rollback();
            $errors['general'] = 'حدث خطأ في إنشاء المستخدم: ' . $e->getMessage();
        }
    }
}
?>

<div class="content-area">
    <div class="page-header">
        <div class="d-flex justify-content-between align-items-center">
            <div>
                <h2 class="page-title">إضافة مستخدم جديد</h2>
                <p class="page-subtitle">كافة الحقول أدناه إجبارية لضمان أمان النظام.</p>
            </div>
            <a href="index.php" class="btn btn-outline-secondary">
                <i class="fas fa-arrow-right me-2"></i>العودة إلى القائمة
            </a>
        </div>
    </div>

    <div class="row">
        <div class="col-lg-8">
            <div class="card shadow-sm">
                <div class="card-header bg-white">
                    <h5 class="card-title mb-0">معلومات المستخدم</h5>
                </div>
                <div class="card-body">
                    <?php if (isset($errors['general'])): ?>
                        <div class="alert alert-danger"><?php echo htmlspecialchars($errors['general']); ?></div>
                    <?php endif; ?>
                    
                    <form method="POST" action="" id="addUserForm">
                        <div class="form-group mb-4">
                            <label for="employee_id" class="form-label fw-bold">ربط بموظف *</label>
                            <select class="form-control select2 <?php echo isset($errors['employee_id']) ? 'is-invalid' : ''; ?>" id="employee_id" name="employee_id" required>
                                <option value="">-- اختر موظفًا --</option>
                                <?php if (!empty($employees)): ?>
                                    <?php foreach ($employees as $employee): ?>
                                        <option value="<?php echo htmlspecialchars($employee['id']); ?>" data-full-name="<?php echo htmlspecialchars($employee['full_name']); ?>" <?php echo ($formData['employee_id'] ?? '') == $employee['id'] ? 'selected' : ''; ?>>
                                            <?php echo htmlspecialchars($employee['full_name']); ?>
                                        </option>
                                    <?php endforeach; ?>
                                <?php endif; ?>
                            </select>
                            <?php if (isset($errors['employee_id'])): ?>
                                <div class="invalid-feedback"><?php echo $errors['employee_id']; ?></div>
                            <?php endif; ?>
                        </div>

                        <div class="row">
                    <div class="col-md-6 mb-3">
    <label for="username" class="form-label fw-bold">اسم المستخدم *</label>
    <input type="text" 
           class="form-control <?php echo isset($errors['username']) ? 'is-invalid' : ''; ?>" 
           id="username" 
           name="username" 
           value="<?php echo htmlspecialchars($formData['username'] ?? ''); ?>" 
           required 
           placeholder="اكتب الحروف هنا..."
           
           /* 1. منع الأرقام أثناء الضغط على المفاتيح */
           onkeypress="return (event.charCode < 48 || event.charCode > 57) && (event.charCode < 1632 || event.charCode > 1641)"
           
           /* 2. تنظيف النص فوراً في حال اللصق (Paste) أو الكتابة السريعة */
           oninput="this.value = this.value.replace(/[0-9٠-٩]/g, '')">

    <?php if (isset($errors['username'])): ?>
        <div class="invalid-feedback"><?php echo $errors['username']; ?></div>
    <?php endif; ?>
</div>
                            <div class="col-md-6 mb-3">
                                <label for="email" class="form-label fw-bold">البريد الإلكتروني *</label>
                                <input type="email" class="form-control <?php echo isset($errors['email']) ? 'is-invalid' : ''; ?>" id="email" name="email" value="<?php echo htmlspecialchars($formData['email'] ?? ''); ?>" required placeholder="user@domain.com">
                                <?php if (isset($errors['email'])): ?>
                                    <div class="invalid-feedback"><?php echo $errors['email']; ?></div>
                                <?php endif; ?>
                            </div>
                        </div>
                        
                        <div class="form-group mb-3">
                            <label for="full_name_display" class="form-label fw-bold text-muted">الاسم الكامل (تلقائي)</label>
                            <input type="text" class="form-control bg-light" id="full_name_display" value="<?php echo htmlspecialchars($formData['full_name'] ?? ''); ?>" readonly disabled>
                        </div>
                        
                        <div class="row">
                            <div class="col-md-6 mb-3">
                                <label for="password" class="form-label fw-bold">كلمة المرور *</label>
                                <input type="password" class="form-control <?php echo isset($errors['password']) ? 'is-invalid' : ''; ?>" id="password" name="password" required>
                                <?php if (isset($errors['password'])): ?>
                                    <div class="invalid-feedback"><?php echo $errors['password']; ?></div>
                                <?php endif; ?>
                            </div>
                            <div class="col-md-6 mb-3">
                                <label for="confirm_password" class="form-label fw-bold">تأكيد كلمة المرور *</label>
                                <input type="password" class="form-control <?php echo isset($errors['confirm_password']) ? 'is-invalid' : ''; ?>" id="confirm_password" name="confirm_password" required>
                                <?php if (isset($errors['confirm_password'])): ?>
                                    <div class="invalid-feedback"><?php echo $errors['confirm_password']; ?></div>
                                <?php endif; ?>
                            </div>
                        </div>

                        <div class="form-group mb-4">
                            <div class="form-check form-switch">
                                <input class="form-check-input" type="checkbox" id="is_active" name="is_active" <?php echo ($formData['is_active'] ?? 1) ? 'checked' : ''; ?>>
                                <label class="form-check-label" for="is_active">تفعيل حساب المستخدم فوراً</label>
                            </div>
                        </div>

                        <?php if (!empty($roles)): ?>
                        <div class="card mb-4 <?php echo isset($errors['roles']) ? 'border-danger' : 'bg-light border-0'; ?>">
                            <div class="card-body">
                                <label class="form-label fw-bold mb-3">تعيين الصلاحيات (يجب اختيار دور واحد على الأقل) *</label>
                                <?php if (isset($errors['roles'])): ?>
                                    <div class="text-danger small mb-2"><i class="fas fa-exclamation-triangle me-1"></i> <?php echo $errors['roles']; ?></div>
                                <?php endif; ?>
                                <div class="row">
                                    <?php foreach ($roles as $role): ?>
                                    <div class="col-md-6 mb-2">
                                        <div class="form-check">
                                            <input class="form-check-input role-checkbox" type="checkbox" id="role_<?php echo $role['id']; ?>" name="roles[]" value="<?php echo $role['id']; ?>" <?php echo in_array($role['id'], $formData['roles'] ?? []) ? 'checked' : ''; ?>>
                                            <label class="form-check-label" for="role_<?php echo $role['id']; ?>">
                                                <?php echo htmlspecialchars($role['role_name']); ?>
                                            </label>
                                        </div>
                                    </div>
                                    <?php endforeach; ?>
                                </div>
                            </div>
                        </div>
                        <?php endif; ?>
                        
                        <div class="d-flex gap-2">
                            <button type="submit" class="btn btn-primary px-4" id="submitBtn">
                                <i class="fas fa-save me-2"></i>حفظ بيانات المستخدم
                            </button>
                            <a href="index.php" class="btn btn-light px-4">إلغاء</a>
                        </div>
                    </form>
                </div>
            </div>
        </div>
        
        <div class="col-lg-4">
            <div class="card shadow-sm border-start border-primary border-4">
                <div class="card-header bg-white">
                    <h5 class="card-title mb-0"><i class="fas fa-lightbulb text-warning me-2"></i>إرشادات هامة</h5>
                </div>
                <div class="card-body">
                    <ul class="list-unstyled mb-0 text-danger fw-bold">
                        <li class="mb-3 d-flex align-items-start">
                            <i class="fas fa-exclamation-circle mt-1 me-2"></i>
                            <span>جميع الحقول المميزة بعلامة (*) هي حقول إجبارية.</span>
                        </li>
                        <li class="mb-3 d-flex align-items-start">
                            <i class="fas fa-exclamation-circle mt-1 me-2"></i>
                            <span>يجب اختيار صلاحية واحدة على الأقل للمستخدم لتتمكن من الحفظ.</span>
                        </li>
                    </ul>
                </div>
            </div>
        </div>
    </div>
</div>

<link href="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/css/select2.min.css" rel="stylesheet" />
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/select2@4.1.0-rc.0/dist/js/select2.min.js"></script>

<script>
$(document).ready(function() {
    // تفعيل Select2
    $('#employee_id').select2({
        width: '100%',
        language: "ar",
        dir: "rtl"
    });
    
    // تحديث الاسم الكامل للعرض
    $('#employee_id').on('change', function() {
        const selectedOption = $(this).find('option:selected');
        const fullName = selectedOption.data('full-name') || '';
        $('#full_name_display').val(fullName);
    });

    // تأكيد كلمة المرور لحظياً
    $('#confirm_password').on('keyup', function() {
        const password = $('#password').val();
        const confirm = $(this).val();
        if (password !== confirm) {
            $(this).addClass('is-invalid');
        } else {
            $(this).removeClass('is-invalid').addClass('is-valid');
        }
    });

    // ⚡️ منع إرسال النموذج إذا لم يتم اختيار أي صلاحية (JavaScript Validation)
    $('#addUserForm').on('submit', function(e) {
        let checkedRoles = $('.role-checkbox:checked').length;
        if (checkedRoles === 0) {
            e.preventDefault();
            alert('خطأ: يجب اختيار دور أو صلاحية واحدة على الأقل للمستخدم.');
            $('.card.bg-light').addClass('border border-danger');
            return false;
        }
    });
});
</script>

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