<?php
// ─────────────────────────────────────────────
// includes/auth_helper.php
// Stellt require_hq_token() bereit — die einzige Auth-Funktion
// für alle HQ-API-Endpunkte (analyze, stories, kurzbio, etc.).
//
// Token kommt aus:
//   1. Header X-C2C-Token  (bevorzugt)
//   2. ?token= im Query-String  (Fallback für simple Browser-Tests)
//
// Token wird gegen `hq_sessions`-Tabelle geprüft.
// ─────────────────────────────────────────────

require_once __DIR__ . '/db.php';

function require_hq_token(): void {
    $token = trim($_SERVER['HTTP_X_C2C_TOKEN'] ?? ($_GET['token'] ?? ''));

    if (empty($token)) {
        http_response_code(401);
        header('Content-Type: application/json; charset=utf-8');
        echo json_encode(['error' => 'Kein Token']);
        exit;
    }

    $stmt = C2CDatabase::get()->prepare(
        "SELECT id FROM hq_sessions WHERE token = ? AND expires_at > NOW()"
    );
    $stmt->execute([$token]);

    if (!$stmt->fetch()) {
        http_response_code(401);
        header('Content-Type: application/json; charset=utf-8');
        echo json_encode(['error' => 'Token ungültig oder abgelaufen']);
        exit;
    }

    // Optional: Session verlängern bei Aktivität (Sliding Expiration)
    // Hier bewusst weggelassen — 8h sind genug, schadet aber bei Bedarf nicht.
}

/**
 * Variante für Seiten (statt API-Aufrufe): redirected zu Login statt 401.
 * Nutzbar für `client.php` etc. — bekommt Token aus Cookie oder Query.
 */
function require_hq_token_or_redirect(): void {
    // Browser-Seiten haben keinen Header — wir akzeptieren Token aus Cookie
    // (Frontend muss ihn dort spiegeln) oder aus Query.
    $token = trim($_COOKIE['c2c_hq_token']
        ?? $_SERVER['HTTP_X_C2C_TOKEN']
        ?? ($_GET['token'] ?? ''));

    $valid = false;
    if (!empty($token)) {
        $stmt = C2CDatabase::get()->prepare(
            "SELECT id FROM hq_sessions WHERE token = ? AND expires_at > NOW()"
        );
        $stmt->execute([$token]);
        $valid = (bool)$stmt->fetch();
    }

    if (!$valid) {
        header('Location: ' . C2C_HQ_URL);
        exit;
    }
}
