<?php
declare(strict_types=1);

namespace App\Modules\Tutorials\Controllers;

use App\Core\Controller;
use App\Core\Request;
use App\Core\Response;

class TutorialController extends Controller
{
    private const SA_TUTORIALS = [
        'setup-discipline' => [
            'title'    => 'إنشاء لعبة رياضية جديدة',
            'subtitle' => 'تعريف نشاط رياضي في النظام',
            'icon'     => 'activity',
            'color'    => '#8B5CF6',
            'category' => 'setup',
            'order'    => 1,
        ],
        'setup-facility' => [
            'title'    => 'إنشاء مرفق ووحداته',
            'subtitle' => 'تعريف ملعب أو حمام سباحة مع الوحدات',
            'icon'     => 'building',
            'color'    => '#3B82F6',
            'category' => 'setup',
            'order'    => 2,
        ],
        'setup-time-brackets' => [
            'title'    => 'إعداد شرائح الوقت',
            'subtitle' => 'تعريف أوقات الذروة والعادية',
            'icon'     => 'clock',
            'color'    => '#06B6D4',
            'category' => 'setup',
            'order'    => 3,
        ],
        'setup-pricing' => [
            'title'    => 'إعداد قواعد التسعير',
            'subtitle' => 'ربط المرفق × الشريحة × عدد الأفراد بالسعر',
            'icon'     => 'banknote',
            'color'    => '#059669',
            'category' => 'setup',
            'order'    => 4,
        ],
        'register-coach' => [
            'title'    => 'تسجيل مدرب جديد',
            'subtitle' => 'إضافة مدرب مع تخصصاته ونظام الدفع',
            'icon'     => 'user-check',
            'color'    => '#059669',
            'category' => 'registration',
            'order'    => 5,
        ],
        'register-player' => [
            'title'    => 'تسجيل لاعب جديد',
            'subtitle' => 'تسجيل لاعب ورفع الشهادة الطبية',
            'icon'     => 'user-plus',
            'color'    => '#F59E0B',
            'category' => 'registration',
            'order'    => 6,
        ],
        'medical-workflow' => [
            'title'    => 'دورة الموافقة الطبية',
            'subtitle' => 'من الرفع حتى الاعتماد من اللجنة الطبية',
            'icon'     => 'heart-pulse',
            'color'    => '#F97316',
            'category' => 'registration',
            'order'    => 7,
        ],
        'setup-academy' => [
            'title'    => 'إنشاء أكاديمية وعقدها',
            'subtitle' => 'تسجيل أكاديمية خارجية مع عقد PDF',
            'icon'     => 'school',
            'color'    => '#8B5CF6',
            'category' => 'academy',
            'order'    => 8,
        ],
        'create-program' => [
            'title'    => 'إنشاء برنامج تدريبي',
            'subtitle' => 'تعريف برنامج بمواصفات العمر والمستوى',
            'icon'     => 'book-open',
            'color'    => '#EC4899',
            'category' => 'academy',
            'order'    => 9,
        ],
        'create-group' => [
            'title'    => 'إنشاء مجموعة تدريبية',
            'subtitle' => 'مجموعة مع مدرب وجدول أسبوعي',
            'icon'     => 'layers',
            'color'    => '#EC4899',
            'category' => 'academy',
            'order'    => 10,
        ],
        'enroll-player' => [
            'title'    => 'تسجيل لاعب في مجموعة',
            'subtitle' => 'التحاق لاعب بمجموعة تدريبية',
            'icon'     => 'user-plus',
            'color'    => '#10B981',
            'category' => 'academy',
            'order'    => 11,
        ],
        'generate-training-bookings' => [
            'title'    => 'توليد حجوزات التمارين',
            'subtitle' => 'إنشاء حجوزات تلقائية من جدول المجموعة',
            'icon'     => 'calendar-plus',
            'color'    => '#06B6D4',
            'category' => 'scheduling',
            'order'    => 12,
        ],
        'create-hourly-booking' => [
            'title'    => 'حجز ساعة ملعب',
            'subtitle' => 'حجز وحدة لوقت محدد (حجز بالساعة)',
            'icon'     => 'calendar-clock',
            'color'    => '#3B82F6',
            'category' => 'scheduling',
            'order'    => 13,
        ],
        'booking-shared-lane' => [
            'title'    => 'حجز حارة سباحة (مشترك)',
            'subtitle' => 'حجز أماكن في حارة مع آخرين',
            'icon'     => 'waves',
            'color'    => '#0EA5E9',
            'category' => 'scheduling',
            'order'    => 14,
        ],
        'conflict-detection' => [
            'title'    => 'كشف التعارضات',
            'subtitle' => 'كيف يمنع النظام الحجوزات المتعارضة',
            'icon'     => 'shield-alert',
            'color'    => '#DC2626',
            'category' => 'scheduling',
            'order'    => 15,
        ],
        'generate-subscriptions' => [
            'title'    => 'توليد الاشتراكات الشهرية',
            'subtitle' => 'إنشاء فواتير شهرية للاعبين المسجلين',
            'icon'     => 'receipt',
            'color'    => '#059669',
            'category' => 'financial',
            'order'    => 16,
        ],
        'collect-payment' => [
            'title'    => 'تحصيل اشتراك',
            'subtitle' => 'تسجيل دفع اشتراك لاعب',
            'icon'     => 'credit-card',
            'color'    => '#10B981',
            'category' => 'financial',
            'order'    => 17,
        ],
        'exempt-subscription' => [
            'title'    => 'إعفاء من اشتراك',
            'subtitle' => 'إعفاء لاعب من رسوم شهرية',
            'icon'     => 'badge-percent',
            'color'    => '#F59E0B',
            'category' => 'financial',
            'order'    => 18,
        ],
        'record-attendance' => [
            'title'    => 'تسجيل الحضور',
            'subtitle' => 'تسجيل حضور لاعبين في تمرين',
            'icon'     => 'clipboard-check',
            'color'    => '#059669',
            'category' => 'operations',
            'order'    => 19,
        ],
        'mirror-view' => [
            'title'    => 'شاشة المراية (المرافق)',
            'subtitle' => 'عرض حالة المرافق والحجوزات لحظياً',
            'icon'     => 'monitor',
            'color'    => '#6366F1',
            'category' => 'operations',
            'order'    => 20,
        ],
        'waitlist-management' => [
            'title'    => 'إدارة قائمة الانتظار',
            'subtitle' => 'إضافة لاعب لقائمة انتظار مجموعة ممتلئة',
            'icon'     => 'list-ordered',
            'color'    => '#F97316',
            'category' => 'operations',
            'order'    => 21,
        ],
        'blackout-dates' => [
            'title'    => 'حجب مواعيد (صيانة)',
            'subtitle' => 'إغلاق مرفق لفترة صيانة أو إجازة',
            'icon'     => 'calendar-x',
            'color'    => '#DC2626',
            'category' => 'operations',
            'order'    => 22,
        ],
        'full-swimming-workflow' => [
            'title'    => 'سيناريو كامل: حمام سباحة',
            'subtitle' => 'من الإعداد حتى التشغيل اليومي',
            'icon'     => 'waves',
            'color'    => '#0EA5E9',
            'category' => 'scenarios',
            'order'    => 23,
        ],
        'full-football-workflow' => [
            'title'    => 'سيناريو كامل: كرة قدم',
            'subtitle' => 'أكاديمية كرة قدم من الصفر للتشغيل',
            'icon'     => 'circle-dot',
            'color'    => '#10B981',
            'category' => 'scenarios',
            'order'    => 24,
        ],
        'full-tennis-workflow' => [
            'title'    => 'سيناريو كامل: تنس',
            'subtitle' => 'ملاعب تنس بحجز بالساعة وتمارين',
            'icon'     => 'target',
            'color'    => '#F59E0B',
            'category' => 'scenarios',
            'order'    => 25,
        ],
    ];

