<?php
require_once __DIR__ . '/../../config.php';
require_once __DIR__ . '/../../engine/SafetyEngine.php';
require_once __DIR__ . '/../../engine/Kernel.php';


$ctx = Kernel::handle(['auth' => true, 'rate' => 'api']);
$u   = $ctx['user'];
Logger::traceId();
Logger::setContext('user_id', (int)$u['id'] ?? 0);

$can = in_array($u['user_type'] ?? 'user', ['teacher','academic']) || !empty($_SESSION['admin']) || $u['subscription_tier'] === 'paid';
if (!$can) Kernel::respond(['error' => 'teachers_only', 'message' => 'هذه الميزة للمعلمين الموثّقين فقط'], 403);

if (!check_rate_limit('gen_lesson_' . $u['id'], 5, 3600))
    Kernel::respond(['error' => 'rate_limit', 'message' => 'الحد الأقصى 5 دروس/ساعة'], 429);

$b = json_decode(file_get_contents('php://input'), true) ?? [];
$title    = mb_substr(trim($b['title'] ?? ''), 0, 200);
$track    = in_array($b['track'] ?? '', ['foundation','growth','leadership']) ? $b['track'] : 'foundation';
$level    = in_array($b['level'] ?? '', ['beginner','intermediate','advanced']) ? $b['level'] : 'beginner';
$keywords = mb_substr(trim($b['keywords'] ?? ''), 0, 300);
$mode     = $b['mode'] ?? 'generate'; // generate | extract_file

// ── وضع استخراج من ملف PDF/Word/TXT ──────────────────────────
if ($mode === 'extract_file') {
    if (empty($b['file_base64'])) Kernel::respond(['error' => 'file_required'], 400);

    $check = validate_document_upload($b['file_base64'], 10);
    if (!$check['ok']) Kernel::respond(['error' => $check['error'], 'message' => 'الملف غير صالح أو حجمه كبير'], 400);

    // حفظ الملف مؤقتاً
    $tmp = sys_get_temp_dir() . '/sudanna_doc_' . uniqid() . '.' . $check['ext'];
    file_put_contents($tmp, $check['data']);

    // استخراج النص
    $raw_text = extract_text_from_file($tmp, $check['mime']);
    @unlink($tmp);

    if (!$raw_text || strlen(trim($raw_text)) < 50)
        Kernel::respond(['error' => 'extraction_failed', 'message' => 'لم أتمكن من استخراج النص من الملف'], 422);

    // Gemini يحوّل النص لدرس منظّم
    $prompt = "الملف التالي يحتوي محتوى تعليمي:\n\n" . mb_substr($raw_text, 0, 4000) . "\n\n" .
              "حوّله لدرس تعليمي منظّم للمسار «$track» بالعربية.\n" .
              "أجب بـ JSON فقط:\n{\"title\":\"...\",\"content\":\"...\",\"quiz_question\":\"...\",\"options\":[\"أ\",\"ب\",\"ج\",\"د\"],\"answer\":\"A\",\"summary\":\"...\"}";

    // AI_GUARD: daily limit check
    $_ai_plan = $u['plan_key'] ?? 'free';
    $_ai_limit = BillingEngine::checkAILimit((int)$u['id'], $_ai_plan);
    if (!empty($_ai_limit['exceeded'])) {
        Kernel::respond(['error'=>'daily_limit_exceeded','message'=>"تجاوزت حد {$_ai_limit['limit']} استدعاء/يوم",'used'=>$_ai_limit['used'],'limit'=>$_ai_limit['limit']], 429);
    }
    unset($_ai_plan, $_ai_limit);
        // Safety: evaluate user input before AI call
    $_se_in = SafetyEngine::evaluateInput($q ?? '', ['endpoint' => 'academy/generate.php']);
    if ($_se_in['action'] === SafetyEngine::BLOCK) {
        Logger::warn('ai_input_blocked', ['endpoint' => 'academy/generate.php']);
        $raw = null;
    } elseif ($_se_in['action'] === SafetyEngine::WARN) {
        $raw = SafetyEngine::emergencyResponse();
    } else {
        $raw = ask_ai($prompt, 'أنت خبير تعليمي. أجب بـ JSON صالح فقط.', 'fast', 1500, 0.5);

        // Safety: evaluate AI output
        if ($raw) {
            $_se_out = SafetyEngine::evaluateOutput($raw, 'general');
            if ($_se_out['action'] === SafetyEngine::WARN && !empty($_se_out['replace'])) {
                $raw = $_se_out['replace'];
            } elseif ($_se_out['action'] === SafetyEngine::BLOCK) {
                $raw = null;
            }
        }
    }

    $clean = preg_replace('/^```json\s*|\s*```$/', '', trim($raw));
    $data  = json_decode($clean, true);

    if (!$data || empty($data['content']))
        Kernel::respond(['error' => 'ai_failed', 'message' => 'فشل تحويل الملف — حاول مرة أخرى'], 500);

    Logger::aiUsage((int)$u['id'], 'academy_lesson_file', ['service'=>'academy:extract','tokens'=> 1500]);
    Kernel::respond(['success' => true, 'source' => 'file', 'ext' => $check['ext'],
        'title' => $data['title'] ?? $title,
        'track' => $track, 'content' => $data['content'] ?? '',
        'quiz_question' => $data['quiz_question'] ?? '', 'quiz_options' => $data['options'] ?? [],
        'quiz_answer' => strtoupper($data['answer'] ?? 'A'), 'summary' => $data['summary'] ?? '']);
}

