<?php
// ============================================================
// come2canada.life — API: Anthropic-Proxy + Analyse speichern
// Datei hochladen als: /c2c/api/analyse.php
// Auth erforderlich — nur Portal
// ============================================================

require_once __DIR__ . '/bootstrap.php';
requireAuth();

$method = $_SERVER['REQUEST_METHOD'];

// ---- GET /api/analyse?klient_id=X --------------------------
if ($method === 'GET') {
    $klientId = isset($_GET['klient_id']) ? (int)$_GET['klient_id'] : null;
    if (!$klientId) err('klient_id fehlt');
    $stmt = db()->prepare("SELECT * FROM analysen WHERE klient_id = ? ORDER BY erstellt_am DESC LIMIT 1");
    $stmt->execute([$klientId]);
    $analyse = $stmt->fetch();
    if (!$analyse) err('Keine Analyse gefunden', 404);
    // JSON-Felder dekodieren für den Client
    foreach (['pathways_json','story_json','checklist_json'] as $f) {
        if ($analyse[$f]) $analyse[$f] = json_decode($analyse[$f], true);
    }
    ok(['analyse' => $analyse]);
}

// ---- POST /api/analyse -------------------------------------
// Anthropic aufrufen + Ergebnis in DB speichern
if ($method === 'POST') {
    $b = body();

    // Entweder direkt ein Profil mitschicken, oder klient_id für DB-Lookup
    $klientId = isset($b['klient_id']) ? (int)$b['klient_id'] : null;
    $profil   = $b['profil'] ?? null;

    if ($klientId && !$profil) {
        // Profil aus letztem Formular holen
        $stmt = db()->prepare("SELECT json_data FROM formulare WHERE klient_id = ? ORDER BY eingegangen_am DESC LIMIT 1");
        $stmt->execute([$klientId]);
        $row = $stmt->fetch();
        if (!$row) err('Kein Formular für diesen Klienten gefunden');
        $profil = json_decode($row['json_data'], true);
    }
    if (!$profil) err('Kein Profil vorhanden');

    // Prompt zusammenbauen
    $prompt = buildAnalysePrompt($profil);

    // Anthropic API aufrufen (serverseitig — kein CORS-Problem)
    $response = callAnthropic($prompt);
    if (!$response['ok']) err('Anthropic-Fehler: ' . $response['error']);

    $parsed = $response['data'];

    // In DB speichern
    $pdo = db();
    if ($klientId) {
        // Bestehende Analyse überschreiben oder neue anlegen
        $existing = $pdo->prepare("SELECT id FROM analysen WHERE klient_id = ?");
        $existing->execute([$klientId]);
        $exRow = $existing->fetch();

        $crs      = isset($parsed['summary']['crs_estimate']) ? (int)$parsed['summary']['crs_estimate'] : null;
        $staerke  = $parsed['summary']['strength'] ?? null;
        $pathways = json_encode($parsed['pathways'] ?? [], JSON_UNESCAPED_UNICODE);
        $story    = json_encode($parsed['story']    ?? [], JSON_UNESCAPED_UNICODE);
        $checks   = json_encode($parsed['checklist'] ?? [], JSON_UNESCAPED_UNICODE);
        $notiz    = $parsed['note'] ?? null;

        if ($exRow) {
            $upd = $pdo->prepare("UPDATE analysen SET crs_estimate=?, profil_staerke=?, pathways_json=?, story_json=?, checklist_json=?, christian_notiz=?, aktualisiert_am=NOW() WHERE klient_id=?");
            $upd->execute([$crs, $staerke, $pathways, $story, $checks, $notiz, $klientId]);
        } else {
            $ins = $pdo->prepare("INSERT INTO analysen (klient_id,crs_estimate,profil_staerke,pathways_json,story_json,checklist_json,christian_notiz) VALUES (?,?,?,?,?,?,?)");
            $ins->execute([$klientId, $crs, $staerke, $pathways, $story, $checks, $notiz]);
        }

        // Klient-Status aktualisieren
        $pdo->prepare("UPDATE klienten SET status = 'analyse_fertig' WHERE id = ?")->execute([$klientId]);
        logAktivitaet('analyse_erstellt', $klientId, "CRS ~$crs · Stärke: $staerke");
    }

    ok(['analyse' => $parsed, 'klient_id' => $klientId]);
}

err('Methode nicht erlaubt', 405);

