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

$pageTitle = 'تعديل المستخدم';
include '../../includes/header.php';

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

$db = getDB();
// استخدام filter_var للتحقق من أن الـ ID رقم صحيح موجب
$user_id = filter_var($_GET['id'] ?? 0, FILTER_VALIDATE_INT);
if (!$user_id) {
    $_SESSION['error_message'] = 'معرف المستخدم غير صحيح.';
    header('Location: index.php');
    exit();
}

$errors = [];
$formData = [];

// جلب بيانات المستخدم المطلوب تعديله
$user = $db->selectOne("SELECT * FROM users WHERE id = ?", [$user_id]);
if (!$user) {
    $_SESSION['error_message'] = 'المستخدم غير موجود';
    header('Location: index.php');
    exit();
}

// جلب قائمة الموظفين: الموظف المرتبط حالياً، وجميع الموظفين غير المرتبطين
$employees = $db->select("
    SELECT id, full_name
    FROM employees
    WHERE user_id IS NULL OR user_id = ?
    ORDER BY full_name
", [$user_id]);

// تعبئة البيانات الأولية للنموذج
$formData['full_name'] = $user['full_name'];
$formData['username'] = $user['username'];
$formData['email'] = $user['email'];
$formData['is_active'] = $user['is_active'];
$formData['employee_id'] = $user['employee_id'];

// **الخطوة الحاسمة: جلب الأدوار الممنوحة حاليًا لهذا المستخدم**
$user_roles_ids = [];
$all_roles = [];
if (hasPermission('manage_user_roles')) {
    $all_roles = $db->select("SELECT id, role_name, description FROM roles ORDER BY role_name");
    $user_roles_ids = $db->select("SELECT role_id FROM user_roles WHERE user_id = ?", [$user_id], 'col');
}

// معالجة تحديث البيانات عند إرسال النموذج
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // تجميع البيانات من النموذج
    $formData['user_id'] = (int)($_POST['user_id'] ?? 0);
    $formData['employee_id'] = empty($_POST['employee_id']) ? null : (int)$_POST['employee_id'];
    $formData['full_name'] = trim($_POST['full_name'] ?? '');
    $formData['username'] = trim($_POST['username'] ?? '');
    $formData['email'] = trim($_POST['email'] ?? '');
    $formData['password'] = $_POST['password'] ?? '';
    $formData['confirm_password'] = $_POST['confirm_password'] ?? '';
    $formData['is_active'] = isset($_POST['is_active']) ? 1 : 0;
    $formData['roles'] = $_POST['roles'] ?? [];
    
    // التحقق من أن حقل ID المستخدم الذي تم إرساله يطابق ID المستخدم في الرابط
    if ($formData['user_id'] !== $user_id) {
        $errors['general'] = 'خطأ في معرّف المستخدم. يرجى المحاولة مرة أخرى.';
    }

    // التحقق من الحقول المطلوبة
    if (empty($formData['full_name'])) {
        $errors['full_name'] = 'الاسم الكامل مطلوب.';
    }
    if (empty($formData['username'])) {
        $errors['username'] = 'اسم المستخدم مطلوب.';
    }
    if (empty($formData['email'])) {
        $errors['email'] = 'البريد الإلكتروني مطلوب.';
    }

    // التحقق من عدم تكرار اسم المستخدم والبريد الإلكتروني (لغير المستخدم الحالي)
    if (empty($errors['username'])) {
        $existingUser = $db->selectOne(
            "SELECT id FROM users WHERE username = ? AND id != ?",
            [$formData['username'], $user_id]
        );
        if ($existingUser) {
            $errors['username'] = 'اسم المستخدم موجود بالفعل.';
        }
    }
    
    if (empty($errors['email'])) {
        $existingEmail = $db->selectOne(
            "SELECT id FROM users WHERE email = ? AND id != ?",
            [$formData['email'], $user_id]
        );
        if ($existingEmail) {
            $errors['email'] = 'البريد الإلكتروني موجود بالفعل.';
        }
    }

    // التحقق من تطابق كلمات المرور الجديدة
    if (!empty($formData['password']) && $formData['password'] !== $formData['confirm_password']) {
        $errors['confirm_password'] = 'كلمة المرور الجديدة وتأكيدها غير متطابقين.';
    }
    
    // في حال عدم وجود أخطاء في البيانات المدخلة، يتم تحديثها في قاعدة البيانات
    if (empty($errors)) {
        try {
            $db->beginTransaction();

            $old_employee_id = $user['employee_id'];
            $new_employee_id = $formData['employee_id'];

 $updateUserQuery = "UPDATE users SET employee_id = ?, full_name = ?, username = ?, email = ?, is_active = ?, created_by = ? WHERE id = ?";
$userParams = [$new_employee_id, $formData['full_name'], $formData['username'], $formData['email'], $formData['is_active'], $_SESSION['user_id'], $user_id];
            
            if (!empty($formData['password'])) {
                $hashedPassword = password_hash($formData['password'], PASSWORD_DEFAULT);
                $updateUserQuery = "UPDATE users SET employee_id = ?, full_name = ?, username = ?, email = ?, password = ?, is_active = ? WHERE id = ?";
                $userParams = [$new_employee_id, $formData['full_name'], $formData['username'], $formData['email'], $hashedPassword, $formData['is_active'], $user_id];
            }
            
            $db->update($updateUserQuery, $userParams);

            if ($old_employee_id !== $new_employee_id) {
                if (!empty($old_employee_id)) {
                    $db->update("UPDATE employees SET user_id = NULL WHERE id = ?", [$old_employee_id]);
                }
                if (!empty($new_employee_id)) {
                    $db->update("UPDATE employees SET user_id = ? WHERE id = ?", [$user_id, $new_employee_id]);
                }
            }

            if (hasPermission('manage_user_roles')) {
                $db->delete("DELETE FROM user_roles WHERE user_id = ?", [$user_id]);
                if (!empty($formData['roles'])) {
                    foreach ($formData['roles'] as $role_id) {
                        $db->insert("INSERT INTO user_roles (user_id, role_id) VALUES (?, ?)", [$user_id, $role_id]);
                    }
                }
            }
            
            $db->commit();
            
            $_SESSION['success_message'] = 'تم تحديث بيانات المستخدم بنجاح';
            header('Location: edit.php?id=' . $user_id);
            exit();
        } catch (Exception $e) {
            $db->rollback();
            error_log("User update error: " . $e->getMessage());
            $errors['general'] = 'حدث خطأ في تحديث المستخدم. يرجى المحاولة لاحقًا.';
        }
    }
}
?>