    private const CATEGORIES = [
        'setup'        => ['label' => 'الإعداد الأساسي',    'icon' => 'settings',       'color' => '#8B5CF6'],
        'registration' => ['label' => 'التسجيل',            'icon' => 'user-plus',      'color' => '#F59E0B'],
        'academy'      => ['label' => 'الأكاديميات والبرامج', 'icon' => 'school',        'color' => '#EC4899'],
        'scheduling'   => ['label' => 'الجدولة والحجوزات',   'icon' => 'calendar',       'color' => '#3B82F6'],
        'financial'    => ['label' => 'المالي والاشتراكات',  'icon' => 'banknote',       'color' => '#059669'],
        'operations'   => ['label' => 'التشغيل اليومي',     'icon' => 'monitor',        'color' => '#06B6D4'],
        'scenarios'    => ['label' => 'سيناريوهات كاملة',   'icon' => 'play-circle',    'color' => '#6366F1'],
    ];

    public function index(Request $request): Response
    {
        return $this->view('Tutorials.Views.index', [
            'modules' => [
                'sports-activity' => [
                    'title' => 'النشاط الرياضي',
                    'subtitle' => 'إدارة المرافق والأنشطة والأكاديميات',
                    'icon' => 'activity',
                    'color' => '#8B5CF6',
                    'count' => count(self::SA_TUTORIALS),
                ],
            ],
        ]);
    }

    public function sportsActivity(Request $request): Response
    {
        $grouped = [];
        foreach (self::SA_TUTORIALS as $slug => $tutorial) {
            $cat = $tutorial['category'];
            if (!isset($grouped[$cat])) {
                $grouped[$cat] = self::CATEGORIES[$cat];
                $grouped[$cat]['tutorials'] = [];
            }
            $grouped[$cat]['tutorials'][$slug] = $tutorial;
        }

        return $this->view('Tutorials.Views.sports_activity.index', [
            'categories' => $grouped,
            'totalCount' => count(self::SA_TUTORIALS),
        ]);
    }

    public function show(Request $request, string $slug): Response
    {
        if (!isset(self::SA_TUTORIALS[$slug])) {
            return $this->redirect('/tutorials/sports-activity')->withError('الشرح غير موجود');
        }

        $tutorial = self::SA_TUTORIALS[$slug];
        $viewFile = 'Tutorials.Views.sports_activity.' . str_replace('-', '_', $slug);

        $keys = array_keys(self::SA_TUTORIALS);
        $currentIdx = array_search($slug, $keys);
        $prev = $currentIdx > 0 ? $keys[$currentIdx - 1] : null;
        $next = $currentIdx < count($keys) - 1 ? $keys[$currentIdx + 1] : null;

        return $this->view($viewFile, [
            'tutorial'     => $tutorial,
            'slug'         => $slug,
            'prevSlug'     => $prev,
            'nextSlug'     => $next,
            'prevTitle'    => $prev ? self::SA_TUTORIALS[$prev]['title'] : null,
            'nextTitle'    => $next ? self::SA_TUTORIALS[$next]['title'] : null,
            'categories'   => self::CATEGORIES,
        ]);
    }
}
