<?php

declare(strict_types=1);

namespace App\Services;

use App\Core\AccessControl;
use App\Core\Request;
use App\Services\DiarAccessPolicy;

/**
 * DIAR-6B.2-R3.1.3 premium role-aware information architecture and canonical route contract.
 *
 * The service is intentionally database-independent. It owns the visible
 * navigation catalogue, role-aware module access, portal cards and display
 * access matrix. Operational data remains in the dedicated repositories.
 */
final class DiarWorkspaceNavigation
{
    /** @return array<int,array<string,mixed>> */
    public static function modules(string $activePage = ''): array
    {
        $rows = [];
        foreach (self::definitions() as $key => $definition) {
            if (!self::canView($key)) {
                continue;
            }
            $definition['key'] = $key;
            $definition['active'] = in_array($activePage, (array)$definition['active_pages'], true);
            $definition['subpages'] = self::visibleSubpages((string)$key, (array)($definition['subpages'] ?? []));
            $rows[] = $definition;
        }
        return $rows;
    }

    /** @return array<int,array<string,mixed>> */
    public static function sidebarItems(): array
    {
        $isAr = current_lang() === 'ar';
        $tr = static function (string $en, string $ar) use ($isAr): string {
            return $isAr ? $ar : $en;
        };

        $items = [];
        if (self::canOpenPortal()) {
            $items[] = [
                'page' => 'diar-portal',
                'label' => $tr('Medication Risk Intelligence', 'منظومة ذكاء مخاطر الأدوية'),
                'icon' => '▣',
                'live' => true,
                'visible' => true,
                'diar_tone' => 'portal',
            ];
        }

        foreach (self::modules() as $module) {
            $items[] = [
                'page' => (string)$module['route'],
                'label' => (string)$module['sidebar_label'],
                'icon' => (string)$module['sidebar_icon'],
                'live' => true,
                'visible' => true,
                'diar_tone' => (string)$module['tone'],
            ];
        }
        return $items;
    }

    /** @return array<int,string> */
    public static function sidebarPages(): array
    {
        return array_values(array_map(static function (array $item): string {
            return (string)$item['page'];
        }, self::sidebarItems()));
    }

    /** @return array<int,string> */
    public static function allActivePages(): array
    {
        $pages = ['diar-portal'];
        foreach (self::definitions() as $definition) {
            foreach ((array)$definition['active_pages'] as $page) {
                $pages[] = (string)$page;
            }
        }
        return array_values(array_unique($pages));
    }

    public static function isPremiumPage(string $page): bool
    {
        return in_array($page, self::allActivePages(), true);
    }

    public static function moduleKeyForPage(string $page): string
    {
        if ($page === 'diar-portal') {
            return 'portal';
        }

        foreach (self::definitions() as $key => $definition) {
            if (in_array($page, (array)($definition['active_pages'] ?? []), true)) {
                return (string)$key;
            }
        }

        return '';
    }

