<?php
declare(strict_types=1);

use App\Core\Registries\MenuRegistry;
use App\Core\Registries\PermissionRegistry;
use App\Core\EventBus;
use App\Modules\ParentPortal\Services\ParentService;

MenuRegistry::register('parents', [
    'label_ar'   => 'أولياء الأمور',
    'label_en'   => 'Parents Portal',
    'icon'       => 'users',
    'route'      => '/parents',
    'permission' => 'parent.view',
    'parent'     => null,
    'order'      => 280,
    'children'   => [
        ['label_ar' => 'قائمة أولياء الأمور', 'label_en' => 'Parents List',   'route' => '/parents',        'permission' => 'parent.view',   'order' => 1],
        ['label_ar' => 'إضافة ولي أمر',       'label_en' => 'Add Parent',     'route' => '/parents/create', 'permission' => 'parent.manage', 'order' => 2],
    ],
]);

PermissionRegistry::register('parent_portal', [
    'parent.view'   => ['ar' => 'عرض أولياء الأمور',    'en' => 'View Parents'],
    'parent.manage' => ['ar' => 'إدارة أولياء الأمور',   'en' => 'Manage Parents'],
]);

EventBus::listen('session_attendance.recorded', function (array $data): void {
    $playerId = (int) ($data['player_id'] ?? 0);
    if (!$playerId) return;
    ParentService::notifyParents(
        $playerId,
        'attendance',
        'تسجيل حضور',
        'تم تسجيل حضور ابنكم/ابنتكم في جلسة التدريب بتاريخ ' . date('Y-m-d')
    );
}, -20);

EventBus::listen('player.injury_reported', function (array $data): void {
    $playerId = (int) ($data['player_id'] ?? 0);
    if (!$playerId) return;
    ParentService::notifyParents(
        $playerId,
        'injury',
        'تقرير إصابة',
        'تم تسجيل إصابة لابنكم/ابنتكم. يرجى مراجعة التفاصيل في النظام.'
    );
}, -20);

EventBus::listen('player.evaluation_submitted', function (array $data): void {
    $playerId = (int) ($data['player_id'] ?? 0);
    if (!$playerId) return;
    ParentService::notifyParents(
        $playerId,
        'evaluation',
        'تقييم جديد',
        'تم إضافة تقييم جديد لابنكم/ابنتكم. يمكنكم الاطلاع على النتائج.'
    );
}, -20);

EventBus::listen('player.achievement_earned', function (array $data): void {
    $playerId = (int) ($data['player_id'] ?? 0);
    $achievementName = $data['achievement_name'] ?? 'إنجاز جديد';
    if (!$playerId) return;
    ParentService::notifyParents(
        $playerId,
        'achievement',
        'إنجاز جديد',
        'حصل ابنكم/ابنتكم على إنجاز: ' . $achievementName
    );
}, -20);
