<?php
declare(strict_types=1);

/**
 * GET /c2c/customer/view.php?token=...
 *
 * Magic-Link Endpoint für Kunden:
 *   - Validiert Token
 *   - Lädt Klient + Kurzbio aus immigration_analysis
 *   - Zeigt Bio + zwei PayPal-Buttons (Portfolio / Familie)
 *
 * Wird per E-Mail an den Kunden versendet, sobald Christian die Bio freigibt.
 *
 * (Optional in Phase 2: Weiterleitung von come2canada.life/portfolio?token=…
 *  via .htaccess auf diese URL — schöner für die Marke, aber technisch nicht nötig.)
 */

$config = require __DIR__ . '/../payments/_config.php';
require_once __DIR__ . '/../includes/rcic-matcher.php';

$token = (string)($_GET['token'] ?? '');

if (!preg_match('/^[a-f0-9]{64}$/', $token)) {
    http_response_code(400);
    renderError('Ungültiger Link', 'Der Link ist nicht korrekt aufgebaut.');
    exit;
}

$pdo = new PDO(
    "mysql:host={$config['db']['host']};dbname={$config['db']['name']};charset=utf8mb4",
    $config['db']['user'],
    $config['db']['password'],
    [
        PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    ]
);

// Token validieren
$stmt = $pdo->prepare(
    'SELECT ct.client_id, ct.expires_at, ct.revoked,
            c.uuid, c.vorname, c.nachname, c.email, c.status
     FROM customer_tokens ct
     INNER JOIN clients c ON c.id = ct.client_id
     WHERE ct.token = ? LIMIT 1'
);
$stmt->execute([$token]);
$row = $stmt->fetch();

if (!$row) {
    http_response_code(404);
    renderError('Link nicht gefunden', 'Dieser Link existiert nicht. Wende dich an chris@swisschris.ca, falls du Hilfe brauchst.');
    exit;
}

if ((int)$row['revoked'] === 1) {
    http_response_code(410);
    renderError('Link widerrufen', 'Dieser Link wurde widerrufen.');
    exit;
}

if (strtotime($row['expires_at']) < time()) {
    http_response_code(410);
    renderError('Link abgelaufen', 'Dieser Link ist abgelaufen. Wir können dir gerne einen neuen schicken — schreib an chris@swisschris.ca.');
    exit;
}

$clientId   = (int)$row['client_id'];
$clientUuid = (string)$row['uuid'];
$clientName = trim($row['vorname'] . ' ' . $row['nachname']);
$alreadyPaid = in_array($row['status'], ['paid', 'delivered'], true);

// Zugriff loggen
$pdo->prepare('UPDATE customer_tokens SET last_accessed_at = NOW(), access_count = access_count + 1 WHERE token = ?')
    ->execute([$token]);

// Bio laden:
//   - Vor Bezahlung: aus kurzbiographien.inhalt (kostenlose Vorschau, freigegeben)
//   - Nach Bezahlung: aus immigration_analysis.profile_summary (Vollausbau)
$bioText    = '';
$advantages = [];
$analysis   = false;

if ($alreadyPaid) {
    // Volle Analyse aus immigration_analysis
    $stmt = $pdo->prepare(
        'SELECT profile_summary, swiss_advantages, recommended_provinces
         FROM immigration_analysis
         WHERE client_id = ?
         ORDER BY created_at DESC
         LIMIT 1'
    );
    $stmt->execute([$clientId]);
    $analysis = $stmt->fetch();

    if ($analysis) {
        $bioText = (string)($analysis['profile_summary'] ?? '');
        if (!empty($analysis['swiss_advantages'])) {
            $decoded = json_decode($analysis['swiss_advantages'], true);
            if (is_array($decoded)) $advantages = $decoded;
        }
    }
} else {
    // Kurzbio (Vorschau) aus kurzbiographien
    $stmt = $pdo->prepare(
        "SELECT inhalt
         FROM kurzbiographien
         WHERE client_id = ? AND status IN ('ready','freigegeben')
         ORDER BY version DESC
         LIMIT 1"
    );
    $stmt->execute([$clientId]);
    $row2 = $stmt->fetch();
    if ($row2) {
        $bioText = (string)$row2['inhalt'];
    }
}

$paypalClientId = $config['paypal']['sandbox']
    ? $config['paypal']['sandbox_client_id']
    : $config['paypal']['live_client_id'];
$apiBase = $config['urls']['api_base'];