    /**
     * Context navigation appears only inside a DIAR module. It never duplicates
     * the six primary sidebar destinations; it links only to child pages of the
     * current module.
     *
     * @return array<int,array<string,mixed>>
     */
    public static function contextTabs(string $activePage): array
    {
        $isAr = current_lang() === 'ar';
        $tr = static function (string $en, string $ar) use ($isAr): string {
            return $isAr ? $ar : $en;
        };

        $moduleKey = self::moduleKeyForPage($activePage);
        $catalogue = [
            'statistics' => [
                ['page' => 'diar-statistics', 'label' => $tr('Overview', 'نظرة عامة'), 'active_pages' => ['diar-statistics'], 'permissions' => ['diar.statistics.view', 'diar.daily_fact.view', 'diar.movement_dictionary.view']],
                ['page' => 'diar-daily-facts', 'label' => $tr('Daily Movement Summary', 'ملخص الحركات اليومية'), 'active_pages' => ['diar-daily-facts'], 'permissions' => ['diar.daily_fact.view']],
                ['page' => 'diar-movement-dictionary', 'label' => $tr('Movement Types', 'أنواع الحركات'), 'active_pages' => ['diar-movement-dictionary'], 'permissions' => ['diar.movement_dictionary.view']],
                ['page' => 'diar-statistical-profiles', 'label' => $tr('Expected Movement Patterns', 'الأنماط المتوقعة للحركة'), 'active_pages' => ['diar-statistical-profiles'], 'permissions' => ['diar.command.view']],
            ],
            'cases' => [
                ['page' => 'diar-cases', 'label' => $tr('Monthly Cases', 'الحالات الشهرية'), 'active_pages' => ['diar-cases'], 'permissions' => ['diar.cases.view']],
                ['page' => 'diar-anomaly-candidates', 'label' => $tr('Movements Awaiting Review', 'حركات بانتظار المراجعة'), 'active_pages' => ['diar-anomaly-candidates'], 'permissions' => ['diar.command.view']],
                ['page' => 'diar-case-evidence', 'label' => $tr('Case Evidence', 'أدلة الحالة'), 'active_pages' => ['diar-case-evidence'], 'permissions' => ['diar.cases.view'], 'active_only' => true],
            ],
            'investigation' => [
                ['page' => 'diar-investigation-workspace', 'label' => $tr('Workflow Overview', 'نظرة على سير العمل'), 'active_pages' => ['diar-investigation-workspace'], 'permissions' => ['diar.investigation.view']],
                ['page' => 'diar-investigations', 'label' => $tr('Cases & Events Queue', 'قائمة القضايا والأحداث'), 'active_pages' => ['diar-investigations', 'diar-investigation'], 'permissions' => ['diar.investigation.view']],
            ],
            'governance' => [
                ['page' => 'diar-governance', 'label' => $tr('Overview', 'نظرة عامة'), 'active_pages' => ['diar-governance'], 'permissions' => ['diar.governance.view']],
                ['page' => 'diar-rules', 'label' => $tr('Rules & Thresholds', 'القواعد والحدود'), 'active_pages' => ['diar-rules'], 'permissions' => ['diar.rules.view']],
                ['page' => 'diar-engine-runs', 'label' => $tr('Processing Status', 'حالة المعالجة'), 'active_pages' => ['diar-engine-runs'], 'permissions' => ['diar.engine_runs.view']],
                ['page' => 'diar-command-center', 'label' => $tr('Operational Monitoring', 'المتابعة التشغيلية'), 'active_pages' => ['diar-command-center'], 'permissions' => ['diar.command.view']],
                ['page' => 'access-control', 'label' => $tr('Users & Roles', 'المستخدمون والأدوار'), 'active_pages' => ['access-control'], 'permissions' => ['security.access_control.manage']],
            ],
        ];

        $tabs = [];
        foreach ((array)($catalogue[$moduleKey] ?? []) as $row) {
            $policy = new DiarAccessPolicy();
            if (!$policy->canOpenRoute((string)($row['page'] ?? ''))) {
                continue;
            }

            $row['active'] = in_array($activePage, (array)($row['active_pages'] ?? []), true);
            if (!empty($row['active_only']) && empty($row['active'])) {
                continue;
            }
            if ((string)($row['page'] ?? '') === 'diar-case-evidence' && !empty($row['active'])) {
                $params = [];
                foreach (['case','hospital','source_db','snapshot_id','month_case_id','return'] as $key) {
                    $value = trim((string)Request::get($key, ''));
                    if ($value !== '') {
                        $params[$key] = $value;
                    }
                }
                $row['params'] = $params;
            }
            $tabs[] = $row;
        }

        return count($tabs) > 1 ? $tabs : [];
    }

    public static function canView(string $module): bool
    {
        return (new DiarAccessPolicy())->canViewModule($module);
    }

    public static function canOpenPortal(): bool
    {
        return (new DiarAccessPolicy())->canOpenPortal();
    }

