<?php
/**
 * سودانا — RouterEngine v1
 * ═══════════════════════════════════════════════════════════════
 * من يرد على ماذا — خارطة التوجيه الرسمية
 * ═══════════════════════════════════════════════════════════════
 *
 * FLOW:
 *   السؤال → InferenceEngine (pattern match)
 *          → [hit] → sector routing → الراد المناسب
 *          → [miss] → Gateway → AssistantEngine → AI
 *
 * SECTORS MAP:
 *   pay / gov / invest / merchant / rosca / zakat / agent
 *     → SudannaPayEngine + BillPayEngine + MerchantEngine + etc.
 *     → visitor_ask Pay handler (action buttons)
 *
 *   bank / finance / fintech
 *     → BankAnswerEngine (internal KB)
 *     → fallback: Gateway → AI
 *
 *   integration / api / webhook / partner
 *     → IntegrationEngine (partner docs + webhooks)
 *     → developer portal
 *
 *   medical / pharmacy / family
 *     → InferenceEngine medical rules
 *     → provider booking flow
 *
 *   academic / career / legal / business
 *     → InferenceEngine sector rules
 *     → AssistantEngine.getSystemPrompt(sector)
 *
 *   emergency
 *     → InferenceEngine L4 (instant, no AI wait)
 *
 *   platform / general
 *     → InferenceEngine + Gateway → AI
 */
class RouterEngine {

    // ── سجل التوجيه الكامل ─────────────────────────────────────
    public static function route(string $q, array $ctx = []): array {
        $q_lower = mb_strtolower(trim($q));

        // 1. طوارئ — أسرع من كل شيء
        if (self::isEmergency($q_lower)) {
            return ['engine'=>'InferenceEngine','layer'=>'L4_emergency','priority'=>'CRITICAL'];
        }

        // 2. Pay — محرك Sudanna Pay
        if (self::isPayQuestion($q_lower)) {
            return ['engine'=>'SudannaPayEngine','via'=>'InferenceEngine+visitor_ask','sector'=>'pay','priority'=>'HIGH',
                    'responder'=>'SudannaPayEngine::getDashboard + Pay rules','action_buttons'=>true];
        }

        // 3. بنك — BankAnswerEngine
        if (self::isBankQuestion($q_lower)) {
            return ['engine'=>'BankAnswerEngine','sector'=>'bank','priority'=>'HIGH',
                    'responder'=>'BankAnswerEngine::answer() → internal KB'];
        }

        // 4. ربط/تكامل/API — IntegrationEngine
        if (self::isIntegrationQuestion($q_lower)) {
            return ['engine'=>'IntegrationEngine','sector'=>'integration','priority'=>'HIGH',
                    'responder'=>'IntegrationEngine::getDocumentation()','portal'=>'/app/developer.php'];
        }

        // 5. استثمار — InvestmentEngine
        if (self::isInvestQuestion($q_lower)) {
            return ['engine'=>'InvestmentEngine','via'=>'InferenceEngine','sector'=>'invest','priority'=>'HIGH'];
        }

        // 6. صندوق/ROSCA — ROSCAEngine
        if (self::isROSCAQuestion($q_lower)) {
            return ['engine'=>'ROSCAEngine','via'=>'InferenceEngine','sector'=>'pay','priority'=>'HIGH'];
        }

        // 7. باقي القطاعات — InferenceEngine → Gateway → AI
        $sector = self::detectSector($q_lower);
        return [
            'engine'   => 'InferenceEngine',
            'fallback' => 'Gateway→AI',
            'sector'   => $sector,
            'priority' => 'STANDARD',
            'system_prompt' => "AssistantEngine::getSystemPrompt('{$sector}')",
        ];
    }

    public static function isEmergency(string $q): bool {
        return (bool)preg_match('/طوارئ|999|حادث.*خطير|نزيف.*غزير|توقف.*قلب|ضيق.*تنفس.*شديد|جرعة.*زائدة/ui',$q);
    }

    public static function isPayQuestion(string $q): bool {
        return (bool)preg_match('/رصيد|تحويل|ارسل.*مال|فاتورة.*كهرباء|فاتورة.*مياه|شحن.*خط|sudanna.*pay|sdpay|محفظة.*سودانا|qr.*pay|زكاة.*سودانا|صندوق.*رقمي|مضاربة.*سودانا|وكيل.*سودانا|شحن.*محفظة|سحب.*نقدي/ui',$q);
    }

    public static function isBankQuestion(string $q): bool {
        return (bool)preg_match('/بنك|حساب.*بنكي|EBS|مصرف|قرض.*بنكي|تمويل.*بنكي|بطاقة.*بنكية|IBAN|swift/ui',$q);
    }

    public static function isIntegrationQuestion(string $q): bool {
        return (bool)preg_match('/ربط.*سودانا|API.*سودانا|webhook|integration|developer.*api|payment.*gateway|white.*label|SDK|كيف.*أربط.*نظامي|بيمت.*قت.*وي|payment.*widget/ui',$q);
    }

    public static function isInvestQuestion(string $q): bool {
        return (bool)preg_match('/استثمر.*سودانا|مشاريع.*استثمارية|مضاربة|musharakah|محفظتي.*الاستثمارية/ui',$q);
    }

    public static function isROSCAQuestion(string $q): bool {
        return (bool)preg_match('/صندوق.*رقمي|الشيل|جمعية.*رقمية|rosca/ui',$q);
    }

    public static function detectSector(string $q): string {
        $map = [
            'medical'   => '/طبيب|مرض|دواء|حرارة|عيادة|صحة/ui',
            'pharmacy'  => '/صيدلية|دواء.*وصفة|روشتة/ui',
            'academic'  => '/igcse|sat|دراسة|امتحان|مادة/ui',
            'legal'     => '/قانون|حقوق|محكمة|عقد.*قانوني/ui',
            'business'  => '/مشروع|تجارة|شركة|عمل.*حر/ui',
            'mental'    => '/اكتئاب|قلق.*نفسي|وحيد/ui',
            'family'    => '/أسرة|طفل|تربية|أولاد/ui',
            'platform'  => '/سودانا|اشتراك|خطة|سعر/ui',
        ];
        foreach ($map as $sector => $pat) {
            if (preg_match($pat, $q)) return $sector;
        }
        return 'general';
    }
}
