-- 002: System reference data — permission catalog, role definitions, governorates
-- These are SYSTEM definitions (not organizational facts). Business role_permissions for the
-- 12 governance roles are deliberately NOT seeded: the authorization matrix is draft v0.1 and
-- assignments require governance confirmation (G-1/Q3/Q5). Only the operational system_admin
-- role receives its technical permissions.

-- +up
INSERT INTO permissions (code, module, action, description, is_sensitive) VALUES
  ('dashboard.view',            'dashboard',    'view',            'عرض لوحة المعلومات', FALSE),
  ('members.view',              'members',      'view',            'عرض بيانات الأعضاء', FALSE),
  ('members.manage',            'members',      'manage',          'إنشاء وتعديل سجلات الأعضاء', FALSE),
  ('members.import',            'members',      'import',          'استيراد بيانات أعضاء', TRUE),
  ('members.merge',             'members',      'merge',           'دمج السجلات المكررة', TRUE),
  ('members.view_contact_details', 'members',   'view_contact_details', 'عرض بيانات الاتصال غير المقنعة', TRUE),
  ('members.view_notes',        'members',      'view_notes',      'عرض الملاحظات المقيدة', TRUE),
  ('structure.view',            'structure',    'view',            'عرض الهياكل التنظيمية', FALSE),
  ('structure.manage',          'structure',    'manage',          'إدارة الهياكل التنظيمية', FALSE),
  ('plans.view',                'plans',        'view',            'عرض الخطط والمهام', FALSE),
  ('plans.manage',              'plans',        'manage',          'إدارة الخطط والمهام', FALSE),
  ('plans.approve',             'plans',        'approve',         'اعتماد الخطط', TRUE),
  ('activities.view',           'activities',   'view',            'عرض الأنشطة', FALSE),
  ('activities.manage',         'activities',   'manage',          'إدارة الأنشطة', FALSE),
  ('training.view',             'training',     'view',            'عرض برامج التدريب', FALSE),
  ('training.manage',           'training',     'manage',          'إدارة برامج التدريب', FALSE),
  ('kpis.view',                 'kpis',         'view',            'عرض المؤشرات', FALSE),
  ('kpis.manage',               'kpis',         'manage',          'إدارة المؤشرات', FALSE),
  ('kpis.approve',              'kpis',         'approve',         'اعتماد أهداف المؤشرات', TRUE),
  ('media.view',                'media',        'view',            'عرض المحتوى الإعلامي', FALSE),
  ('media.manage',              'media',        'manage',          'إدارة المحتوى الإعلامي', FALSE),
  ('media.approve',             'media',        'approve',         'اعتماد النشر الإعلامي', TRUE),
  ('partnerships.view',         'partnerships', 'view',            'عرض الشراكات', FALSE),
  ('partnerships.manage',       'partnerships', 'manage',          'إدارة الشراكات', FALSE),
  ('partnerships.approve',      'partnerships', 'approve',         'اعتماد الشراكات', TRUE),
  ('budget.view',               'budget',       'view',            'عرض الميزانية', FALSE),
  ('budget.approve',            'budget',       'approve',         'اعتماد الميزانية', TRUE),
  ('issues.access',             'issues',       'access',          'الوصول لوحدة القضايا المقيدة', TRUE),
  ('issues.view_contact',       'issues',       'view_contact',    'عرض بيانات اتصال مقدمي البلاغات', TRUE),
  ('issues.manage',             'issues',       'manage',          'إدارة القضايا المقيدة', TRUE),
  ('meetings.view',             'meetings',     'view',            'عرض الاجتماعات والقرارات', FALSE),
  ('meetings.manage',           'meetings',     'manage',          'إدارة الاجتماعات والقرارات', FALSE),
  ('decisions.view',            'decisions',    'view',            'عرض القرارات', FALSE),
  ('decisions.manage',          'decisions',    'manage',          'إدارة القرارات', FALSE),
  ('reports.view',              'reports',      'view',            'عرض التقارير', FALSE),
  ('export.generate',           'export',       'generate',        'توليد التصديرات', TRUE),
  ('admin.manage_users',        'admin',        'manage_users',    'إدارة المستخدمين', FALSE),
  ('admin.manage_roles',        'admin',        'manage_roles',    'إدارة الأدوار والصلاحيات', FALSE),
  ('admin.settings',            'admin',        'settings',        'تعديل إعدادات النظام', FALSE),
  ('admin.backups',             'admin',        'backups',         'إدارة النسخ الاحتياطية', FALSE),
  ('admin.audit.view',          'admin',        'audit_view',      'عرض سجل التدقيق', FALSE)
ON CONFLICT (code) DO NOTHING;