    /** @return array<string,mixed> */
    public static function module(string $key): array
    {
        $definitions = self::definitions();
        if (!is_array($definitions[$key] ?? null)) {
            return [];
        }
        $definition = $definitions[$key];
        $definition['subpages'] = self::visibleSubpages($key, (array)($definition['subpages'] ?? []));
        return $definition;
    }

    /** @param array<int,string> $defaults @return array<int,string> */
    private static function visibleSubpages(string $module, array $defaults): array
    {
        if ($module !== 'investigation') {
            return $defaults;
        }
        $isAr = current_lang() === 'ar';
        $tr = static function (string $en, string $ar) use ($isAr): string { return $isAr ? $ar : $en; };
        $policy = new DiarAccessPolicy();
        if ($policy->isDeveloper()) {
            return $defaults;
        }
        if ($policy->hasRole('DIAR_INVESTIGATOR')) {
            return [
                $tr('My assigned cases', 'قضاياي المسندة'),
                $tr('Evidence and information requests', 'الأدلة وطلبات المعلومات'),
                $tr('Proposed findings', 'النتائج المقترحة'),
                $tr('Case activity history', 'سجل نشاط القضية'),
            ];
        }
        if ($policy->hasRole('DIAR_INV_SUPERVISOR')) {
            return [
                $tr('Team investigation queue', 'قائمة تحقيقات الفريق'),
                $tr('Assignment and review', 'التعيين والمراجعة'),
                $tr('Supervisor decisions', 'قرارات المشرف'),
                $tr('Corrective actions', 'الإجراءات التصحيحية'),
            ];
        }
        if ($policy->hasRole('DIAR_READ_ONLY_AUDITOR')) {
            return [
                $tr('Cases and preserved evidence', 'القضايا والأدلة المحفوظة'),
                $tr('Findings and approvals — view only', 'النتائج والاعتمادات — عرض فقط'),
                $tr('Corrective actions — view only', 'الإجراءات التصحيحية — عرض فقط'),
                $tr('Investigation audit history', 'سجل تدقيق التحقيق'),
            ];
        }
        return $defaults;
    }

