INSERT INTO currencies (code, name_ar, name_en, symbol, decimal_places) VALUES
('SAR', 'الريال السعودي', 'Saudi Riyal', 'ر.س', 2),
('USD', 'الدولار الأمريكي', 'US Dollar', '$', 2),
('EUR', 'اليورو', 'Euro', '€', 2);

INSERT INTO units_of_measure (code, name_ar, name_en, category, decimal_places) VALUES
('NO', 'عدد', 'Number', 'count', 0),
('LS', 'مقطوعية', 'Lump Sum', 'commercial', 4),
('M', 'متر طولي', 'Meter', 'length', 4),
('M2', 'متر مربع', 'Square Meter', 'area', 4),
('M3', 'متر مكعب', 'Cubic Meter', 'volume', 4),
('KG', 'كيلوجرام', 'Kilogram', 'weight', 4),
('TON', 'طن', 'Ton', 'weight', 4),
('DAY', 'يوم', 'Day', 'time', 2),
('HOUR', 'ساعة', 'Hour', 'time', 2),
('PCT', 'نسبة مئوية', 'Percent', 'ratio', 4);

INSERT INTO modules (code, name_ar, name_en, version, is_core, is_enabled) VALUES
('core', 'النظام الأساسي', 'Core', '0.1.0', 1, 1),
('identity', 'المستخدمون والصلاحيات', 'Identity', '0.1.0', 1, 1),
('parties', 'الجهات', 'Parties', '0.1.0', 0, 1),
('projects', 'المشاريع', 'Projects', '0.1.0', 0, 1),
('planning', 'التخطيط والجدولة', 'Planning', '0.1.0', 0, 0),
('tasks', 'المهام', 'Tasks', '0.1.0', 0, 0),
('contracts', 'العقود', 'Contracts', '0.1.0', 0, 0),
('boq', 'جداول الكميات', 'BOQ', '0.1.0', 0, 0),
('certificates', 'المستخلصات', 'Certificates', '0.1.0', 0, 0),
('documents', 'المستندات الهندسية', 'Documents', '0.1.0', 0, 0),
('site', 'إدارة الموقع', 'Site Management', '0.1.0', 0, 0),
('cost_control', 'مراقبة التكاليف', 'Cost Control', '0.1.0', 0, 0),
('changes', 'أوامر التغيير', 'Change Management', '0.1.0', 0, 0),
('handover', 'التسليم والإغلاق', 'Handover', '0.1.0', 0, 0),
('reporting', 'التقارير واللوحات', 'Reporting', '0.1.0', 0, 0);

INSERT INTO party_role_types (code, name_ar, name_en, sort_order) VALUES
('owner', 'مالك', 'Owner', 10),
('client', 'عميل', 'Client', 20),
('consultant', 'استشاري', 'Consultant', 30),
('contractor', 'مقاول', 'Contractor', 40),
('subcontractor', 'مقاول باطن', 'Subcontractor', 50),
('supplier', 'مورد', 'Supplier', 60),
('government', 'جهة حكومية', 'Government Entity', 70),
('other', 'أخرى', 'Other', 90);

INSERT INTO project_types (code, name_ar, name_en, sort_order) VALUES
('design', 'تصميم هندسي', 'Engineering Design', 10),
('supervision', 'إشراف هندسي', 'Engineering Supervision', 20),
('construction', 'تنفيذ وإنشاء', 'Construction', 30),
('infrastructure', 'بنية تحتية', 'Infrastructure', 40),
('real_estate', 'تطوير عقاري', 'Real Estate Development', 50),
('operation_maintenance', 'تشغيل وصيانة', 'Operation and Maintenance', 60),
('project_management', 'إدارة مشاريع', 'Project Management', 70),
('other', 'أخرى', 'Other', 90);

INSERT INTO numbering_schemes (entity_type, name_ar, pattern, prefix, padding, reset_frequency) VALUES
('employee', 'ترقيم الموظفين', '{PREFIX}-{NUMBER}', 'EMP', 4, 'never'),
('party', 'ترقيم الجهات', '{PREFIX}-{YEAR}-{NUMBER}', 'PTY', 4, 'yearly'),
('project', 'ترقيم المشاريع', '{PREFIX}-{YEAR}-{NUMBER}', 'PRJ', 4, 'yearly');

