<?php
// ============================================================
// come2canada.life — API: News
// Datei hochladen als: /c2c/api/news.php
// ============================================================

require_once __DIR__ . '/bootstrap.php';

$method = $_SERVER['REQUEST_METHOD'];

// ── GET /api/news — Liste ────────────────────────────────────
if ($method === 'GET' && !isset($_GET['zusammenfassung'])) {
    $limit     = min((int)($_GET['limit'] ?? 20), 50);
    $kategorie = $_GET['kategorie'] ?? null;
    $offset    = (int)($_GET['offset'] ?? 0);

    $sql    = "SELECT id, titel_de, titel_en, link, kategorie, publiziert_am, zusammenfassung_erstellt FROM news";
    $params = [];
    if ($kategorie) { $sql .= " WHERE kategorie = ?"; $params[] = $kategorie; }
    $sql .= " ORDER BY publiziert_am DESC LIMIT ? OFFSET ?";
    $params[] = $limit;
    $params[] = $offset;

    $stmt = db()->prepare($sql);
    $stmt->execute($params);
    $news = $stmt->fetchAll();

    // Gesamt-Anzahl
    $countSql = "SELECT COUNT(*) FROM news" . ($kategorie ? " WHERE kategorie = ?" : "");
    $countStmt = db()->prepare($countSql);
    $countStmt->execute($kategorie ? [$kategorie] : []);
    $total = (int)$countStmt->fetchColumn();

    ok(['news' => $news, 'total' => $total]);
}

// ── GET /api/news?zusammenfassung=ID — On-demand Zusammenfassung ──
if ($method === 'GET' && isset($_GET['zusammenfassung'])) {
    // No auth needed - summary is public info
    $id = (int)$_GET['zusammenfassung'];

    $stmt = db()->prepare("SELECT * FROM news WHERE id = ?");
    $stmt->execute([$id]);
    $article = $stmt->fetch();
    if (!$article) err('Artikel nicht gefunden', 404);

    // Bereits generiert?
    if ($article['zusammenfassung_de'] && $article['zusammenfassung_erstellt']) {
        ok(['zusammenfassung' => $article['zusammenfassung_de'], 'cached' => true]);
    }

    // Via Anthropic generieren
    $zusammenfassung = generateZusammenfassung($article['titel_en'], $article['link']);

    // Speichern
    db()->prepare("UPDATE news SET zusammenfassung_de = ?, zusammenfassung_erstellt = 1 WHERE id = ?")
        ->execute([$zusammenfassung, $id]);

    ok(['zusammenfassung' => $zusammenfassung, 'cached' => false]);
}

// ── POST /api/news/scan — Manueller Scan ────────────────────
if ($method === 'POST') {
    // Token-Auth: funktioniert cross-domain
    $token = $_SERVER['HTTP_X_C2C_TOKEN'] ?? ($_GET['token'] ?? '');
    if ($token !== C2C_SECRET) {
        // Fallback: session auth
        session_start();
        if (empty($_SESSION['c2c_auth'])) err('Nicht autorisiert', 401);
    }
    $cronPath = __DIR__ . '/../cron/cron_news.php';
    if (!file_exists($cronPath)) err('Cron-Script nicht gefunden');
    ob_start();
    include $cronPath;
    $output = ob_get_clean();
    ok(['message' => 'Scan abgeschlossen', 'output' => $output]);
}

// ── GET /api/news?zusammenfassung=ID — kein Auth nötig wenn eingeloggt ──
// Auth wird weiter unten geprüft

err('Methode nicht erlaubt', 405);

// ── ZUSAMMENFASSUNG GENERIEREN ────────────────────────────────

function generateZusammenfassung(string $titelEn, string $link): string {
    // Versuche Artikel-Inhalt zu laden
    $inhalt = '';
    $ch = curl_init($link);
    curl_setopt_array($ch, [
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 10,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_USERAGENT      => 'come2canada.life/1.0',
    ]);
    $html = curl_exec($ch);
    curl_close($ch);

    if ($html) {
        // Einfache Text-Extraktion aus HTML
        $text = strip_tags($html);
        $text = preg_replace('/\s+/', ' ', $text);
        // Relevanten Teil finden (erste 2000 Zeichen nach Titel)
        $pos = strpos($text, substr($titelEn, 0, 30));
        if ($pos !== false) {
            $inhalt = substr($text, $pos, 2000);
        } else {
            $inhalt = substr($text, 0, 2000);
        }
    }

    $prompt = $inhalt
        ? "Schreibe eine prägnante deutsche Zusammenfassung (3-4 Sätze) dieses kanadischen Einwanderungsartikels. Fokus auf praktische Relevanz für Einwanderungsinteressenten. Nur die Zusammenfassung, kein anderer Text.\n\nTitel: $titelEn\n\nInhalt: $inhalt"
        : "Erkläre in 2-3 deutschen Sätzen was dieser kanadische Einwanderungs-News-Artikel wahrscheinlich beinhaltet, basierend auf dem Titel. Nur die Zusammenfassung.\n\nTitel: $titelEn";

    $payload = json_encode([
        'model'      => ANTHROPIC_MODEL,
        'max_tokens' => 300,
        '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        => 20,
        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 ($code !== 200 || !$raw) return 'Zusammenfassung konnte nicht generiert werden.';
    $resp = json_decode($raw, true);
    return trim($resp['content'][0]['text'] ?? '');
}
