<?php
declare(strict_types=1);

use App\Core\EventBus;
use App\Core\App;
use App\Shared\Services\PushNotificationService;

EventBus::listen('player.enrolled', function (array $data) {
    notifyParents((int) $data['player_id'], 'enrollment', 'تسجيل في مجموعة', 'تم تسجيل ابنكم في مجموعة ' . ($data['group_name'] ?? ''));
}, 50);

EventBus::listen('player.evaluation_completed', function (array $data) {
    notifyParents((int) $data['player_id'], 'evaluation', 'تقييم جديد', 'تم تقييم ابنكم. يمكنكم الاطلاع على النتيجة من التطبيق.');
}, 50);

EventBus::listen('facility.attendance_absent', function (array $data) {
    if (($data['entity_type'] ?? '') === 'trainee' && !empty($data['entity_id'])) {
        notifyParents((int) $data['entity_id'], 'attendance', 'تسجيل غياب', 'تم تسجيل غياب ابنكم يوم ' . ($data['date'] ?? date('Y-m-d')));
    }
}, 50);

EventBus::listen('player.medical_expiring', function (array $data) {
    notifyParents((int) $data['player_id'], 'medical', 'انتهاء كشف طبي', 'تنبيه: الكشف الطبي لابنكم سينتهي قريباً. يرجى تجديده.');
}, 50);

function notifyParents(int $playerId, string $type, string $title, string $body): void
{
    $db = App::getInstance()->db();

    $parents = $db->select(
        "SELECT parent_id FROM parent_player_links WHERE player_id = ?",
        [$playerId]
    );

    foreach ($parents as $link) {
        $parentId = (int) $link['parent_id'];

        $db->insert('parent_notifications_log', [
            'parent_id' => $parentId,
            'player_id' => $playerId,
            'notification_type' => $type,
            'title_ar' => $title,
            'body_ar' => $body,
            'channel' => 'push',
            'created_at' => date('Y-m-d H:i:s'),
        ]);

        PushNotificationService::send('parent', $parentId, $title, $body, [
            'type' => $type,
            'player_id' => $playerId,
        ]);
    }
}
