<?php
// ─────────────────────────────────────────────
// api/submit.php
// Formular-Eingang: speichert Klient, sendet Eingangs-Mail,
// triggert Kurzbio-Generierung.
//
// Phase 2.2 — komplette Version:
//  - Du-Form
//  - Starter-Tier abgeschafft (auf Portfolio gemappt)
//  - Eingangs-Mail per c2c_send_mail (mailer.php)
//  - Kurzbio-Hook nach Insert (best-effort)
// ─────────────────────────────────────────────

require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/db.php';
require_once __DIR__ . '/../includes/email_templates.php';
require_once __DIR__ . '/../includes/mailer.php';
require_once __DIR__ . '/../includes/kurzbio.php';

c2c_cors_headers();

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    json_response(['error' => 'Method not allowed'], 405);
}

// Eingabe lesen (JSON oder POST)
$raw   = file_get_contents('php://input');
$input = json_decode($raw, true) ?? $_POST;

if (empty($input)) {
    json_response(['error' => 'Keine Daten erhalten'], 400);
}

// ── Pflichtfelder prüfen ──────────────────────
$required = ['email', 'service_type'];
foreach ($required as $field) {
    if (empty($input[$field])) {
        json_response(['error' => "Pflichtfeld fehlt: $field"], 422);
    }
}

if (!filter_var($input['email'], FILTER_VALIDATE_EMAIL)) {
    json_response(['error' => 'Ungültige E-Mail-Adresse'], 422);
}

// ── Service-Typ normalisieren ─────────────────
// Phase 2.2: 'starter' wird durch kostenlose Kurzbio ersetzt.
// Falls noch alte Frontends 'starter' senden → auf portfolio mappen.
$serviceMap = [
    'starter'     => 'portfolio',  // Legacy → Portfolio (Starter abgeschafft)
    'portfolio'   => 'portfolio',
    'family'      => 'family',
    'familien'    => 'family',
    'vollständig' => 'portfolio',
];
$serviceType = $serviceMap[strtolower($input['service_type'] ?? 'portfolio')] ?? 'portfolio';

// ── Formular-Rohdaten strukturieren ──────────
$formData = [];
$skipKeys = ['email', 'vorname', 'nachname', 'phone', 'canton', 'service_type', 'token', 'honeypot'];
foreach ($input as $key => $value) {
    if (!in_array($key, $skipKeys)) {
        $formData[$key] = $value;
    }
}

// ── Honeypot-Spam-Check ───────────────────────
if (!empty($input['honeypot'])) {
    json_response(['success' => true, 'message' => 'Danke']); // Silent drop
}

// ── Klient in DB speichern ────────────────────
try {
    $clientId = C2CDatabase::upsertClient([
        'email'        => trim($input['email']),
        'vorname'      => trim($input['vorname'] ?? ''),
        'nachname'     => trim($input['nachname'] ?? ''),
        'phone'        => trim($input['phone'] ?? ''),
        'canton'       => trim($input['canton'] ?? ''),
        'service_type' => $serviceType,
        'form_data'    => $formData,
        'status'       => 'new',
    ]);

    $client = C2CDatabase::getClient($clientId);

    // ── Eingangs-Mail an Kunden ───────────────
    // Best-effort: Mail-Fehler blockieren NICHT die Antwort.
    try {
        c2c_send_mail(
            $client['email'],
            'Deine Geschichte ist angekommen · come2canada.life',
            'mail_eingang',
            [
                'vorname'  => $client['vorname']  ?? '',
                'nachname' => $client['nachname'] ?? '',
            ],
            trim(($client['vorname'] ?? '') . ' ' . ($client['nachname'] ?? '')),
            $clientId
        );
    } catch (Throwable $mailErr) {
        error_log("C2C Eingangs-Mail-Fehler bei Klient $clientId: " . $mailErr->getMessage());
    }

    // ── Notification an Christian ─────────────
    // Auch best-effort — wenn das hier fehlt, sieht Christian es im HQ
    try {
        $notifyName = trim(($client['vorname'] ?? '?') . ' ' . ($client['nachname'] ?? ''));
        $notifySubj = 'Neuer Klient: ' . ($notifyName ?: $client['email']);
        c2c_send_mail(
            MAIL_NOTIFY,
            $notifySubj,
            'mail_eingang',
            [
                'vorname'  => 'Christian',
                'nachname' => '',
            ],
            'Christian',
            $clientId
        );
    } catch (Throwable $notifyErr) {
        error_log("C2C HQ-Notification-Fehler: " . $notifyErr->getMessage());
    }

    // ── Kurzbio-Generierung anstossen (Phase 2.2) ──
    // Best-effort: Fehler blockieren die Antwort an den Kunden NICHT.
    // Christian kann später im HQ "Neu generieren" drücken.
    try {
        $bio = C2CKurzbio::generate($clientId);
        if (!$bio['ok']) {
            error_log("C2C Kurzbio-Fehler bei Klient $clientId: " . $bio['error']);
        }
    } catch (Throwable $bioErr) {
        error_log("C2C Kurzbio-Exception bei Klient $clientId: " . $bioErr->getMessage());
    }

    // ── Antwort an Kunde ─────────────────────
    json_response([
        'success'    => true,
        'client_id'  => $clientId,
        'uuid'       => $client['uuid'],
        'message'    => 'Deine Geschichte ist angekommen. Du erhältst gleich eine Bestätigung per E-Mail.',
    ]);

} catch (Exception $e) {
    error_log('C2C Submit Error: ' . $e->getMessage());
    json_response(['error' => 'Serverfehler. Bitte versuch es erneut.'], 500);
}