INSERT INTO roles (code, name_ar, description, is_system, is_enabled, governance_confirmed, requires_scope, sort_order) VALUES
  ('system_admin',           'مسؤول النظام', 'إدارة تقنية فقط (مستخدمون/أدوار/نسخ/إعدادات/سجلات) — لا وصول تلقائي للمحتوى الحساس', TRUE,  TRUE,  TRUE,  FALSE, 1),
  ('federation_president',   'رئيس الاتحاد', 'قيادة مركزية — بانتظار تأكيد الحوكمة', FALSE, TRUE, FALSE, FALSE, 10),
  ('org_secretary',          'أمين التنظيم', 'ملف العضوية والهياكل — بانتظار تأكيد الحوكمة', FALSE, TRUE, FALSE, FALSE, 20),
  ('media_secretary',        'أمين الإعلام', 'الملف الإعلامي — بانتظار تأكيد الحوكمة', FALSE, TRUE, FALSE, FALSE, 30),
  ('training_secretary',     'أمين التدريب', 'ملف التدريب — بانتظار تأكيد الحوكمة', FALSE, TRUE, FALSE, FALSE, 40),
  ('local_councils_secretary','أمين المجالس المحلية', 'ملف المجالس المحلية — بانتظار تأكيد الحوكمة', FALSE, TRUE, FALSE, FALSE, 50),
  ('girls_secretary',        'أمينة البنات', 'برامج البنات — بانتظار تأكيد الحوكمة', FALSE, TRUE, FALSE, FALSE, 60),
  ('students_secretary',     'أمين الطلاب', 'برامج الطلاب — بانتظار تأكيد الحوكمة', FALSE, TRUE, FALSE, FALSE, 70),
  ('bureau_member',          'عضو مكتب / منسق ملف', 'منسق ملف محدد — بانتظار تأكيد الحوكمة', FALSE, TRUE, FALSE, FALSE, 80),
  ('governorate_secretary',  'سكرتير محافظة', 'نطاق محافظة محدد إلزاميًا — بانتظار تأكيد الحوكمة', FALSE, TRUE, FALSE, TRUE, 90),
  ('activity_owner',         'مالك نشاط', 'نطاق نشاط محدد — بانتظار تأكيد الحوكمة', FALSE, TRUE, FALSE, TRUE, 100),
  ('reviewer',               'مراجع (قراءة فقط)', 'قراءة المعتمد فقط — بانتظار تعيين الشاغل', FALSE, TRUE, FALSE, FALSE, 110),
  ('general_member',         'عضو عام (بوابة مستقبلية)', 'خارج MVP — غير مفعّل', FALSE, FALSE, FALSE, FALSE, 120)
ON CONFLICT (code) DO NOTHING;

-- system_admin: technical administration only (matrix §3 "إدارة النظام" row)
INSERT INTO role_permissions (role_id, permission_id)
SELECT r.id, p.id FROM roles r, permissions p
WHERE r.code = 'system_admin'
  AND p.code IN ('dashboard.view', 'admin.manage_users', 'admin.manage_roles', 'admin.settings', 'admin.backups', 'admin.audit.view')
ON CONFLICT DO NOTHING;

INSERT INTO governorates (id, code, name_ar, name_en) VALUES
  (1,  'C',   'القاهرة',      'Cairo'),
  (2,  'AL',  'الإسكندرية',   'Alexandria'),
  (3,  'PTS', 'بورسعيد',      'Port Said'),
  (4,  'SUZ', 'السويس',       'Suez'),
  (5,  'DT',  'دمياط',        'Damietta'),
  (6,  'DKH', 'الدقهلية',     'Dakahlia'),
  (7,  'SHK', 'الشرقية',      'Sharqia'),
  (8,  'KB',  'القليوبية',    'Qalyubia'),
  (9,  'KFS', 'كفر الشيخ',    'Kafr El Sheikh'),
  (10, 'GH',  'الغربية',      'Gharbia'),
  (11, 'MNF', 'المنوفية',     'Monufia'),
  (12, 'BH',  'البحيرة',      'Beheira'),
  (13, 'ISZ', 'الإسماعيلية',  'Ismailia'),
  (14, 'GZ',  'الجيزة',       'Giza'),
  (15, 'BNS', 'بني سويف',     'Beni Suef'),
  (16, 'FYM', 'الفيوم',       'Fayoum'),
  (17, 'MN',  'المنيا',       'Minya'),
  (18, 'AST', 'أسيوط',        'Asyut'),
  (19, 'SHG', 'سوهاج',        'Sohag'),
  (20, 'KN',  'قنا',          'Qena'),
  (21, 'LX',  'الأقصر',       'Luxor'),
  (22, 'ASN', 'أسوان',        'Aswan'),
  (23, 'BA',  'البحر الأحمر', 'Red Sea'),
  (24, 'WAD', 'الوادي الجديد','New Valley'),
  (25, 'MT',  'مطروح',        'Matrouh'),
  (26, 'SIN', 'شمال سيناء',   'North Sinai'),
  (27, 'SIS', 'جنوب سيناء',   'South Sinai')
ON CONFLICT (id) DO NOTHING;

-- +down
DELETE FROM role_permissions WHERE role_id IN (SELECT id FROM roles WHERE code = 'system_admin');
DELETE FROM roles WHERE code IN (
  'system_admin','federation_president','org_secretary','media_secretary','training_secretary',
  'local_councils_secretary','girls_secretary','students_secretary','bureau_member',
  'governorate_secretary','activity_owner','reviewer','general_member'
);
DELETE FROM permissions WHERE module IN (
  'dashboard','members','structure','plans','activities','training','kpis','media',
  'partnerships','budget','issues','meetings','decisions','reports','export','admin'
);
DELETE FROM governorates;