INSERT INTO permissions (module_code, code, name_ar) VALUES
('core', 'dashboard.view', 'عرض لوحة المعلومات'),
('core', 'company.manage', 'إدارة بيانات الشركة'),
('core', 'branches.manage', 'إدارة الفروع'),
('core', 'departments.manage', 'إدارة الإدارات'),
('identity', 'users.view', 'عرض المستخدمين'),
('identity', 'users.create', 'إضافة مستخدم'),
('identity', 'users.update', 'تعديل المستخدمين'),
('identity', 'users.disable', 'تعطيل المستخدمين'),
('identity', 'roles.view', 'عرض الأدوار'),
('identity', 'roles.manage', 'إدارة الأدوار والصلاحيات'),
('core', 'audit.view', 'عرض سجل التدقيق'),
('parties', 'parties.view', 'عرض الجهات'),
('parties', 'parties.create', 'إضافة جهة'),
('parties', 'parties.update', 'تعديل الجهات'),
('parties', 'parties.archive', 'أرشفة الجهات'),
('projects', 'projects.view', 'عرض المشاريع المتاحة'),
('projects', 'projects.view_all', 'عرض جميع المشاريع'),
('projects', 'projects.create', 'إضافة مشروع'),
('projects', 'projects.update', 'تعديل المشاريع'),
('projects', 'projects.submit', 'إرسال المشروع للمراجعة'),
('projects', 'projects.approve', 'اعتماد المشروع'),
('projects', 'projects.activate', 'تفعيل المشروع'),
('projects', 'projects.hold', 'إيقاف واستئناف المشروع'),
('projects', 'projects.complete', 'إكمال المشروع فنيًا'),
('projects', 'projects.archive', 'أرشفة واستعادة المشاريع'),
('projects', 'projects.manage_team', 'إدارة فريق المشروع'),
('projects', 'projects.manage_parties', 'إدارة أطراف المشروع'),
('projects', 'projects.view_financials', 'عرض بيانات المشروع المالية'),
('projects', 'projects.manage_financials', 'تعديل بيانات المشروع المالية');

INSERT INTO roles (public_id, code, name_ar, name_en, scope_type, is_system) VALUES
('01ADMINROLE000000000000000', 'administrator', 'مدير النظام', 'Administrator', 'global', 1),
('01GENERALMGR00000000000000', 'general_manager', 'المدير العام', 'General Manager', 'global', 1),
('01EMPLOYEEROLE000000000000', 'employee', 'مستخدم النظام', 'System User', 'global', 1),
('01PROJECTMGR00000000000000', 'project_manager', 'مدير المشروع', 'Project Manager', 'project', 1),
('01PROJECTMEM00000000000000', 'project_member', 'عضو المشروع', 'Project Member', 'project', 1);

INSERT INTO role_permissions (role_id, permission_id)
SELECT r.id, p.id FROM roles r CROSS JOIN permissions p WHERE r.code = 'administrator' AND r.scope_type = 'global';

INSERT INTO role_permissions (role_id, permission_id)
SELECT r.id, p.id FROM roles r JOIN permissions p ON p.code IN (
    'dashboard.view', 'parties.view', 'projects.view', 'projects.update',
    'projects.manage_team', 'projects.manage_parties', 'projects.view_financials', 'projects.manage_financials'
) WHERE r.code = 'project_manager' AND r.scope_type = 'project';

INSERT INTO role_permissions (role_id, permission_id)
SELECT r.id, p.id FROM roles r JOIN permissions p ON p.code IN (
    'dashboard.view', 'parties.view', 'projects.view'
) WHERE r.code = 'project_member' AND r.scope_type = 'project';

INSERT INTO role_permissions (role_id, permission_id)
SELECT r.id, p.id FROM roles r JOIN permissions p ON p.code IN (
    'dashboard.view', 'parties.view', 'projects.view'
) WHERE r.code = 'employee' AND r.scope_type = 'global';

INSERT INTO role_permissions (role_id, permission_id)
SELECT r.id, p.id FROM roles r JOIN permissions p ON p.code IN (
    'dashboard.view', 'parties.view', 'parties.create', 'parties.update',
    'projects.view', 'projects.view_all', 'projects.create', 'projects.update',
    'projects.submit', 'projects.approve', 'projects.activate', 'projects.hold', 'projects.complete',
    'projects.archive', 'projects.manage_team', 'projects.manage_parties',
    'projects.view_financials', 'projects.manage_financials'
) WHERE r.code = 'general_manager' AND r.scope_type = 'global';

INSERT INTO role_permissions (role_id, permission_id)
SELECT r.id, p.id FROM roles r JOIN permissions p ON p.code IN (
    'projects.submit', 'projects.hold', 'projects.complete'
) WHERE r.code = 'project_manager' AND r.scope_type = 'project';

INSERT INTO workflow_definitions
    (public_id, module_code, entity_type, code, name_ar, name_en, status)
VALUES
    ('01PROJECTWORKFLOW000000000', 'projects', 'project', 'project_standard', 'المسار الأساسي للمشاريع', 'Standard Project Workflow', 'active');