    /** @return array<string,array<string,mixed>> */
    public static function definitions(): array
    {
        $isAr = current_lang() === 'ar';
        $tr = static function (string $en, string $ar) use ($isAr): string {
            return $isAr ? $ar : $en;
        };

        return [
            'executive' => [
                'number' => 1,
                'label' => $tr('Executive Dashboard', 'لوحة الإدارة العليا'),
                'sidebar_label' => $tr('Executive Dashboard', 'لوحة الإدارة العليا'),
                'short_label' => $tr('Executive', 'التنفيذي'),
                'description' => $tr(
                    'Strategic overview, risk exposure, key findings and decision priorities.',
                    'عرض استراتيجي للمخاطر والنتائج المهمة وأولويات القرار.'
                ),
                'route' => 'diar-executive-overview',
                'icon' => '◉',
                'sidebar_icon' => '◉',
                'tone' => 'navy',
                'status' => 'LIVE',
                'permissions' => ['diar.executive.view'],
                'active_pages' => ['diar-executive-overview'],
                'subpages' => [
                    $tr('Executive overview', 'الملخص التنفيذي'),
                    $tr('Trends & key findings', 'الاتجاهات والنتائج المهمة'),
                    $tr('Decision agenda', 'أجندة القرارات'),
                    $tr('Hospital comparison', 'مقارنة المستشفيات'),
                ],
                'role_labels' => [
                    $tr('Executive Viewer', 'المستعرض التنفيذي'),
                    $tr('Audit Director', 'مدير التدقيق'),
                    $tr('Independent Reviewer', 'المراجع المستقل'),
                    $tr('Platform Developer', 'مطور المنصة'),
                ],
            ],
            'statistics' => [
                'number' => 2,
                'label' => $tr('Annual Statistics', 'الإحصاءات السنوية'),
                'sidebar_label' => $tr('Annual Statistics', 'الإحصاءات السنوية'),
                'short_label' => $tr('Statistics', 'الإحصاءات'),
                'description' => $tr(
                    'Annual item, store and movement analysis separated from case decisions.',
                    'تحليل سنوي للأصناف والمخازن والحركات منفصل عن قرارات القضايا.'
                ),
                'route' => 'diar-statistics',
                'icon' => '▥',
                'sidebar_icon' => '▥',
                'tone' => 'teal',
                'status' => 'Available',
                'permissions' => ['diar.statistics.view', 'diar.daily_fact.view', 'diar.movement_dictionary.view'],
                'active_pages' => ['diar-statistics', 'diar-daily-facts', 'diar-movement-dictionary', 'diar-statistical-profiles'],
                'subpages' => [
                    $tr('Annual item statistics', 'إحصاءات الأصناف السنوية'),
                    $tr('Store analysis', 'تحليل المخازن'),
                    $tr('Statistical comparisons', 'المقارنات الإحصائية'),
                    $tr('Movement dictionary', 'أنواع الحركات'),
                ],
                'role_labels' => [
                    $tr('Statistical Analyst', 'المحلل الإحصائي'),
                    $tr('Audit Director', 'مدير التدقيق'),
                    $tr('Independent Reviewer', 'المراجع المستقل'),
                    $tr('Platform Developer', 'مطور المنصة'),
                ],
            ],
            'cases' => [
                'number' => 3,
                'label' => $tr('Suspicious Cases', 'الحالات المشتبه بها'),
                'sidebar_label' => $tr('Suspicious Cases', 'الحالات المشتبه بها'),
                'short_label' => $tr('Cases', 'الحالات'),
                'description' => $tr(
                    'Search recorded unusual movements, set review priorities and open the supporting evidence.',
                    'البحث في الحركات غير المعتادة المسجلة وتحديد أولويات المراجعة وفتح الأدلة الداعمة.'
                ),
                'route' => 'diar-cases',
                'icon' => '⌕',
                'sidebar_icon' => '⌕',
                'tone' => 'purple',
                'status' => 'LIVE',
                'permissions' => ['diar.cases.view'],
                'active_pages' => ['diar-cases', 'diar-anomaly-candidates', 'diar-case-evidence'],
                'subpages' => [
                    $tr('Case search', 'بحث الحالات'),
                    $tr('Critical cases', 'الحالات الحرجة'),
                    $tr('Event groups', 'مجموعات الأحداث'),
                    $tr('Case details', 'تفاصيل الحالة'),
                ],
                'role_labels' => [
                    $tr('Investigation Supervisor', 'مشرف التحقيق'),
                    $tr('Audit Director', 'مدير التدقيق'),
                    $tr('Independent Reviewer', 'المراجع المستقل'),
                    $tr('Platform Developer', 'مطور المنصة'),
                ],
            ],
            'investigation' => [
                'number' => 4,
                'label' => $tr('Investigation & Follow-up', 'التحقيق والمتابعة'),
                'sidebar_label' => $tr('Investigations', 'التحقيقات'),
                'short_label' => $tr('Investigation', 'التحقيق'),
                'description' => $tr(
                    'Assignments, evidence, findings, approvals, SLA and corrective actions.',
                    'التعيينات والأدلة والنتائج والاعتمادات وSLA والإجراءات التصحيحية.'
                ),
                'route' => 'diar-investigations',
                'icon' => '◫',
                'sidebar_icon' => '◫',
                'tone' => 'amber',
                'status' => 'LIVE',
                'permissions' => ['diar.investigation.view'],
                'active_pages' => ['diar-investigation-workspace', 'diar-investigations', 'diar-investigation'],
                'subpages' => [
                    $tr('Workflow overview', 'نظرة على سير العمل'),
                    $tr('Cases & events queue', 'قائمة القضايا والأحداث'),
                    $tr('Findings & approvals', 'النتائج والاعتمادات'),
                    $tr('Corrective actions', 'الإجراءات التصحيحية'),
                ],
                'role_labels' => [
                    $tr('Investigator', 'المحقق'),
                    $tr('Investigation Supervisor', 'مشرف التحقيق'),
                    $tr('Audit Director', 'مدير التدقيق'),
                    $tr('Independent Reviewer', 'المراجع المستقل'),
                    $tr('Platform Developer', 'مطور المنصة'),
                ],
            ],
            'reports' => [
                'number' => 5,
                'label' => $tr('Reports & Presentations', 'التقارير والعروض'),
                'sidebar_label' => $tr('Reports & Presentations', 'التقارير والعروض'),
                'short_label' => $tr('Reports', 'التقارير'),
                'description' => $tr(
                    'Executive reporting, report preview and approved monthly downloads.',
                    'تقارير تنفيذية ومعاينة التقارير وتنزيل التقارير الشهرية المعتمدة.'
                ),
                'route' => 'diar-reports',
                'icon' => '▤',
                'sidebar_icon' => '▤',
                'tone' => 'blue',
                'status' => 'Available',
                'permissions' => ['diar.reports.view'],
                'active_pages' => ['diar-reports'],
                'subpages' => [
                    $tr('Report preview', 'معاينة التقرير'),
                    $tr('Executive report', 'التقرير التنفيذي'),
                    $tr('Report downloads', 'تنزيل التقارير'),
                    $tr('Monthly report history', 'سجل التقارير الشهرية'),
                ],
                'role_labels' => [
                    $tr('Executive Viewer', 'المستعرض التنفيذي'),
                    $tr('Audit Director', 'مدير التدقيق'),
                    $tr('Statistical Analyst', 'المحلل الإحصائي'),
                    $tr('Independent Reviewer', 'المراجع المستقل'),
                    $tr('Platform Developer', 'مطور المنصة'),
                ],
            ],
            'governance' => [
                'number' => 6,
                'label' => $tr('Administration & Controls', 'الإدارة والضوابط'),
                'sidebar_label' => $tr('Administration & Controls', 'الإدارة والضوابط'),
                'short_label' => $tr('Governance', 'الحوكمة'),
                'description' => $tr(
                    'Review policies, processing status, access controls, users, schedules and audit history.',
                    'سياسات المراجعة وحالة المعالجة وضوابط الوصول والمستخدمون والجداول وسجل التدقيق.'
                ),
                'route' => 'diar-governance',
                'icon' => '⚙',
                'sidebar_icon' => '⚙',
                'tone' => 'green',
                'status' => 'LIVE',
                'permissions' => ['diar.governance.view'],
                'active_pages' => ['diar-governance', 'diar-rules', 'diar-engine-runs', 'diar-command-center'],
                'subpages' => [
                    $tr('Rules & thresholds', 'القواعد والحدود'),
                    $tr('Users & roles', 'المستخدمون والأدوار'),
                    $tr('Processing schedule & data quality', 'جدول المعالجة وجودة البيانات'),
                    $tr('Audit history', 'سجل التدقيق'),
                ],
                'role_labels' => [
                    $tr('System Administrator', 'مسؤول النظام'),
                    $tr('Platform Developer', 'مطور المنصة'),
                ],
            ],
        ];
    }

