<?php
/**
 * سودانا — ProviderDecisionEngine v21
 *
 * يُحوِّل فهم النظام للسؤال → قرار تنفيذي واضح
 *
 * الفلسفة:
 *   AI يُجيب → لكن النظام يُقرِّر → المستخدم يختار من خيارات جاهزة
 *
 * ثلاثة أنواع قرار:
 *   REAL     → مزود حقيقي إلزامي (طب، خدمات تنفيذية)
 *   AI_FIRST → AI يُجيب + مزود اختياري (تعليم، قانون)
 *   AI       → AI فقط (أسئلة معلومات، تعليم نظري)
 */
class ProviderDecisionEngine {

    /**
     * يحدد نوع الاستجابة بناءً على القطاع والنية
     *
     * @param string $sector   القطاع من InferenceEngine أو detectService
     * @param string $question السؤال الأصلي
     * @param array  $context  سياق المستخدم
     * @return array ['type'=>'REAL|AI_FIRST|AI', 'mandatory'=>bool, 'reason'=>string]
     */
    public static function decide(string $sector, string $question = '', array $context = []): array {
        $q = mb_strtolower($question);

        // ── EMERGENCY: دائماً حقيقي + فوري ─────────────────────
        if ($sector === 'emergency' || self::isEmergency($q)) {
            return [
                'type'      => 'REAL',
                'mandatory' => true,
                'urgent'    => true,
                'reason'    => 'طوارئ — يحتاج تدخلاً فورياً',
                'fallback_action' => ['label'=>'اتصل 999 الآن','url'=>'tel:999','icon'=>'🚨'],
            ];
        }

        // ── MEDICAL + ENGINEERING + AGRICULTURE ─────────────────────
        if (in_array($sector, ['medical', 'pharmacy', 'family', 'engineering', 'agriculture'])) {
            return [
                'type'      => 'REAL',
                'mandatory' => true,
                'reason'    => 'الاستفسار الطبي يتطلب متخصصاً حقيقياً',
                'cta_label' => 'احجز مع طبيب',
                'cta_icon'  => '👨‍⚕️',
                'empty_cta' => 'انضم كطبيب موثّق — كن الأول',
            ];
        }

        // ── LEGAL: هجين — AI يشرح + مزود اختياري ─────────────
        if ($sector === 'legal') {
            $isExecution = self::isExecutionIntent($q, ['تقديم','أرفع قضية','أوثق','أسجل','طلاق','عقد ملزم','استشارة قانونية','محامي','محاماة','عقد','استشارة','مساعدة قانونية']);
            return [
                'type'           => $isExecution ? 'REAL' : 'AI_FIRST',
                'mandatory'      => $isExecution,
                'reason'         => $isExecution ? 'تنفيذ قانوني يحتاج محامياً' : 'AI يشرح + محامٍ اختياري',
                'cta_label'      => 'استشر محامياً',
                'cta_icon'       => '⚖️',
                'empty_cta'      => 'انضم كمستشار قانوني',
            ];
        }

        // ── EDUCATION/ACADEMY: AI أولاً + معلم اختياري ──────────
        if ($sector === 'academy') {
            $needsTutor = self::isExecutionIntent($q, ['معلم','مدرس','أساعدني','شرح مباشر','جلسة']);
            return [
                'type'      => $needsTutor ? 'AI_FIRST' : 'AI',
                'mandatory' => false,
                'reason'    => $needsTutor ? 'AI + معلم اختياري' : 'سؤال أكاديمي — AI يكفي',
                'cta_label' => $needsTutor ? 'احجز جلسة مع معلم' : null,
                'cta_icon'  => '🎓',
            ];
        }

        // ── BUSINESS / BDE: AI + خبير اختياري ───────────────────
        if (in_array($sector, ['business', 'bde', 'productivity'])) {
            $needsExpert = self::isExecutionIntent($q, ['استشارة','عقد','وثيقة','خطة','شراكة','مستثمر','مشروع','خبير أعمال','مستشار تجاري','مستشار أعمال']);
            return [
                'type'      => $needsExpert ? 'REAL' : 'AI_FIRST',
                'mandatory' => false,
                'reason'    => $needsExpert ? 'AI + خبير أعمال اختياري' : 'سؤال معلومات أعمال',
                'cta_label' => $needsExpert ? 'استشر خبير أعمال' : null,
                'cta_icon'  => '💼',
            ];
        }

        // ── SERVICES / DIRECTORY: هجين ───────────────────────────
        if (in_array($sector, ['community', 'market', 'pharmacy'])) {
            $isHowTo = self::isHowToIntent($q);
            return [
                'type'      => $isHowTo ? 'AI' : 'AI_FIRST',
                'mandatory' => false,
                'reason'    => $isHowTo ? 'سؤال كيفية — AI يكفي' : 'طلب خدمة — اقترح مزوداً',
            ];
        }

        // ── MENTAL HEALTH: AI + متخصص ────────────────────────────
        if ($sector === 'mental') {
            return [
                'type'      => 'AI_FIRST',
                'mandatory' => false,
                'reason'    => 'دعم نفسي — AI + متخصص اختياري',
                'cta_label' => 'تحدث مع متخصص نفسي',
                'cta_icon'  => '💙',
            ];
        }

        // v23 FIX: DEVELOPER / PLATFORM — AI يُجيب بتوجيه للـ API docs
        if ($sector === 'developer' || $sector === 'platform' || $sector === 'tech') {
            return [
                'type'      => 'AI_FIRST',
                'mandatory' => false,
                'reason'    => 'سؤال تقني/API — AI يُجيب مع توجيه للـ developer portal',
                'cta_label' => 'افتح Sudanna Agent Console',
                'cta_icon'  => '⚡',
                'cta_url'   => '/dashboard/',
            ];
        }


        // ── DEFAULT: AI فقط ──────────────────────────────────────
        return [
            'type'      => 'AI',
            'mandatory' => false,
            'reason'    => 'سؤال معلومات عام',
        ];
    }

    /**
     * هل السؤال يحتوي على نية تنفيذية (يريد فعل شيء لا مجرد معرفة)؟
     */
    private static function isExecutionIntent(string $q, array $executionWords): bool {
        foreach ($executionWords as $word) {
            if (mb_strpos($q, $word) !== false) return true;
        }
        // Pattern: "أريد/أحتاج/أبغى + فعل"
        // v22 FIX: Extended intent pattern — محتاج/عايز/عاوز/ابغى + service noun
        return (bool)@preg_match(
            '/(أريد|أحتاج|محتاج|عايز|عاوز|ابغى|ابحث\s+عن|أدور\s+على)\s+(محامي|محاماة|طبيب|دكتور|مزود|خبير|معلم|مستشار|مهندس|فني|متخصص)'
            . '|أحتاج\s+(إلى\s+)?(متخصص|مساعدة\s+فعلية|محامي|طبيب)'
            . '|مساعدة\s+قانونية|استشارة\s+قانونية/ui',
            $q
        );
    }

    /**
     * هل السؤال استعلام كيفية (how-to) لا طلب تنفيذي؟
     */
    private static function isHowToIntent(string $q): bool {
        return (bool)@preg_match('/كيف|ما هي|ما هو|شرح|اشرح|معنى|أعرف|أفهم/ui', $q);
    }

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

    /**
     * هل قرار REAL ويجب جلب مزودين؟
     */
    public static function requiresRealProvider(array $decision): bool {
        return $decision['type'] === 'REAL' || $decision['type'] === 'AI_FIRST';
    }
}
