<?php
// ─────────────────────────────────────────────
// includes/hq_bridge.php
//
// Übersetzt zwischen der neuen `clients`-Tabelle und dem
// alten "klienten"-Format, das das HQ-Frontend erwartet.
//
// Die alten APIs (klienten.php, dashboard.php, analyse.php)
// nutzen diese Helper, damit das HQ funktioniert OHNE dass
// das Frontend umgebaut werden muss.
// ─────────────────────────────────────────────

/**
 * Mappt englischen clients.status auf deutschen Status,
 * den das HQ-Frontend erwartet.
 */
function map_status_en_to_de(string $en): string {
    return [
        'new'        => 'formular_neu',
        'analyzing'  => 'analyse_ausstehend',
        'ready'      => 'review',          // Kurzbio liegt vor, Christian prüft
        'released'   => 'review',          // Bio freigegeben, wartet auf Zahlung
        'paid'       => 'story_laeuft',    // Bezahlt, Story-Generierung läuft
        'delivered'  => 'geliefert',
    ][$en] ?? $en;
}

/**
 * Andere Richtung: deutsche Status (vom HQ) auf englische DB-Status.
 */
function map_status_de_to_en(string $de): string {
    $map = [
        'formular_neu'       => 'new',
        'analyse_ausstehend' => 'analyzing',
        'analyse_fertig'     => 'ready',
        'story_laeuft'       => 'paid',
        'review'             => 'ready',
        'geliefert'          => 'delivered',
        'archiviert'         => 'delivered', // softer; wir haben kein archiv-flag
    ];
    return $map[$de] ?? $de;
}

/**
 * Holt einen einzelnen Klienten und mappt ihn ins alte Format.
 * Liest aus clients + immigration_analysis.
 *
 * @return array|null  Im alten "klienten"-Format, oder null falls nicht gefunden.
 */
function bridge_get_klient(int $id): ?array {
    $stmt = db()->prepare("
        SELECT c.*, ia.crs_estimate
          FROM clients c
          LEFT JOIN immigration_analysis ia ON ia.client_id = c.id
         WHERE c.id = ?
         ORDER BY ia.created_at DESC
         LIMIT 1
    ");
    $stmt->execute([$id]);
    $row = $stmt->fetch();
    if (!$row) return null;

    return bridge_format_klient($row);
}

/**
 * Holt alle Klienten + crs_estimate aus letzter Analyse, mappt ins alte Format.
 *
 * @param string|null $statusDe  Optional: Filter nach deutschem Status
 */
function bridge_list_klienten(?string $statusDe = null): array {
    $sql = "
        SELECT c.*, ia.crs_estimate
          FROM clients c
          LEFT JOIN (
            SELECT client_id, MAX(created_at) AS latest
              FROM immigration_analysis
             GROUP BY client_id
          ) latest_a ON latest_a.client_id = c.id
          LEFT JOIN immigration_analysis ia
                 ON ia.client_id = c.id AND ia.created_at = latest_a.latest
    ";
    $params = [];
    if ($statusDe) {
        $sql .= " WHERE c.status = ?";
        $params[] = map_status_de_to_en($statusDe);
    }
    $sql .= " ORDER BY c.created_at DESC LIMIT 200";

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

    return array_map('bridge_format_klient', $rows);
}

/**
 * Formatiert eine clients-Zeile ins alte "klienten"-Format.
 * Extrahiert deutsche Felder aus form_data (JSON).
 */
function bridge_format_klient(array $row): array {
    // form_data parsen
    $form = [];
    if (!empty($row['form_data'])) {
        $decoded = json_decode($row['form_data'], true);
        if (is_array($decoded)) $form = $decoded;
    }

    // Service-Label aus service_type ableiten
    $serviceLabel = [
        'starter'   => 'Starter 299 CHF',
        'portfolio' => 'Vollständiges Portfolio 599 CHF',
        'family'    => 'Familien-Geschichte 799 CHF',
    ][$row['service_type'] ?? 'portfolio'] ?? 'Vollständiges Portfolio 599 CHF';

    return [
        'id'                  => (int)$row['id'],
        'uuid'                => $row['uuid']     ?? '',
        'vorname'             => $row['vorname']  ?? '',
        'nachname'            => $row['nachname'] ?? '',
        'email'               => $row['email']    ?? '',
        'telefon'             => $row['phone']    ?? null,
        'geburtsland'         => $form['geburtsland']         ?? null,
        'wohnsitzland'        => $form['wohnsitzland']        ?? ($row['canton'] ? 'Schweiz' : null),
        'staatsbuergerschaft' => $form['staatsbuergerschaft'] ?? null,
        'zivilstand'          => $form['zivilstand']          ?? $form['familienstand'] ?? null,
        'service'             => $serviceLabel,
        'status'              => map_status_en_to_de($row['status'] ?? 'new'),
        'notizen'             => $row['notes'] ?? null,
        'erstellt_am'         => $row['created_at']  ?? null,
        'aktualisiert_am'     => $row['updated_at']  ?? null,
        'crs_estimate'        => isset($row['crs_estimate']) ? (int)$row['crs_estimate'] : null,
        'profil_staerke'      => null, // nicht (mehr) verwendet
    ];
}