SET @project_workflow_id = LAST_INSERT_ID();

INSERT INTO workflow_versions
    (workflow_definition_id, version_number, status, published_at)
VALUES
    (@project_workflow_id, 1, 'published', UTC_TIMESTAMP());

SET @project_workflow_version_id = LAST_INSERT_ID();

UPDATE workflow_definitions
SET active_version_id = @project_workflow_version_id
WHERE id = @project_workflow_id;

INSERT INTO workflow_states
    (workflow_version_id, code, name_ar, name_en, state_type, color, sort_order, is_initial, is_terminal)
VALUES
(@project_workflow_version_id, 'draft', 'مسودة', 'Draft', 'draft', '#64748b', 10, 1, 0),
(@project_workflow_version_id, 'under_review', 'تحت المراجعة', 'Under Review', 'in_progress', '#d97706', 20, 0, 0),
(@project_workflow_version_id, 'approved', 'معتمد', 'Approved', 'approved', '#2563eb', 30, 0, 0),
(@project_workflow_version_id, 'active', 'نشط', 'Active', 'in_progress', '#059669', 40, 0, 0),
(@project_workflow_version_id, 'on_hold', 'متوقف مؤقتًا', 'On Hold', 'on_hold', '#dc2626', 50, 0, 0),
(@project_workflow_version_id, 'technically_completed', 'مكتمل فنيًا', 'Technically Completed', 'completed', '#0f766e', 60, 0, 0),
(@project_workflow_version_id, 'financially_closed', 'مغلق ماليًا', 'Financially Closed', 'completed', '#7c3aed', 70, 0, 0),
(@project_workflow_version_id, 'contractually_closed', 'مغلق تعاقديًا', 'Contractually Closed', 'completed', '#4338ca', 80, 0, 0),
(@project_workflow_version_id, 'closed', 'مغلق', 'Closed', 'closed', '#111827', 90, 0, 1);

INSERT INTO workflow_transitions
    (workflow_version_id, code, name_ar, from_state_id, to_state_id, required_permission_code, requires_comment, sort_order)
VALUES
(@project_workflow_version_id, 'submit', 'إرسال للمراجعة',
 (SELECT id FROM workflow_states WHERE workflow_version_id = @project_workflow_version_id AND code = 'draft'),
 (SELECT id FROM workflow_states WHERE workflow_version_id = @project_workflow_version_id AND code = 'under_review'), 'projects.submit', 0, 10),
(@project_workflow_version_id, 'return_to_draft', 'إعادة للمسودة',
 (SELECT id FROM workflow_states WHERE workflow_version_id = @project_workflow_version_id AND code = 'under_review'),
 (SELECT id FROM workflow_states WHERE workflow_version_id = @project_workflow_version_id AND code = 'draft'), 'projects.approve', 1, 20),
(@project_workflow_version_id, 'approve', 'اعتماد المشروع',
 (SELECT id FROM workflow_states WHERE workflow_version_id = @project_workflow_version_id AND code = 'under_review'),
 (SELECT id FROM workflow_states WHERE workflow_version_id = @project_workflow_version_id AND code = 'approved'), 'projects.approve', 0, 30),
(@project_workflow_version_id, 'activate', 'تفعيل المشروع',
 (SELECT id FROM workflow_states WHERE workflow_version_id = @project_workflow_version_id AND code = 'approved'),
 (SELECT id FROM workflow_states WHERE workflow_version_id = @project_workflow_version_id AND code = 'active'), 'projects.activate', 0, 40),
(@project_workflow_version_id, 'hold', 'إيقاف مؤقت',
 (SELECT id FROM workflow_states WHERE workflow_version_id = @project_workflow_version_id AND code = 'active'),
 (SELECT id FROM workflow_states WHERE workflow_version_id = @project_workflow_version_id AND code = 'on_hold'), 'projects.hold', 1, 50),
(@project_workflow_version_id, 'resume', 'استئناف المشروع',
 (SELECT id FROM workflow_states WHERE workflow_version_id = @project_workflow_version_id AND code = 'on_hold'),
 (SELECT id FROM workflow_states WHERE workflow_version_id = @project_workflow_version_id AND code = 'active'), 'projects.hold', 1, 60),
(@project_workflow_version_id, 'complete_technical', 'إكمال فني',
 (SELECT id FROM workflow_states WHERE workflow_version_id = @project_workflow_version_id AND code = 'active'),
 (SELECT id FROM workflow_states WHERE workflow_version_id = @project_workflow_version_id AND code = 'technically_completed'), 'projects.complete', 1, 70);
