<?php
/**
 * Edu_AI — مشاور EduBrain با context مادام‌العمر
 */
if ( ! defined( 'ABSPATH' ) ) exit;

class Edu_AI {

    public static function config(): array {
        return [
            'enabled'  => (string) get_option( 'acc_edu_ai_enabled', '1' ) === '1',
            'api_key'  => (string) get_option( 'acc_shop_ai_api_key', get_option( 'acc_edu_ai_api_key', '' ) ),
            'model'    => (string) get_option( 'acc_shop_ai_model', 'gpt-4o-mini' ),
            'base_url' => rtrim( (string) get_option( 'acc_shop_ai_base_url', 'https://api.openai.com/v1' ), '/' ),
        ];
    }

    public static function build_context( int $user_id ): array {
        require_once ACC_PATH . 'includes/helpers/education-platform.php';
        require_once ACC_PATH . 'includes/helpers/education-lifepath.php';
        $companion = Edu_LifePath::companion_state( $user_id );
        $profile   = $companion['profile'] ?? [];
        $path      = $companion['life_path'] ?? [];
        return [
            'grade'    => $companion['learner']['grade_level'] ?? '',
            'track'    => $companion['learner']['track'] ?? '',
            'identity' => $profile['identity'] ?? [],
            'career'   => $profile['career'] ?? [],
            'family'   => $profile['family'] ?? [],
            'history_count' => count( $profile['academic_history'] ?? [] ),
            'trend'    => $path['academic_trend'] ?? [],
            'budget'   => $path['budget'] ?? [],
            'phases'   => $path['phases'] ?? [],
            'plan'     => $companion['plan']['plan'] ?? null,
        ];
    }

    public static function chat( int $user_id, string $message, array $context = [] ): array {
        $cfg = self::config();
        $ctx = $user_id > 0 ? self::build_context( $user_id ) : [];
        require_once ACC_PATH . 'includes/helpers/education-companion-extras.php';
        $graph = Edu_Companion_Extras::graph_rag_context( $user_id );
        $sys = self::system_prompt( $ctx );
        $sys .= "\n\n=== Graph-RAG Context (nodes: {$graph['node_count']}, edges: {$graph['edge_count']}) ===\n" . ( $graph['text'] ?? '' );
        if ( ! $cfg['enabled'] || $cfg['api_key'] === '' ) {
            return [
                'success' => true,
                'reply'   => self::fallback_reply( $message, $ctx ),
                'engine'  => 'rules',
            ];
        }
        $messages = [ [ 'role' => 'system', 'content' => $sys ] ];
        foreach ( array_slice( $context['history'] ?? [], -8 ) as $h ) {
            $messages[] = [ 'role' => $h['role'] ?? 'user', 'content' => (string) ( $h['content'] ?? '' ) ] ;
        }
        $messages[] = [ 'role' => 'user', 'content' => $message ];

        $body = wp_json_encode( [
            'model'      => $cfg['model'],
            'messages'   => $messages,
            'max_tokens' => 900,
        ] );
        $r = wp_remote_post( $cfg['base_url'] . '/chat/completions', [
            'timeout' => 45,
            'headers' => [
                'Authorization' => 'Bearer ' . $cfg['api_key'],
                'Content-Type'  => 'application/json',
            ],
            'body' => $body,
        ] );
        if ( is_wp_error( $r ) ) {
            return [ 'success' => true, 'reply' => self::fallback_reply( $message, $ctx ), 'engine' => 'fallback' ];
        }
        $data = json_decode( wp_remote_retrieve_body( $r ), true );
        $reply = $data['choices'][0]['message']['content'] ?? '';
        if ( $reply === '' ) {
            return [ 'success' => true, 'reply' => self::fallback_reply( $message, $ctx ), 'engine' => 'fallback' ];
        }
        return [ 'success' => true, 'reply' => trim( $reply ), 'engine' => 'llm' ];
    }

