<?php
ini_set("display_errors", 0);
error_reporting(0);
// ajax/marktwert_assistent.php
// Ruft Claude Sonnet mit Web-Search auf und schätzt den Marktwert eines Gegenstands.

require_once '../db.php';
require_once '../helpers.php';

header('Content-Type: application/json; charset=utf-8');

// Feature-Flag prüfen
if (!defined('MARKTWERT_ASSISTENT_ENABLED') || !MARKTWERT_ASSISTENT_ENABLED) {
    echo json_encode(['error' => 'Feature nicht aktiviert']);
    exit;
}

// API-Key prüfen
if (!defined('ANTHROPIC_API_KEY') || empty(ANTHROPIC_API_KEY)) {
    echo json_encode(['error' => 'Kein API-Key konfiguriert']);
    exit;
}

// Session-Check
if (empty($_SESSION['user_id'])) {
    echo json_encode(['error' => 'Nicht eingeloggt']);
    exit;
}

// Eingabe holen
$item_id   = (int)($_POST['item_id']   ?? 0);
$name      = trim($_POST['name']       ?? '');
$kategorie = trim($_POST['kategorie']  ?? '');
$preis     = trim($_POST['preis']      ?? '');
$barcode   = trim($_POST['barcode']    ?? '');
$notizen   = trim($_POST['notizen']    ?? '');

if (!$name) {
    echo json_encode(['error' => 'Kein Name angegeben']);
    exit;
}

// Prompt aufbauen — kurz halten um Tokens zu sparen
$kontext = "Gegenstand: {$name}";
if ($kategorie) $kontext .= ", Kategorie: {$kategorie}";
if ($preis)     $kontext .= ", Kaufpreis: {$preis} €";
if ($barcode)   $kontext .= ", Barcode: {$barcode}";
if ($notizen)   $kontext .= ", Notizen: " . substr($notizen, 0, 100);

$prompt = "Suche aktuelle Gebrauchtpreise auf deutschen Plattformen (eBay Kleinanzeigen, eBay.de, ggf. Reverb/BrickLink/ZVAB) für: {$kontext}\n\n"
    . "Antworte NUR mit diesem JSON (kein Text davor/danach):\n"
    . "{\"geschaetzter_wert\":1250,\"konfidenz\":\"mittel\",\"begruendung\":\"1-2 Sätze.\","
    . "\"quellen\":[{\"plattform\":\"eBay Kleinanzeigen\",\"preis_von\":950,\"preis_bis\":1200,\"url\":\"https://...\"}]}\n\n"
    . "konfidenz: hoch/mittel/niedrig. geschaetzter_wert null wenn keine Daten.";

// Anthropic API aufrufen — Haiku ist 10x günstiger als Sonnet
$payload = json_encode([
    'model'      => 'claude-haiku-4-5-20251001',
    'max_tokens' => 512,
    'tools'      => [
        ['type' => 'web_search_20250305', 'name' => 'web_search']
    ],
    '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',
    ],
]);

$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if (!$response || $httpCode !== 200) {
    echo json_encode(['error' => 'API-Fehler (HTTP ' . $httpCode . ')']);
    exit;
}

$data = json_decode($response, true);
if (!$data) {
    echo json_encode(['error' => 'Ungültige API-Antwort']);
    exit;
}

// Text aus allen content-Blöcken zusammensetzen
$text = '';
foreach ($data['content'] ?? [] as $block) {
    if ($block['type'] === 'text') {
        $text .= $block['text'];
    }
}

// JSON aus Antwort extrahieren
$text = trim($text);
// JSON-Block aus Markdown-Fence herauslösen falls vorhanden
if (preg_match('/```(?:json)?\s*(\{.*?\})\s*```/s', $text, $m)) {
    $text = $m[1];
} elseif (preg_match('/(\{.*\})/s', $text, $m)) {
    $text = $m[1];
}

$result = json_decode($text, true);
if (!$result) {
    echo json_encode(['error' => 'Antwort konnte nicht verarbeitet werden', 'raw' => substr($text, 0, 300)]);
    exit;
}

echo json_encode([
    'success'          => true,
    'geschaetzter_wert'=> $result['geschaetzter_wert'] ?? null,
    'konfidenz'        => $result['konfidenz']         ?? 'unbekannt',
    'begruendung'      => $result['begruendung']       ?? '',
    'quellen'          => $result['quellen']           ?? [],
]);