<div class="content-area">
    <div class="page-header">
        <div class="d-flex justify-content-between align-items-center">
            <div>
                <h2 class="page-title">تعديل المستخدم: <?php echo htmlspecialchars($user['full_name']); ?></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>
    
    <form method="POST" action="">
        <input type="hidden" name="user_id" value="<?php echo htmlspecialchars($user_id); ?>">
        
        <div class="row">
            <div class="col-lg-8">
                <div class="card">
                    <div class="card-header">
                        <h5 class="card-title">معلومات المستخدم</h5>
                    </div>
                    <div class="card-body">
                        <?php if (isset($errors['general'])): ?>
                            <div class="alert alert-danger">
                                <?php echo htmlspecialchars($errors['general']); ?>
                            </div>
                        <?php endif; ?>
                        
                        <div class="form-group mb-3">
                            <label for="employee_id" class="form-label">ربط بموظف</label>
                            <select class="form-control" id="employee_id" name="employee_id">
                                <option value="" <?php echo empty($formData['employee_id']) ? 'selected' : ''; ?>>
                                    لا يوجد موظف مرتبط (اختياري)
                                </option>
                                <?php if (!empty($employees)): ?>
                                    <?php foreach ($employees as $employee): ?>
                                        <option value="<?php echo htmlspecialchars($employee['id']); ?>" 
                                                <?php echo ($employee['id'] == $formData['employee_id']) ? 'selected' : ''; ?>>
                                                <?php echo htmlspecialchars($employee['full_name']); ?>
                                        </option>
                                    <?php endforeach; ?>
                                <?php endif; ?>
                            </select>
                        </div>

                        <hr>

                        <div class="row">
                            <div class="col-md-6 mb-3">
                                <div class="form-group">
                                    <label for="username" class="form-label">اسم المستخدم *</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>
                                    <?php if (isset($errors['username'])): ?>
                                        <div class="invalid-feedback"><?php echo htmlspecialchars($errors['username']); ?></div>
                                    <?php endif; ?>
                                </div>
                            </div>
                            
                            <div class="col-md-6 mb-3">
                                <div class="form-group">
                                    <label for="email" class="form-label">البريد الإلكتروني *</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>
                                    <?php if (isset($errors['email'])): ?>
                                        <div class="invalid-feedback"><?php echo htmlspecialchars($errors['email']); ?></div>
                                    <?php endif; ?>
                                </div>
                            </div>
                        </div>
                        
                        <div class="form-group mb-3">
                            <label for="full_name" class="form-label">الاسم الكامل *</label>
                            <input type="text" class="form-control <?php echo isset($errors['full_name']) ? 'is-invalid' : ''; ?>" 
                                         id="full_name" name="full_name" 
                                         value="<?php echo htmlspecialchars($formData['full_name']); ?>" required>
                            <?php if (isset($errors['full_name'])): ?>
                                <div class="invalid-feedback"><?php echo htmlspecialchars($errors['full_name']); ?></div>
                            <?php endif; ?>
                        </div>
                        
                        <div class="row">
                            <div class="col-md-6 mb-3">
                                <div class="form-group">
                                    <label for="password" class="form-label">كلمة المرور الجديدة</label>
                                    <input type="password" class="form-control <?php echo isset($errors['password']) ? 'is-invalid' : ''; ?>" 
                                                 id="password" name="password">
                                    <small class="form-text text-muted">اترك الحقل فارغاً لعدم تغيير كلمة المرور.</small>
                                    <?php if (isset($errors['password'])): ?>
                                        <div class="invalid-feedback"><?php echo htmlspecialchars($errors['password']); ?></div>
                                    <?php endif; ?>
                                </div>
                            </div>
                            
                            <div class="col-md-6 mb-3">
                                <div class="form-group">
                                    <label for="confirm_password" class="form-label">تأكيد كلمة المرور</label>
                                    <input type="password" class="form-control <?php echo isset($errors['confirm_password']) ? 'is-invalid' : ''; ?>" 
                                                 id="confirm_password" name="confirm_password">
                                    <?php if (isset($errors['confirm_password'])): ?>
                                        <div class="invalid-feedback"><?php echo htmlspecialchars($errors['confirm_password']); ?></div>
                                    <?php endif; ?>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
            
            <div class="col-lg-4">
                <div class="card mb-4">
                    <div class="card-header">
                        <h5 class="card-title">الحالة</h5>
                    </div>
                    <div class="card-body">
                        <div class="form-check form-switch">
                            <input class="form-check-input" type="checkbox" id="is_active" name="is_active" 
                                     value="1" <?php echo $formData['is_active'] ? 'checked' : ''; ?> 
                                     <?php echo $user_id == $_SESSION['user_id'] ? 'disabled' : ''; ?>>
                            <label class="form-check-label" for="is_active">حساب نشط</label>
                        </div>
                        <?php if ($user_id == $_SESSION['user_id']): ?>
                            <small class="text-danger d-block mt-2">لا يمكنك تعطيل حسابك الخاص.</small>
                            <input type="hidden" name="is_active" value="1">
                        <?php endif; ?>
                    </div>
                </div>

                <?php if (hasPermission('manage_user_roles')): ?>
                <div class="card">
                    <div class="card-header"><h5 class="card-title">تعيين الأدوار</h5></div>
                    <div class="card-body">
                        <?php if (empty($all_roles)): ?>
                            <p class="text-muted">لا توجد أدوار متاحة.</p>
                        <?php else: ?>
                            <div class="row">
                                <?php foreach($all_roles as $role): ?>
                                <div class="col-md-6 mb-2">
                                    <div class="form-check">
                                        <input class="form-check-input" type="checkbox" name="roles[]" 
                                                 value="<?php echo htmlspecialchars($role['id']); ?>" 
                                                 id="role_<?php echo htmlspecialchars($role['id']); ?>"
                                                 <?php echo in_array($role['id'], $user_roles_ids) ? 'checked' : ''; ?>>
                                        <label class="form-check-label" for="role_<?php echo htmlspecialchars($role['id']); ?>">
                                            <?php echo htmlspecialchars($role['role_name']); ?>
                                            <?php if (!empty($role['description'])): ?>
                                                <small class="text-muted d-block"><?php echo htmlspecialchars($role['description']); ?></small>
                                            <?php endif; ?>
                                        </label>
                                    </div>
                                </div>
                                <?php endforeach; ?>
                            </div>
                        <?php endif; ?>
                    </div>
                </div>
                <?php endif; ?>
            </div>
        </div>

        <div class="mt-4">
            <div class="d-flex gap-2">
                <button type="submit" class="btn btn-primary">
                    <i class="fas fa-save me-2"></i>حفظ التعديلات
                </button>
                <a href="index.php" class="btn btn-secondary">
                    <i class="fas fa-times me-2"></i>إلغاء
                </a>
            </div>
        </div>
    </form>
</div>

<script>
// التحقق من تطابق كلمة المرور الجديدة
document.getElementById('confirm_password').addEventListener('input', function() {
    const password = document.getElementById('password').value;
    const confirmPassword = this.value;
    
    if (password !== confirmPassword) {
        this.setCustomValidity('كلمة المرور غير متطابقة.');
    } else {
        this.setCustomValidity('');
    }
});
</script>

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