    private static function system_prompt( array $ctx ): string {
        $p = "You are ACC EduBrain — lifelong educational and career advisor for Iranian students and families. Answer in Persian. "
            . "Consider grade history, career dreams, skills wanted, and family monthly budget when advising. "
            . "Be warm, practical, and balance ambition with affordability.";
        $p .= " Grade: " . ( $ctx['grade'] ?? '?' ) . ". Track: " . ( $ctx['track'] ?? 'general' ) . ".";
        if ( ! empty( $ctx['career']['dream_jobs'] ) ) {
            $p .= " Dream jobs: " . implode( ', ', $ctx['career']['dream_jobs'] ) . ".";
        }
        if ( ! empty( $ctx['career']['skills_wanted'] ) ) {
            $p .= " Skills to learn: " . implode( ', ', $ctx['career']['skills_wanted'] ) . ".";
        }
        if ( ! empty( $ctx['budget']['tier_label'] ) ) {
            $p .= " Budget tier: " . $ctx['budget']['tier_label'] . " (~" . ( $ctx['budget']['monthly_budget'] ?? 0 ) . " Rial/month).";
        }
        if ( ! empty( $ctx['history_count'] ) ) {
            $p .= " Academic records on file: " . $ctx['history_count'] . " grades.";
        }
        if ( ! empty( $ctx['phases'] ) ) {
            $p .= " Life path phases: " . wp_json_encode( $ctx['phases'], JSON_UNESCAPED_UNICODE );
        }
        return $p;
    }

    private static function fallback_reply( string $message, array $ctx ): string {
        $m = mb_strtolower( $message );
        if ( str_contains( $m, 'بودجه' ) || str_contains( $m, 'هزینه' ) || str_contains( $m, 'پول' ) ) {
            $b = $ctx['budget'] ?? [];
            if ( ! empty( $b['tier_label'] ) ) {
                return 'بودجه خانواده: ' . $b['tier_label'] . '. پیشنهاد: ' . ( $b['hint'] ?? '' )
                    . ' — حدود ' . number_format( (int) ( $b['estimated_monthly_spend'] ?? 0 ) ) . ' ریال/ماه برای '
                    . ( $b['suggested_sessions_per_month'] ?? 4 ) . ' جلسه.';
            }
            return 'لطفاً در تب «همراه من» بودجه ماهانه خانواده را ثبت کنید تا مسیر متناسب پیشنهاد شود.';
        }
        if ( str_contains( $m, 'شغل' ) || str_contains( $m, 'آینده' ) || str_contains( $m, 'رشته' ) ) {
            $jobs = $ctx['career']['dream_jobs'] ?? [];
            if ( $jobs ) {
                return 'اهداف شغلی شما: ' . implode( '، ', $jobs ) . '. مسیر بلندمدت در تب همراه من نمایش داده می‌شود — دروس و مهارت‌ها را هم‌راستا کنید.';
            }
            return 'در پروفایل همراه، «شغل مورد علاقه» و مهارت‌های دلخواه را ثبت کنید تا مسیر زندگی شخصی‌سازی شود.';
        }
        if ( str_contains( $m, 'کلاس اول' ) || str_contains( $m, 'سابقه' ) || str_contains( $m, 'کارنامه' ) ) {
            $n = (int) ( $ctx['history_count'] ?? 0 );
            if ( $n > 0 ) {
                return "شما {$n} سال تحصیلی ثبت کرده‌اید. از تب همراه من سوابق را تکمیل کنید — هر پایه: مدرسه، معلم، معدل.";
            }
            return 'از هر پایه‌ای که به پورتال می‌پیوندید، می‌توانید سوابق قبلی را وارد کنید. از کلاس اول شروع کنید یا فقط پایه‌های اخیر.';
        }
        if ( str_contains( $m, 'کنکور' ) ) {
            return 'برای کنکور: Placement + برنامه CDM. با بودجه خانواده، ترکیب Mock و جلسات remedial را در «مسیر زندگی» ببینید.';
        }
        if ( ! empty( $ctx['phases'][0]['items'][0] ) ) {
            return 'قدم بعدی پیشنهادی: ' . $ctx['phases'][0]['items'][0];
        }
        return 'سلام! من همراه EduBrain هستم — مشاور تحصیلی و مهارتی مادام‌العمر. پروفایل، بودجه و اهداف را در «همراه من» تکمیل کنید.';
    }
}
