<?php
declare(strict_types=1);

use App\Core\EventBus;
use App\Modules\PlayerApi\Services\PlayerNotificationService;

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

EventBus::listen('player.booking_confirmed', function (array $data) {
    PlayerNotificationService::notify(
        (int) $data['player_id'],
        'booking',
        'تم تأكيد الحجز',
        'تم تأكيد حجزك في ' . ($data['facility_name'] ?? '') . ' بتاريخ ' . ($data['date'] ?? ''),
        $data
    );
});

EventBus::listen('player.transfer_result', function (array $data) {
    PlayerNotificationService::notify(
        (int) $data['player_id'],
        'sport',
        'نتيجة طلب النقل',
        ($data['status'] === 'approved' ? 'تمت الموافقة على' : 'تم رفض') . ' طلب نقلك',
        $data
    );
});

EventBus::listen('player.booking_cancelled', function (array $data) {
    PlayerNotificationService::notify(
        (int) $data['player_id'],
        'booking',
        'تم إلغاء الحجز',
        'تم إلغاء حجزك في ' . ($data['facility_name'] ?? '') . ' بتاريخ ' . ($data['date'] ?? ''),
        $data
    );
});

EventBus::listen('player.free_time_entry', function (array $data) {
    PlayerNotificationService::notify(
        (int) $data['player_id'],
        'booking',
        'دخول وقت حر',
        'تم تسجيل دخولك في ' . ($data['facility_name'] ?? ''),
        $data
    );
});

EventBus::listen('player.evaluation_completed', function (array $data) {
    PlayerNotificationService::notify(
        (int) $data['player_id'],
        'rating',
        'تم تقييمك',
        'تم تقييمك من المدرب. يمكنك الاطلاع على نتيجتك من خلال التطبيق.',
        $data
    );
});

EventBus::listen('player.medical_expiring', function (array $data) {
    PlayerNotificationService::notify(
        (int) $data['player_id'],
        'medical',
        'انتهاء كشف طبي',
        'تنبيه: كشفك الطبي سينتهي خلال 7 أيام. يرجى تجديده لمواصلة التدريب.',
        $data
    );
});

EventBus::listen('facility.attendance_absent', function (array $data) {
    if (($data['entity_type'] ?? '') === 'trainee' && !empty($data['entity_id'])) {
        $db = \App\Core\App::getInstance()->db();
        $player = $db->selectOne("SELECT id FROM players WHERE id = ?", [(int) $data['entity_id']]);
        if ($player) {
            PlayerNotificationService::notify(
                (int) $data['entity_id'],
                'attendance',
                'تسجيل غياب',
                'تم تسجيل غيابك يوم ' . ($data['date'] ?? date('Y-m-d')),
                $data
            );
        }
    }
});
