-- =====================================================
-- تحديث نظام الصلاحيات
-- Update Permissions System
-- =====================================================

-- 1. إضافة الصلاحيات المفقودة
-- =====================================================

-- التحقق وإضافة صلاحيات مفقودة
INSERT IGNORE INTO `permissions` (`id`, `code`, `label_ar`) VALUES
-- صلاحيات الحضور
(19, 'attendance.read', 'عرض الحضور'),
-- صلاحيات المصروفات
(20, 'expenses.read', 'عرض المصروفات'),
-- صلاحيات الرواتب
(21, 'salaries.read', 'عرض الرواتب'),
-- صلاحيات النقل
(22, 'transport.read', 'عرض النقل'),
-- صلاحيات التقارير
(23, 'reports.read', 'عرض التقارير'),
-- صلاحيات الإعدادات
(24, 'settings.read', 'عرض الإعدادات'),
(25, 'settings.write', 'تعديل الإعدادات');

-- =====================================================
-- 2. تحديث الأدوار
-- =====================================================

-- التأكد من وجود الأدوار الأربعة
INSERT INTO `roles` (`id`, `name`, `label_ar`) VALUES
(1, 'admin', 'مدير النظام'),
(2, 'manager', 'مدير'),
(3, 'accountant', 'محاسب'),
(4, 'staff', 'إداري')
ON DUPLICATE KEY UPDATE label_ar = VALUES(label_ar);

-- =====================================================
-- 3. حذف الصلاحيات القديمة وإعادة تعيينها
-- =====================================================

-- حذف جميع الصلاحيات الحالية
TRUNCATE TABLE `role_permissions`;

-- =====================================================
-- 4. تعيين الصلاحيات للأدوار
-- =====================================================

-- ---------------------------------------------------
-- 4.1. مدير النظام (admin) - جميع الصلاحيات
-- ---------------------------------------------------
INSERT INTO `role_permissions` (`role_id`, `perm_id`) 
SELECT 1, id FROM permissions;

-- ---------------------------------------------------
-- 4.2. مدير (manager) - صلاحيات شاملة ما عدا الإعدادات الحساسة
-- ---------------------------------------------------
INSERT INTO `role_permissions` (`role_id`, `perm_id`) VALUES
-- الطلاب
(2, 1),  -- students.read
(2, 2),  -- students.write
(2, 84), -- students.delete
-- الحضور
(2, 19), -- attendance.read
(2, 3),  -- attendance.write
-- الأقسام
(2, 85), -- sections.read
(2, 86), -- sections.write
-- المالية (قراءة + كتابة)
(2, 5),  -- finance.read
(2, 6),  -- finance.write
-- المصروفات
(2, 20), -- expenses.read
(2, 7),  -- expenses.write
-- الرواتب
(2, 21), -- salaries.read
(2, 8),  -- salaries.write
-- النقل
(2, 22), -- transport.read
(2, 4),  -- transport.write
-- التقارير
(2, 23), -- reports.read
(2, 11), -- reports.create
-- المهام
(2, 13), -- tasks.read
(2, 14), -- tasks.write
-- الإشعارات
(2, 9),  -- notifications.read
(2, 10); -- notifications.write

-- ---------------------------------------------------
-- 4.3. محاسب (accountant) - صلاحيات مالية شاملة
-- ---------------------------------------------------
INSERT INTO `role_permissions` (`role_id`, `perm_id`) VALUES
-- الطلاب (قراءة فقط)
(3, 1),  -- students.read
-- المالية (قراءة + كتابة)
(3, 5),  -- finance.read
(3, 6),  -- finance.write
-- المصروفات
(3, 20), -- expenses.read
(3, 7),  -- expenses.write
-- الفواتير والمدفوعات (ضمن finance.write)
-- الرواتب
(3, 21), -- salaries.read
(3, 8),  -- salaries.write
-- التقارير المالية
(3, 23), -- reports.read
(3, 11), -- reports.create
-- النقل (قراءة فقط - لحساب التكاليف)
(3, 22), -- transport.read
-- الأقسام (قراءة فقط - للرسوم)
(3, 85); -- sections.read

-- ---------------------------------------------------
-- 4.4. إداري (staff) - صلاحيات إدارية أساسية
-- ---------------------------------------------------
INSERT INTO `role_permissions` (`role_id`, `perm_id`) VALUES
-- الطلاب
(4, 1),  -- students.read
(4, 2),  -- students.write
-- الحضور
(4, 19), -- attendance.read
(4, 3),  -- attendance.write
-- الأقسام (قراءة فقط)
(4, 85), -- sections.read
-- التقارير (قراءة فقط)
(4, 23), -- reports.read
-- المهام
(4, 13), -- tasks.read
(4, 14), -- tasks.write
-- الإشعارات (قراءة فقط)
(4, 9),  -- notifications.read
-- النقل (قراءة فقط)
(4, 22); -- transport.read

-- =====================================================
-- 5. عرض نتيجة التحديث
-- =====================================================

-- عرض الأدوار مع عدد الصلاحيات
SELECT 
    r.id,
    r.name,
    r.label_ar,
    COUNT(rp.perm_id) as permissions_count
FROM roles r
LEFT JOIN role_permissions rp ON r.id = rp.role_id
GROUP BY r.id, r.name, r.label_ar
ORDER BY r.id;

-- عرض الصلاحيات لكل دور
SELECT 
    r.label_ar as 'الدور',
    GROUP_CONCAT(p.label_ar SEPARATOR ', ') as 'الصلاحيات'
FROM roles r
LEFT JOIN role_permissions rp ON r.id = rp.role_id
LEFT JOIN permissions p ON rp.perm_id = p.id
GROUP BY r.id, r.label_ar
ORDER BY r.id;