// Nach Bezahlung: zugeordnete RCIC-Anzahl für den "Empfehlungen ansehen"-Block
$rcicCount = 0;
if ($alreadyPaid) {
    $stmt = $pdo->prepare('SELECT COUNT(*) FROM client_rcic_zuordnung WHERE client_id = ?');
    $stmt->execute([$clientId]);
    $rcicCount = (int)$stmt->fetchColumn();
}

?><!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Deine Geschichte · come2canada.life</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,600&family=Nunito:wght@400;600&display=swap" rel="stylesheet">
<style>
  :root {
    --c-bg: #fdfaf3;
    --c-text: #1a1a1a;
    --c-muted: #6a6a6a;
    --c-accent: #b13a2e;
    --c-card: #ffffff;
    --c-border: #e6e0d4;
    --c-soft: #f3ede0;
  }
  * { box-sizing: border-box; }
  body {
    font-family: 'Fraunces', Georgia, serif;
    background: var(--c-bg);
    color: var(--c-text);
    margin: 0;
    line-height: 1.65;
    font-size: 17px;
  }
  .wrap { max-width: 720px; margin: 0 auto; padding: 3rem 1.5rem 5rem; }
  h1 { font-size: 2.2rem; margin: 0 0 .25rem; font-weight: 600; }
  h2 { font-size: 1.4rem; margin: 2.5rem 0 1rem; font-weight: 600; }
  h3 { font-size: 1.15rem; margin: 0 0 .5rem; font-weight: 600; }
  .greeting { color: var(--c-muted); margin: 0 0 2.5rem; font-style: italic; }
  .bio {
    background: var(--c-soft);
    padding: 1.75rem 1.5rem;
    border-left: 3px solid var(--c-accent);
    margin: 2rem 0;
    font-size: 1.05rem;
  }
  .bio p { margin: 0 0 1rem; }
  .bio p:last-child { margin-bottom: 0; }
  .advantages { margin: 1rem 0 2rem; }
  .advantage {
    padding: 1rem 0;
    border-bottom: 1px solid var(--c-border);
  }
  .advantage:last-child { border-bottom: none; }
  .advantage-label { color: var(--c-accent); font-size: .8rem; letter-spacing: .08em; text-transform: uppercase; margin-bottom: .25rem; font-family: 'Nunito', sans-serif; }
  .advantage-title { font-weight: 600; display: block; margin-bottom: .25rem; }
  .upgrade {
    background: var(--c-card);
    border: 1px solid var(--c-border);
    border-radius: 8px;
    padding: 1.75rem;
    margin: 1.25rem 0;
  }
  .upgrade p { color: var(--c-muted); margin: .5rem 0 1rem; }
  .price { font-size: 1.5rem; font-weight: 600; color: var(--c-accent); margin: .75rem 0 1.25rem; }
  .paid-notice {
    background: #e7f3e8;
    padding: 1.25rem 1.5rem;
    border-radius: 6px;
    border-left: 3px solid #4a7d4f;
    margin: 2rem 0;
  }
  .rcic-link-card {
    background: var(--c-card);
    border: 1px solid var(--c-border);
    border-radius: 8px;
    padding: 1.5rem 1.5rem 1.25rem;
    margin: 1.5rem 0 2rem;
  }
  .rcic-link-card h2 { margin: 0 0 .5rem; font-size: 1.25rem; }
  .rcic-link-card p { color: var(--c-muted); margin: 0 0 1rem; }
  .rcic-link-card a {
    display: inline-block;
    color: var(--c-accent);
    font-family: 'Nunito', sans-serif;
    font-size: .95rem;
    font-weight: 600;
    text-decoration: none;
    border-bottom: 1px solid transparent;
    transition: border-color .15s;
  }
  .rcic-link-card a:hover { border-bottom-color: var(--c-accent); }
  .footer {
    margin-top: 4rem;
    padding-top: 1.5rem;
    border-top: 1px solid var(--c-border);
    color: var(--c-muted);
    font-size: .85rem;
    font-family: 'Nunito', sans-serif;
  }
  .footer a { color: var(--c-muted); }
