<?php
declare(strict_types=1);

use App\Core\Database;

return function (Database $db): void {
    $templates = [
        [
            'template_code' => 'player_enrolled',
            'name_ar' => 'تأكيد التسجيل في رياضة',
            'message_template_ar' => 'مرحباً {player_name}، تم تسجيلك بنجاح في مجموعة {group_name}. نتمنى لك تجربة ممتعة!',
            'trigger_event' => 'player.enrolled',
        ],
        [
            'template_code' => 'player_booking_confirmed',
            'name_ar' => 'تأكيد حجز مرفق',
            'message_template_ar' => 'تم تأكيد حجزك في {facility_name} بتاريخ {date} من {start_time} إلى {end_time}.',
            'trigger_event' => 'player.booking_confirmed',
        ],
        [
            'template_code' => 'player_booking_cancelled',
            'name_ar' => 'إلغاء حجز',
            'message_template_ar' => 'تم إلغاء حجزك في {facility_name} بتاريخ {date}.',
            'trigger_event' => 'player.booking_cancelled',
        ],
        [
            'template_code' => 'player_free_time_entry',
            'name_ar' => 'دخول وقت حر',
            'message_template_ar' => 'تم تسجيل دخولك في {facility_name}. استمتع بوقتك!',
            'trigger_event' => 'player.free_time_entry',
        ],
        [
            'template_code' => 'player_transfer_approved',
            'name_ar' => 'قبول طلب نقل',
            'message_template_ar' => 'تمت الموافقة على طلب نقلك إلى مجموعة {to_group_name}.',
            'trigger_event' => 'player.transfer_result',
        ],
        [
            'template_code' => 'player_evaluation_completed',
            'name_ar' => 'اكتمال التقييم',
            'message_template_ar' => 'تم تقييمك من المدرب. يمكنك الاطلاع على نتيجتك من خلال التطبيق.',
            'trigger_event' => 'player.evaluation_completed',
        ],
        [
            'template_code' => 'player_medical_expiring',
            'name_ar' => 'انتهاء كشف طبي',
            'message_template_ar' => 'تنبيه: كشفك الطبي سينتهي خلال 7 أيام. يرجى تجديده لمواصلة التدريب.',
            'trigger_event' => 'player.medical_expiring',
        ],
        [
            'template_code' => 'coach_day_off_admin',
            'name_ar' => 'طلب إجازة مدرب',
            'message_template_ar' => 'المدرب {coach_name} طلب إجازة يوم {request_date}. {sessions_count} حصص ستتأثر.',
            'trigger_event' => 'coach.day_off_requested',
        ],
        [
            'template_code' => 'coach_replacement_confirmed',
            'name_ar' => 'تأكيد مدرب بديل',
            'message_template_ar' => 'تم تأكيد المدرب {replacement_name} كبديل يوم {request_date}.',
            'trigger_event' => 'coach.replacement_confirmed',
        ],
        [
            'template_code' => 'coach_session_reminder',
            'name_ar' => 'تذكير بحصة تدريبية',
            'message_template_ar' => 'تذكير: لديك حصة تدريبية غداً الساعة {session_time} في {facility_name}.',
            'trigger_event' => 'coach.session_reminder',
        ],
        [
            'template_code' => 'facility_attendance_absent',
            'name_ar' => 'إشعار غياب',
            'message_template_ar' => 'تم تسجيل غيابك يوم {attendance_date}. إذا كان لديك عذر يرجى التواصل مع الإدارة.',
            'trigger_event' => 'facility.attendance_absent',
        ],
        [
            'template_code' => 'facility_payment_reminder',
            'name_ar' => 'تذكير بالدفع',
            'message_template_ar' => 'تذكير: يرجى سداد المستحقات المالية في أقرب وقت لتجنب إيقاف العضوية.',
            'trigger_event' => 'facility.payment_reminder',
        ],
    ];

    foreach ($templates as $t) {
        $existing = $db->selectOne(
            "SELECT id FROM sms_templates WHERE template_code = ?",
            [$t['template_code']]
        );
        if (!$existing) {
            $db->insert('sms_templates', [
                'template_code' => $t['template_code'],
                'name_ar' => $t['name_ar'],
                'message_template_ar' => $t['message_template_ar'],
                'trigger_event' => $t['trigger_event'],
                'is_active' => 1,
            ]);
        }
    }

    $triggers = [
        [
            'trigger_code' => 'player_enrolled',
            'trigger_name_ar' => 'تسجيل لاعب في رياضة',
            'event_name' => 'player.enrolled',
            'channel' => 'player_push',
            'recipient_type' => 'player',
        ],
        [
            'trigger_code' => 'player_booking_confirmed',
            'trigger_name_ar' => 'تأكيد حجز لاعب',
            'event_name' => 'player.booking_confirmed',
            'channel' => 'player_push',
            'recipient_type' => 'player',
        ],
        [
            'trigger_code' => 'player_booking_cancelled',
            'trigger_name_ar' => 'إلغاء حجز لاعب',
            'event_name' => 'player.booking_cancelled',
            'channel' => 'player_push',
            'recipient_type' => 'player',
        ],
        [
            'trigger_code' => 'player_free_time_entry',
            'trigger_name_ar' => 'دخول وقت حر',
            'event_name' => 'player.free_time_entry',
            'channel' => 'player_push',
            'recipient_type' => 'player',
        ],
        [
            'trigger_code' => 'player_transfer_result',
            'trigger_name_ar' => 'نتيجة طلب نقل',
            'event_name' => 'player.transfer_result',
            'channel' => 'player_push',
            'recipient_type' => 'player',
        ],
        [
            'trigger_code' => 'player_evaluation_completed',
            'trigger_name_ar' => 'اكتمال تقييم اللاعب',
            'event_name' => 'player.evaluation_completed',
            'channel' => 'player_push',
            'recipient_type' => 'player',
        ],
        [
            'trigger_code' => 'player_medical_expiring',
            'trigger_name_ar' => 'انتهاء كشف طبي',
            'event_name' => 'player.medical_expiring',
            'channel' => 'player_push',
            'recipient_type' => 'player',
        ],
        [
            'trigger_code' => 'coach_day_off_requested',
            'trigger_name_ar' => 'طلب إجازة مدرب - إشعار الإدارة',
            'event_name' => 'coach.day_off_requested',
            'channel' => 'sms',
            'recipient_type' => 'group_players',
        ],
        [
            'trigger_code' => 'coach_replacement_confirmed',
            'trigger_name_ar' => 'تأكيد مدرب بديل',
            'event_name' => 'coach.replacement_confirmed',
            'channel' => 'sms',
            'recipient_type' => 'coach',
        ],
        [
            'trigger_code' => 'coach_session_reminder',
            'trigger_name_ar' => 'تذكير حصة مدرب',
            'event_name' => 'coach.session_reminder',
            'channel' => 'sms',
            'recipient_type' => 'coach',
        ],
        [
            'trigger_code' => 'facility_attendance_absent',
            'trigger_name_ar' => 'إشعار غياب مرفق',
            'event_name' => 'facility.attendance_absent',
            'channel' => 'player_push',
            'recipient_type' => 'player',
        ],
        [
            'trigger_code' => 'facility_payment_reminder',
            'trigger_name_ar' => 'تذكير دفع مرفق',
            'event_name' => 'facility.payment_reminder',
            'channel' => 'sms',
            'recipient_type' => 'direct',
        ],
    ];

    foreach ($triggers as $t) {
        $existing = $db->selectOne(
            "SELECT id FROM notification_triggers WHERE trigger_code = ?",
            [$t['trigger_code']]
        );
        if (!$existing) {
            $templateRow = $db->selectOne(
                "SELECT id FROM sms_templates WHERE trigger_event = ? LIMIT 1",
                [$t['event_name']]
            );

            $db->insert('notification_triggers', [
                'trigger_code' => $t['trigger_code'],
                'trigger_name_ar' => $t['trigger_name_ar'],
                'event_name' => $t['event_name'],
                'template_id' => $templateRow ? (int) $templateRow['id'] : null,
                'is_active' => 1,
                'channel' => $t['channel'],
                'recipient_type' => $t['recipient_type'],
                'priority' => 5,
            ]);
        }
    }
};
