<?php
/**
 * سودانا BDE — Wizard API
 * جمع البيانات خطوة بخطوة لإنشاء الوثائق
 */
require_once __DIR__ . '/../../config.php';
require_once __DIR__ . '/../../engine/Kernel.php';
require_once __DIR__ . '/../engine/Logger.php'; // COVERAGE
require_once '../../engine/TemplateEngine.php';

$ctx = Kernel::handle(['auth' => 'optional']);
$u = $ctx['user'];
$b      = json_decode(file_get_contents('php://input'), true) ?? [];
$action = $_GET['action'] ?? ($b['action'] ?? 'detect');

// ── DETECT: هل السؤال يحتاج BDE؟ ────────────────────────────
if ($action === 'detect') {
    $q    = mb_substr(trim($b['question'] ?? ''), 0, 300);
    $type = TemplateEngine::detectIntent($q);
    if (!$type) {
        json_response(['bde_needed'=>false]);
    }
    $template = TemplateEngine::getTemplate($type);
    json_response([
        'bde_needed' => true,
        'doc_type'   => $type,
        'template'   => [
            'title_ar' => $template['title_ar'] ?? 'وثيقة تجارية',
            'fields'   => $template['fields'] ?? [],
            'sections' => $template['sections'] ?? [],
        ],
        'prompt'     => "🗂️ يبدو أنك تريد {$template['title_ar']}!\n\nسأساعدك في إنشاء وثيقة احترافية خطوة بخطوة.\nأجب على الأسئلة أدناه وسيُولِّد الذكاء الاصطناعي وثيقتك.",
    ]);
}

// ── START: بدء جلسة BDE جديدة ────────────────────────────────
if ($action === 'start') {
    if (!$u) Kernel::fail('auth_required', 'سجّل دخولك لإنشاء الوثائق', 401);
    if (!check_rate_limit('bde_'.$u['id'], 10, 3600)) Kernel::fail('rate_limit', '', 429);

    $docType = $b['doc_type'] ?? 'proposal';
    $title   = mb_substr(trim($b['title'] ?? 'وثيقة جديدة'), 0, 200);
    $subtype = $b['subtype'] ?? 'general';

    $template = TemplateEngine::getTemplate($docType, $subtype);
    if (!$template) Kernel::fail('template_not_found', '', 404);

    try {
        db()->prepare(
            'INSERT INTO bde_documents (user_id, template_id, doc_type, title, collected_data, language)
             VALUES (?,?,?,?,?,?)'
        )->execute([
            $u['id'],
            $template['id'] ?? null,
            $docType,
            $title,
            json_encode([], JSON_UNESCAPED_UNICODE),
            'ar',
        ]);
        $docId = (int)db()->lastInsertId();
    } catch (Throwable $e) {
        error_log('[BDE wizard start] '.$e->getMessage());
        Kernel::fail('server_error', '', 500);
    }

    json_response([
        'success'  => true,
        'doc_id'   => $docId,
        'template' => [
            'title_ar' => $template['title_ar'],
            'fields'   => $template['fields'],
            'sections' => $template['sections'],
        ],
        'message'  => "بدأنا إنشاء {$template['title_ar']} — أجب على الأسئلة أدناه",
    ]);
}

// ── SAVE: حفظ البيانات المجموعة ──────────────────────────────
if ($action === 'save') {
    if (!$u) Kernel::fail('auth_required', '', 401);

    $docId = (int)($b['doc_id'] ?? 0);
    $data  = $b['data'] ?? [];
    if (!$docId || empty($data)) Kernel::fail('missing_fields', '', 400);

    $doc = db()->prepare('SELECT * FROM bde_documents WHERE id=? AND user_id=? LIMIT 1');
    $doc->execute([$docId, $u['id']]);
    $document = $doc->fetch();
    if (!$document) Kernel::fail('not_found', '', 404);

    // Merge with existing data
    $existing = json_decode($document['collected_data'], true) ?? [];
    $merged   = array_merge($existing, array_filter($data, fn($v) => $v !== '' && $v !== null));

    db()->prepare('UPDATE bde_documents SET collected_data=? WHERE id=?')
       ->execute([json_encode($merged, JSON_UNESCAPED_UNICODE), $docId]);

    // Check if ready to generate (all required fields present)
    $template = TemplateEngine::getTemplate($document['doc_type']);
    $requiredFields = array_filter($template['fields'] ?? [], fn($f) => $f['required']);
    $missingFields  = array_filter($requiredFields, fn($f) => empty($merged[$f['key']]));

    json_response([
        'success'        => true,
        'doc_id'         => $docId,
        'ready_to_generate' => empty($missingFields),
        'missing_fields' => array_values(array_map(fn($f) => $f['label'], $missingFields)),
    ]);
}

// ── LIST: قائمة وثائق المستخدم ───────────────────────────────
if ($action === 'list') {
    if (!$u) Kernel::fail('auth_required', '', 401);
    $st = db()->prepare('SELECT id, doc_type, title, status, created_at FROM bde_documents WHERE user_id=? ORDER BY created_at DESC LIMIT 20');
    $st->execute([$u['id']]);
    json_response(['success'=>true,'documents'=>$st->fetchAll()]);
}

Kernel::fail('unknown_action', '', 400);
