<?php
// ============================================================
// come2canada.life — API: Klienten (Bridge zu clients-Tabelle)
// /c2c/api/klienten.php
//
// Liest aus der neuen `clients`-Tabelle, antwortet im alten
// "klienten"-Format, das das HQ-Frontend erwartet.
// ============================================================

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

$method = $_SERVER['REQUEST_METHOD'];
$id     = isset($_GET['id']) ? (int)$_GET['id'] : null;

// ─────────────────────────────────────────────
// GET /api/klienten           → Liste
// GET /api/klienten?id=4      → Einzeln
// GET /api/klienten?status=X  → Liste, gefiltert
// ─────────────────────────────────────────────
if ($method === 'GET') {
    if ($id) {
        $klient = bridge_get_klient($id);
        if (!$klient) err('Klient nicht gefunden', 404);
        ok(['klient' => $klient]);
    }

    $statusFilter = $_GET['status'] ?? null;
    $klienten = bridge_list_klienten($statusFilter);
    ok(['klienten' => $klienten]);
}

// ─────────────────────────────────────────────
// PUT /api/klienten?id=X  → Status/Notizen aktualisieren
// ─────────────────────────────────────────────
if ($method === 'PUT') {
    if (!$id) err('ID fehlt');
    $b = body();

    $felder = [];
    $werte  = [];

    if (array_key_exists('status', $b)) {
        $felder[] = "status = ?";
        $werte[]  = map_status_de_to_en($b['status']);
    }
    if (array_key_exists('notizen', $b)) {
        $felder[] = "notes = ?";
        $werte[]  = $b['notizen'];
    }
    if (array_key_exists('service', $b)) {
        // Service-Label zurück auf service_type-Enum mappen
        $svc = strtolower($b['service']);
        if (str_contains($svc, 'starter'))    $val = 'starter';
        elseif (str_contains($svc, 'famil'))  $val = 'family';
        else                                  $val = 'portfolio';
        $felder[] = "service_type = ?";
        $werte[]  = $val;
    }

    if (empty($felder)) err('Keine Felder zum Aktualisieren');

    $werte[] = $id;
    $stmt = db()->prepare("UPDATE clients SET " . implode(', ', $felder) . " WHERE id = ?");
    $stmt->execute($werte);

    logAktivitaet('klient_aktualisiert', $id, implode(', ', $felder));
    ok(['message' => 'Klient aktualisiert']);
}

// ─────────────────────────────────────────────
// POST /api/klienten   → Manuell anlegen (im HQ)
// ─────────────────────────────────────────────
if ($method === 'POST') {
    $b = body();
    foreach (['vorname','nachname','email'] as $f) {
        if (empty($b[$f])) err("Pflichtfeld fehlt: $f");
    }
    if (!filter_var($b['email'], FILTER_VALIDATE_EMAIL)) err('Ungültige E-Mail-Adresse');

    $pdo = db();

    // Duplikat-Check
    $check = $pdo->prepare("SELECT id FROM clients WHERE email = ?");
    $check->execute([strtolower(trim($b['email']))]);
    if ($check->fetch()) err('E-Mail bereits vorhanden', 409);

    $uuid = newUuid();

    // Form-Data aus den deutschen Feldern bauen
    $formData = [];
    foreach (['geburtsland','wohnsitzland','staatsbuergerschaft','zivilstand'] as $f) {
        if (!empty($b[$f])) $formData[$f] = $b[$f];
    }

    // Service-Type aus Service-Label
    $serviceType = 'portfolio';
    if (!empty($b['service'])) {
        $svc = strtolower($b['service']);
        if (str_contains($svc, 'starter'))    $serviceType = 'starter';
        elseif (str_contains($svc, 'famil'))  $serviceType = 'family';
    }

    $stmt = $pdo->prepare("
        INSERT INTO clients (uuid, email, vorname, nachname, phone, form_data, service_type, status)
        VALUES (?, ?, ?, ?, ?, ?, ?, 'new')
    ");
    $stmt->execute([
        $uuid,
        strtolower(trim($b['email'])),
        trim($b['vorname']),
        trim($b['nachname']),
        $b['telefon'] ?? null,
        json_encode($formData, JSON_UNESCAPED_UNICODE),
        $serviceType,
    ]);

    $newId = (int)$pdo->lastInsertId();
    logAktivitaet('klient_angelegt', $newId, "{$b['vorname']} {$b['nachname']}");
    ok(['id' => $newId, 'uuid' => $uuid, 'message' => 'Klient angelegt']);
}

// ─────────────────────────────────────────────
// DELETE /api/klienten?id=X  → Archivieren (soft delete)
// ─────────────────────────────────────────────
if ($method === 'DELETE') {
    if (!$id) err('ID fehlt');
    // 'delivered' ist die nächste Stufe; echtes Archiv-Flag fehlt im Schema
    db()->prepare("UPDATE clients SET status = 'delivered' WHERE id = ?")->execute([$id]);
    logAktivitaet('klient_archiviert', $id);
    ok(['message' => 'Klient archiviert']);
}

err('Methode nicht erlaubt', 405);
