<?php
// Central permission catalog shared by users, roles, pages and APIs.

if (!function_exists('ua_permission_groups')) {
  function ua_permission_groups(): array {
    return [
      'dashboard' => [
        'label' => 'لوحة التحكم والكروت',
        'permissions' => [
          'can_view_dashboard' => 'الدخول إلى لوحة التحكم',
          'can_view_dashboard_stats' => 'كروت الإحصاءات العلوية',
          'can_view_dashboard_alerts' => 'كرت التنبيهات',
          'can_view_dashboard_security' => 'كرت مراقب الشبكة',
          'can_view_dashboard_summary' => 'كرت الحالة العامة',
          'can_view_dashboard_traffic' => 'كرت الترافيك',
          'can_view_dashboard_routers' => 'كرت الراوترات',
          'can_view_dashboard_sectors' => 'كرت السكتورات',
          'can_view_dashboard_receivers' => 'كرت المستقبلات',
          'can_search_dashboard_subscribers' => 'البحث عن المشتركين من لوحة التحكم',
        ],
      ],
      'subscribers' => [
        'label' => 'المشتركون وPPPoE',
        'permissions' => [
          'can_view_subscribers' => 'عرض المشتركين',
          'can_add_subscriber' => 'إضافة مشترك',
          'can_edit_subscriber' => 'تعديل بيانات المشترك',
          'can_delete_subscriber' => 'حذف المشترك',
          'can_suspend_subscriber' => 'إيقاف أو تعليق المشترك',
          'can_activate_subscriber' => 'إعادة تفعيل المشترك',
          'can_manage_subscribers' => 'الأوامر الجماعية والأرشفة',
          'can_view_pppoe_credentials' => 'عرض اسم مستخدم وكلمة مرور PPPoE',
          'can_pppoe_sync' => 'إنشاء أو مزامنة PPPoE على MikroTik',
          'can_pppoe_cut_restore' => 'قطع أو استعادة PPPoE يدويًا',
        ],
      ],
      'billing' => [
        'label' => 'الفواتير والحسابات',
        'permissions' => [
          'can_view_invoices' => 'عرض الفواتير',
          'can_add_invoices' => 'إنشاء الفواتير',
          'can_pay_invoices' => 'تسديد وإلغاء تسديد الفواتير',
          'can_delete_invoices' => 'حذف الفواتير',
          'can_manage_sales' => 'إدارة المبيعات والبطاقات',
          'can_manage_purchases' => 'إدارة المشتريات',
        ],
      ],
      'network' => [
        'label' => 'الشبكة وMikroTik',
        'permissions' => [
          'can_mikrotik' => 'عرض لوحة MikroTik',
          'can_mikrotik_settings' => 'تعديل إعدادات MikroTik',
          'can_mikrotik_sync' => 'تنفيذ المزامنة مع MikroTik',
          'can_manage_speed' => 'إدارة السرعات والباقات',
          'can_enforce_now' => 'تطبيق القيود فورًا',
        ],
      ],
      'agents' => [
        'label' => 'المعتمدون',
        'permissions' => [
          'can_manage_agents' => 'الإدارة الكاملة للمعتمدين',
          'can_view_agents' => 'عرض المعتمدين ومعاينة واجهتهم',
          'can_edit_agents' => 'إضافة وتعديل وأرشفة المعتمدين',
          'can_view_agent_log' => 'عرض سجل نشاط المعتمدين',
          'can_manage_agent_balances' => 'إدارة الأرصدة والتسويات',
        ],
      ],
      'reports_messages' => [
        'label' => 'التقارير والرسائل',
        'permissions' => [
          'can_view_reports' => 'عرض التقارير',
          'can_manage_messages' => 'إدارة الرسائل والقوالب',
          'can_messages' => 'الوصول إلى صفحات الرسائل القديمة',
        ],
      ],
      'system' => [
        'label' => 'الإعدادات والصيانة',
        'permissions' => [
          'can_settings' => 'الدخول إلى الإعدادات العامة',
          'can_system_settings' => 'إعدادات النظام',
          'can_manage_prices' => 'تعديل أسعار السرعات',
          'can_manage_addons' => 'تعديل أسعار الإضافات',
          'can_maintenance' => 'صيانة النظام',
          'can_system_maint' => 'الوصول إلى صفحات الصيانة القديمة',
          'can_backup' => 'إنشاء نسخة احتياطية',
          'can_cleanup_files' => 'تنظيف الملفات غير المستخدمة',
          'can_reset_operational' => 'مسح البيانات التشغيلية',
          'can_factory_reset' => 'إعادة ضبط البرنامج بالكامل',
        ],
      ],
      'administration' => [
        'label' => 'الإدارة والحماية',
        'permissions' => [
          'can_manage_roles' => 'إدارة الأدوار والصلاحيات',
          'can_manage_admins' => 'إدارة المستخدمين وصلاحياتهم',
        ],
      ],
    ];
  }
}

if (!function_exists('ua_permission_catalog')) {
  function ua_permission_catalog(): array {
    $catalog = [];
    foreach (ua_permission_groups() as $group) {
      foreach ((array)($group['permissions'] ?? []) as $key => $label) {
        $catalog[(string)$key] = (string)$label;
      }
    }
    return $catalog;
  }
}

if (!function_exists('ua_dashboard_granular_permissions')) {
  function ua_dashboard_granular_permissions(): array {
    return [
      'can_view_dashboard_stats',
      'can_view_dashboard_alerts',
      'can_view_dashboard_security',
      'can_view_dashboard_summary',
      'can_view_dashboard_traffic',
      'can_view_dashboard_routers',
      'can_view_dashboard_sectors',
      'can_view_dashboard_receivers',
      'can_search_dashboard_subscribers',
    ];
  }
}

if (!function_exists('ua_permission_array_has')) {
  function ua_permission_array_has(array $permissions, string $key): bool {
    if (!empty($permissions['all']) || !empty($permissions['ALL'])) return true;
    if (!empty($permissions[$key])) return true;

    // Backward compatibility: users created before granular dashboard cards
    // keep the complete dashboard until their permissions are saved again.
    if (in_array($key, ua_dashboard_granular_permissions(), true)) {
      $hasGranularDashboardRules = !empty($permissions['dashboard_permissions_configured']);
      foreach (ua_dashboard_granular_permissions() as $dashboardKey) {
        if (array_key_exists($dashboardKey, $permissions)) {
          $hasGranularDashboardRules = true;
          break;
        }
      }
      return !$hasGranularDashboardRules && !empty($permissions['can_view_dashboard']);
    }

    return false;
  }
}