// ── وضع التوليد من عنوان ──────────────────────────────────────
if (!$title) Kernel::respond(['error' => 'title_required'], 400);

// AI_GUARD: title mode — same limit check as file mode
$_gen_plan  = $u['plan_key'] ?? 'free';
$_gen_limit = BillingEngine::checkAILimit((int)$u['id'], $_gen_plan);
if (!empty($_gen_limit['exceeded'])) {
    Kernel::respond(['error'=>'daily_limit_exceeded','message'=>"تجاوزت حد {$_gen_limit['limit']} استدعاء/يوم",'used'=>$_gen_limit['used'],'limit'=>$_gen_limit['limit']], 429);
}
unset($_gen_plan, $_gen_limit);

$levels_ar = ['beginner' => 'مبتدئ', 'intermediate' => 'متوسط', 'advanced' => 'متقدم'];
$tracks_ar = ['foundation' => 'الأساس', 'growth' => 'النمو', 'leadership' => 'القيادة'];

$prompt = "اكتب درساً تعليمياً كاملاً:\nالعنوان: {$title}\nالمسار: {$tracks_ar[$track]}\nالمستوى: {$levels_ar[$level]}\n" .
          ($keywords ? "الكلمات المفتاحية: {$keywords}\n" : '') .
          "أجب بـ JSON فقط:\n{\"content\":\"3-5 فقرات غنية\",\"quiz_question\":\"سؤال\",\"options\":[\"أ\",\"ب\",\"ج\",\"د\"],\"answer\":\"A\",\"summary\":\"جملتان\"}";

$raw = ask_ai($prompt, 'أنت خبير تعليمي سوداني. استخدم أمثلة من السياق السوداني. أجب بـ JSON فقط.', 'fast', 1500, 0.3);
$clean = preg_replace('/^```json\s*|\s*```$/', '', trim($raw));
$data  = json_decode($clean, true);

if (!$data || empty($data['content']))
    Kernel::respond(['error' => 'generation_failed', 'message' => 'فشل توليد الدرس', 'raw' => substr($raw, 0, 200)], 500);

Logger::aiUsage((int)$u['id'], 'academy_lesson_generate', ['service'=>'academy:generate','tokens'=>1500]);
Kernel::respond(['success' => true, 'source' => 'generated',
    'title' => $title, 'track' => $track, 'level' => $level,
    'content' => $data['content'] ?? '', 'quiz_question' => $data['quiz_question'] ?? '',
    'quiz_options' => $data['options'] ?? [], 'quiz_answer' => strtoupper($data['answer'] ?? 'A'),
    'summary' => $data['summary'] ?? '']);