    /** @return array<int,array<string,mixed>> */
    public static function accessMatrixRoles(): array
    {
        $isAr = current_lang() === 'ar';
        $tr = static function (string $en, string $ar) use ($isAr): string {
            return $isAr ? $ar : $en;
        };

        return [
            ['code' => 'EXEC', 'label' => $tr('Executive Viewer', 'المستعرض التنفيذي'), 'tone' => 'navy', 'access' => ['executive' => 'full', 'statistics' => 'none', 'cases' => 'none', 'investigation' => 'none', 'reports' => 'full', 'governance' => 'none']],
            ['code' => 'AUD', 'label' => $tr('Audit Director', 'مدير التدقيق'), 'tone' => 'purple', 'access' => ['executive' => 'full', 'statistics' => 'full', 'cases' => 'full', 'investigation' => 'full', 'reports' => 'full', 'governance' => 'none']],
            ['code' => 'SUP', 'label' => $tr('Investigation Supervisor', 'مشرف التحقيق'), 'tone' => 'indigo', 'access' => ['executive' => 'none', 'statistics' => 'none', 'cases' => 'full', 'investigation' => 'full', 'reports' => 'none', 'governance' => 'none']],
            ['code' => 'INV', 'label' => $tr('Investigator', 'المحقق'), 'tone' => 'amber', 'access' => ['executive' => 'none', 'statistics' => 'none', 'cases' => 'none', 'investigation' => 'full', 'reports' => 'none', 'governance' => 'none']],
            ['code' => 'STAT', 'label' => $tr('Statistical Analyst', 'المحلل الإحصائي'), 'tone' => 'teal', 'access' => ['executive' => 'none', 'statistics' => 'full', 'cases' => 'none', 'investigation' => 'none', 'reports' => 'full', 'governance' => 'none']],
            ['code' => 'ADMIN', 'label' => $tr('System Administrator', 'مسؤول النظام'), 'tone' => 'blue', 'access' => ['executive' => 'none', 'statistics' => 'none', 'cases' => 'none', 'investigation' => 'none', 'reports' => 'none', 'governance' => 'full']],
            ['code' => 'DEV', 'label' => $tr('Platform Developer', 'مطور المنصة'), 'tone' => 'blue', 'access' => ['executive' => 'full', 'statistics' => 'full', 'cases' => 'full', 'investigation' => 'full', 'reports' => 'full', 'governance' => 'full']],
            ['code' => 'DEV+', 'label' => $tr('Elevated Support', 'الدعم الموسع'), 'tone' => 'purple', 'access' => ['executive' => 'full', 'statistics' => 'full', 'cases' => 'full', 'investigation' => 'full', 'reports' => 'full', 'governance' => 'full']],
            ['code' => 'RO', 'label' => $tr('Independent Reviewer', 'المراجع المستقل'), 'tone' => 'slate', 'access' => ['executive' => 'full', 'statistics' => 'full', 'cases' => 'full', 'investigation' => 'limited', 'reports' => 'full', 'governance' => 'none']],
        ];
    }