</style>
</head>
<body>
<div class="wrap">

  <?php if ($alreadyPaid): ?>
    <h1>Liebe:r <?= htmlspecialchars($clientName) ?></h1>
  <?php else: ?>
    <h1>Deine Geschichte beginnt hier</h1>
    <p class="greeting">Liebe:r <?= htmlspecialchars($clientName) ?> — was du jetzt liest, gehört dir. Behalten, teilen, drucken. Wenn du tiefer einsteigen willst, findest du unten zwei Möglichkeiten.</p>
  <?php endif; ?>

  <?php if (!empty($bioText)): ?>
  <div class="bio">
    <?php foreach (preg_split('/\n\n+/', trim($bioText)) as $para): ?>
      <p><?= nl2br(htmlspecialchars($para)) ?></p>
    <?php endforeach; ?>
  </div>
  <?php endif; ?>

  <?php if (count($advantages) > 0): ?>
  <h2>Was Kanada an dir gewinnt</h2>
  <div class="advantages">
    <?php foreach ($advantages as $adv): ?>
    <div class="advantage">
      <?php if (!empty($adv['category'])): ?>
        <div class="advantage-label"><?= htmlspecialchars($adv['category']) ?></div>
      <?php endif; ?>
      <span class="advantage-title"><?= htmlspecialchars($adv['title'] ?? '') ?></span>
      <?= htmlspecialchars($adv['canadian_value'] ?? $adv['description'] ?? '') ?>
    </div>
    <?php endforeach; ?>
  </div>
  <?php endif; ?>

  <?php if ($alreadyPaid): ?>

    <div class="paid-notice">
      <strong>Vielen Dank.</strong> Deine Bezahlung ist eingegangen. Christian arbeitet jetzt am vollständigen Portfolio. Du erhältst eine E-Mail, sobald es fertig ist.
    </div>

    <div class="rcic-link-card">
      <h2>Deine RCIC-Empfehlungen</h2>
      <?php if ($rcicCount > 0): ?>
        <p>Wir haben <?= $rcicCount === 1 ? 'einen lizenzierten Immigration Consultant' : $rcicCount . ' lizenzierte Immigration Consultants' ?> ausgewählt, die zu deinem Profil passen — bevorzugt deutschsprachig, wenn möglich in deiner Wunschprovinz.</p>
        <a href="rcic.php?token=<?= urlencode($token) ?>">Empfehlungen ansehen →</a>
      <?php else: ?>
        <p>Wir wählen jetzt passende RCIC-Berater für dich aus. Du erhältst eine E-Mail, sobald die Empfehlungen bereit sind.</p>
      <?php endif; ?>
    </div>

  <?php else: ?>

    <h2>Möchtest du tiefer gehen?</h2>

    <div class="upgrade">
      <h3>Vollständiges Portfolio</h3>
      <p>800–1200 Wörter, ausgearbeitete Recherche zu deinen Einwanderungswegen, eine Story-Variante. Inklusive Empfehlung lizenzierter Immigration Consultants (RCIC), die zu deinem Fall passen. Eine Revisionsrunde inklusive. Lieferung in 7 Werktagen.</p>
      <div class="price">CHF <?= number_format((float)$config['pricing']['portfolio'], 2) ?></div>
      <div id="paypal-portfolio" class="paypal-buttons-wrapper"></div>
    </div>

    <div class="upgrade">
      <h3>Familien-Geschichte</h3>
      <p>Vollständiges Portfolio plus Familiennarrativ — eure gemeinsame Geschichte als Einwandernde. Inklusive Empfehlung lizenzierter Immigration Consultants (RCIC), die zu eurem Fall passen. Zwei Revisionsrunden. Lieferung in 10 Werktagen.</p>
      <div class="price">CHF <?= number_format((float)$config['pricing']['family'], 2) ?></div>
      <div id="paypal-family" class="paypal-buttons-wrapper"></div>
    </div>

    <script>
      window.C2C_CONFIG = {
        apiBase: <?= json_encode($apiBase) ?>,
        clientUuid: <?= json_encode($clientUuid) ?>,
        pricing: <?= json_encode($config['pricing']) ?>
      };
    </script>
    <script src="https://www.paypal.com/sdk/js?client-id=<?= htmlspecialchars($paypalClientId) ?>&currency=CHF&intent=capture"></script>
    <script src="<?= htmlspecialchars($apiBase) ?>/customer/paypal-checkout.js"></script>

  <?php endif; ?>

  <div class="footer">
    come2canada.life · Storytelling und Recherche, keine Rechtsberatung<br>
    Fragen? <a href="mailto:chris@swisschris.ca">chris@swisschris.ca</a>
  </div>

</div>
</body>
</html>
<?php

// ---------------- Helpers ----------------

function renderError(string $title, string $message): void
{
    ?><!DOCTYPE html>
<html lang="de"><head><meta charset="utf-8">
<title><?= htmlspecialchars($title) ?></title>
<meta name="viewport" content="width=device-width,initial-scale=1">
<style>body{font-family:Georgia,serif;max-width:560px;margin:4rem auto;padding:2rem;color:#1a1a1a;line-height:1.6}h1{color:#b13a2e}</style>
</head><body>
<h1><?= htmlspecialchars($title) ?></h1>
<p><?= htmlspecialchars($message) ?></p>
</body></html><?php
}