// ---- Hilfsfunktionen ----------------------------------------

function buildAnalysePrompt(array $p): string {
    $age = null;
    if (!empty($p['geburtsdatum'])) {
        $age = (int)date('Y') - (int)substr($p['geburtsdatum'], 0, 4);
    } elseif (!empty($p['_computed_age'])) {
        $age = $p['_computed_age'];
    }
    $name = $p['_computed_fullname'] ?? trim(($p['vorname'] ?? '') . ' ' . ($p['nachname'] ?? ''));

    return <<<PROMPT
Du bist Experte für kanadische Immigration und arbeitest für Christian Wehrli, come2canada.life.
Analysiere das Profil. Gib NUR valides JSON zurück — kein Text, keine Backticks.

PROFIL: Name:{$name} Alter:{$age} Staatsbürgerschaft:{$p['staatsbuergerschaft']} Wohnsitz:{$p['wohnsitzland']}
Zivilstand:{$p['zivilstand']} Bildung:{$p['bildung']} Fach:{$p['fachrichtung']} ECA:{$p['eca']}
Englisch:{$p['englisch']} Französisch:{$p['franzoesisch']} Test:{$p['sprachtests']}
Beruf:{$p['berufsbezeichnung']} Erfahrung:{$p['berufsjahre']} KanadaErfahrung:{$p['erfahrung_kanada']}
Berufsverlauf:{$p['berufsverlauf']} Selbständig:{$p['selbstaendig']}
Strafrecht:{$p['strafrecht']} Stellenangebot:{$p['stellenangebot']}
FamilieKanada:{$p['familie_kanada']} Mittel:{$p['verfuegbare_mittel']}
Zeitplan:{$p['zeitplan']} Provinz:{$p['provinz']} WarumKanada:{$p['warum_kanada']}
Beitrag:{$p['beitrag_kanada']} 5JahresPlan:{$p['fuenf_jahres_plan']} Besonderes:{$p['besondere_umstaende']}

JSON-STRUKTUR (exakt):
{"summary":{"headline":"max 12 Wörter","crs_estimate":"Zahl","crs_note":"max 12 Wörter","strength":"stark oder mittel oder aufbauend","strength_note":"1 Satz"},"pathways":[{"rank":1,"name":"Programmname","viability":"sehr gut oder gut oder möglich oder schwierig","intro":"2-3 Sätze","met":["Anforderung"],"missing":["Fehlendes"],"steps":["Schritt"],"url":"https://www.canada.ca/...","tags":[{"l":"Text","t":"g oder b oder o oder r"}]}],"story":{"hook":"Eröffnungssatz Ich-Form emotional Deutsch max 35 Wörter","strengths":[{"text":"Stärke"}],"opportunities":[{"text":"Chance für Kanada"}],"challenges":[{"text":"Zu erklären"}]},"checklist":[{"p":"u oder s oder r","t":"Massnahme"}],"note":"Notiz für Christian 3 Sätze."}

3-5 Pathways, echte canada.ca URLs, 4-6 Checklist-Items. Nur JSON.
PROMPT;
}

function callAnthropic(string $prompt): array {
    $payload = json_encode([
        'model'      => ANTHROPIC_MODEL,
        'max_tokens' => ANTHROPIC_MAX_TOKENS,
        'messages'   => [['role' => 'user', 'content' => $prompt]],
    ]);

    $ch = curl_init('https://api.anthropic.com/v1/messages');
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => $payload,
        CURLOPT_TIMEOUT        => 60,
        CURLOPT_HTTPHEADER     => [
            'Content-Type: application/json',
            'x-api-key: ' . ANTHROPIC_API_KEY,
            'anthropic-version: 2023-06-01',
        ],
    ]);
    $raw  = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    curl_close($ch);

    if (!$raw) return ['ok' => false, 'error' => 'Keine Antwort von Anthropic'];

    $resp = json_decode($raw, true);
    if ($code !== 200) return ['ok' => false, 'error' => $resp['error']['message'] ?? "HTTP $code"];

    $text = '';
    foreach (($resp['content'] ?? []) as $block) {
        if ($block['type'] === 'text') $text .= $block['text'];
    }
    $text = trim(preg_replace('/^```json\s*|\s*```$/m', '', $text));

    $data = json_decode($text, true);
    if (!$data) return ['ok' => false, 'error' => 'JSON-Parse-Fehler'];

    return ['ok' => true, 'data' => $data];
}