    /** @return array<int,array<string,mixed>> */
    public static function roleTemplates(): array
    {
        return [
            [
                'code' => 'DIAR_EXECUTIVE_VIEWER',
                'name_en' => 'DIAR Executive Viewer',
                'name_ar' => 'مستعرض DIAR التنفيذي',
                'description_en' => 'Executive views and approved monthly reports without investigation or administration access.',
                'description_ar' => 'العروض التنفيذية والتقارير الشهرية المعتمدة دون صلاحيات التحقيق أو الإدارة.',
                'all_branches' => true,
                'permissions' => ['diar.portal.view', 'diar.executive.view', 'diar.reports.view'],
            ],
            [
                'code' => 'DIAR_AUDIT_DIRECTOR',
                'name_en' => 'DIAR Audit & Compliance Director',
                'name_ar' => 'مدير التدقيق والامتثال في DIAR',
                'description_en' => 'Full case oversight, assignment, review, escalation, closure and executive reporting.',
                'description_ar' => 'إشراف كامل على القضايا والتعيين والمراجعة والتصعيد والإغلاق والتقارير التنفيذية.',
                'all_branches' => true,
                'permissions' => ['diar.portal.view', 'diar.executive.view', 'diar.statistics.view', 'diar.daily_fact.view', 'diar.movement_dictionary.view', 'diar.cases.view', 'diar.investigation.view', 'diar.investigation.assign', 'diar.investigation.review', 'diar.investigation.evidence', 'diar.investigation.request_information', 'diar.investigation.finding.propose', 'diar.investigation.supervisor_review', 'diar.investigation.management_approve', 'diar.investigation.corrective_action', 'diar.investigation.escalate', 'diar.investigation.close', 'diar.investigation.reopen', 'diar.reports.view'],
            ],
            [
                'code' => 'DIAR_INV_SUPERVISOR',
                'name_en' => 'DIAR Investigation Supervisor',
                'name_ar' => 'مشرف تحقيقات DIAR',
                'description_en' => 'Team queue management, assignment, review, escalation and closure within assigned branches.',
                'description_ar' => 'إدارة قائمة الفريق والتعيين والمراجعة والتصعيد والإغلاق ضمن الفروع المسندة.',
                'all_branches' => false,
                'permissions' => ['diar.portal.view', 'diar.cases.view', 'diar.investigation.view', 'diar.investigation.assign', 'diar.investigation.review', 'diar.investigation.evidence', 'diar.investigation.request_information', 'diar.investigation.finding.propose', 'diar.investigation.supervisor_review', 'diar.investigation.corrective_action', 'diar.investigation.escalate', 'diar.investigation.close'],
            ],
            [
                'code' => 'DIAR_INVESTIGATOR',
                'name_en' => 'DIAR Investigator',
                'name_ar' => 'محقق DIAR',
                'description_en' => 'Reviews assigned cases, records evidence and proposes findings without final approval.',
                'description_ar' => 'يراجع القضايا المسندة ويسجل الأدلة ويقترح النتائج دون اعتماد نهائي.',
                'all_branches' => false,
                'permissions' => ['diar.portal.view', 'diar.investigation.view', 'diar.investigation.assigned.view', 'diar.case_evidence.assigned.view', 'diar.investigation.review', 'diar.investigation.evidence', 'diar.investigation.request_information', 'diar.investigation.finding.propose', 'diar.investigation.escalate'],
            ],
            [
                'code' => 'DIAR_STAT_ANALYST',
                'name_en' => 'DIAR Statistical Analyst',
                'name_ar' => 'محلل DIAR الإحصائي',
                'description_en' => 'Independent statistical and movement analysis without authority to decide investigation outcomes.',
                'description_ar' => 'تحليل مستقل للإحصاءات والحركات دون صلاحية اتخاذ قرارات نتائج التحقيق.',
                'all_branches' => true,
                'permissions' => ['diar.portal.view', 'diar.statistics.view', 'diar.daily_fact.view', 'diar.movement_dictionary.view', 'diar.engine_runs.view', 'diar.rules.view', 'diar.reports.view'],
            ],
            [
                'code' => 'DIAR_PLATFORM_DEVELOPER',
                'name_en' => 'Medication Risk Intelligence Developer',
                'name_ar' => 'مطور ومشرف منظومة ذكاء مخاطر الأدوية',
                'description_en' => 'Full visibility across every DIAR module, route and hospital with official workflow actions kept read-only.',
                'description_ar' => 'رؤية كاملة لكل وحدات ومسارات ومستشفيات DIAR مع إبقاء الإجراءات الرسمية للقراءة فقط.',
                'all_branches' => true,
                'permissions' => ['diar.portal.view', 'diar.executive.view', 'diar.statistics.view', 'diar.cases.view', 'diar.investigation.view', 'diar.investigation.assigned.view', 'diar.case_evidence.assigned.view', 'diar.reports.view', 'diar.governance.view', 'diar.command.view', 'diar.engine_runs.view', 'diar.movement_dictionary.view', 'diar.daily_fact.view', 'diar.rules.view', 'diar.rules.manage', 'diar.rules.dry_run', 'diar.rules.approve', 'diar.rules.activate', 'technical.evidence.view', 'security.access_control.manage', 'diar.developer.full_access'],
            ],
            [
                'code' => 'DIAR_PLATFORM_DEVELOPER_ELEVATED',
                'name_en' => 'Medication Risk Intelligence Developer — Elevated Support',
                'name_ar' => 'مطور DIAR بصلاحية دعم موسعة',
                'description_en' => 'Temporary full support access including controlled workflow actions; every action remains auditable.',
                'description_ar' => 'وصول دعم مؤقت كامل يشمل الإجراءات المحكومة مع تسجيل كل عملية في سجل التدقيق.',
                'all_branches' => true,
                'permissions' => ['diar.portal.view', 'diar.executive.view', 'diar.statistics.view', 'diar.cases.view', 'diar.investigation.view', 'diar.investigation.assigned.view', 'diar.case_evidence.assigned.view', 'diar.investigation.assign', 'diar.investigation.review', 'diar.investigation.evidence', 'diar.investigation.request_information', 'diar.investigation.finding.propose', 'diar.investigation.supervisor_review', 'diar.investigation.management_approve', 'diar.investigation.corrective_action', 'diar.investigation.escalate', 'diar.investigation.close', 'diar.investigation.reopen', 'diar.reports.view', 'diar.governance.view', 'diar.command.view', 'diar.engine_runs.view', 'diar.movement_dictionary.view', 'diar.daily_fact.view', 'diar.rules.view', 'diar.rules.manage', 'diar.rules.dry_run', 'diar.rules.approve', 'diar.rules.activate', 'technical.evidence.view', 'security.access_control.manage', 'diar.developer.full_access'],
            ],
            [
                'code' => 'DIAR_READ_ONLY_AUDITOR',
                'name_en' => 'DIAR Independent Reviewer',
                'name_ar' => 'مراجع DIAR مستقل',
                'description_en' => 'Broad evidence and report visibility with no write, assignment, approval or settings rights.',
                'description_ar' => 'اطلاع واسع على الأدلة والتقارير دون كتابة أو تعيين أو اعتماد أو صلاحيات إعدادات.',
                'all_branches' => true,
                'permissions' => ['diar.portal.view', 'diar.executive.view', 'diar.statistics.view', 'diar.daily_fact.view', 'diar.movement_dictionary.view', 'diar.cases.view', 'diar.investigation.view', 'diar.reports.view', 'technical.evidence.view'],
            ],
        ];
    }

    /** @return array<int,array<string,string>> */
    public static function reportSheets(): array
    {
        return [
            ['code' => 'summary', 'en' => 'Summary', 'ar' => 'الملخص'],
            ['code' => 'daily_distribution', 'en' => 'Daily Distribution', 'ar' => 'التوزيع اليومي'],
            ['code' => 'critical_cases', 'en' => 'Critical Cases', 'ar' => 'الحالات الحرجة'],
            ['code' => 'all_cases', 'en' => 'All Cases', 'ar' => 'جميع الحالات'],
            ['code' => 'movement_details', 'en' => 'Movement Details', 'ar' => 'تفاصيل الحركات'],
            ['code' => 'store_analysis', 'en' => 'Store Analysis', 'ar' => 'تحليل المخازن'],
            ['code' => 'movement_type_analysis', 'en' => 'Movement Type Analysis', 'ar' => 'تحليل أنواع الحركات'],
            ['code' => 'item_analysis', 'en' => 'Item Analysis', 'ar' => 'تحليل الأصناف'],
            ['code' => 'user_associations', 'en' => 'Related Users', 'ar' => 'المستخدمون المرتبطون'],
            ['code' => 'statistical_basis', 'en' => 'Statistical Basis', 'ar' => 'الأساس الإحصائي'],
            ['code' => 'statistical_comparisons', 'en' => 'Historical Comparisons', 'ar' => 'المقارنات الإحصائية'],
            ['code' => 'methodology_controls', 'en' => 'Methodology & Controls', 'ar' => 'المنهجية والضوابط'],
        ];
    }
}
