<?php
// ─────────────────────────────────────────────
// includes/email_templates.php
// E-Mail-Versand für alle Systemereignisse
//
// Stil: SwissChris — Du-Form, warm, persönlich, nicht-bürokratisch.
// Versand: über C2CSmtpClient (SSL/465), mit mail_log-Logging.
// ─────────────────────────────────────────────

require_once __DIR__ . '/config.php';
require_once __DIR__ . '/db.php';
require_once __DIR__ . '/mailer.php';  // C2CSmtpClient

class C2CMailer {

    // ─────────────────────────────────────
    // Eingangsbestätigung an Klient (DE, Du-Form)
    // ─────────────────────────────────────
    public static function sendConfirmation(array $client): void {
        $vorname = $client['vorname'] ?? 'Lieber Mensch auf dem Weg nach Kanada';
        $service = self::serviceName($client['service_type'] ?? 'portfolio');

        $subject = "Dein Formular ist angekommen — come2canada.life";
        $body    = self::wrap(
            'Dein Formular ist angekommen',
            self::greetingPart($vorname) . <<<HTML
<p>Ich habe deine Informationen erhalten — danke für dein Vertrauen.</p>

<p>Du hast den Service <strong>{$service}</strong> gewählt.<br>
Ich werde nun dein persönliches Profil anschauen, mögliche Einwanderungswege recherchieren
und deine Geschichte ausarbeiten.</p>

<div style="background:#fdfaf3;border-left:3px solid #b13a2e;padding:18px 22px;margin:24px 0;border-radius:0 4px 4px 0;">
  <strong style="color:#1a1a1a;">Was als nächstes passiert:</strong><br>
  <span style="display:block;margin-top:8px;line-height:1.8;">
  1. Ich erstelle deine Kurzbiografie und sende sie dir zur Freigabe<br>
  2. Nach deiner Freigabe analysiere ich dein Profil und schreibe drei Story-Varianten<br>
  3. Du wählst die Variante, die dich am besten erzählt<br>
  4. Du erhältst dein persönliches Portfolio mit RCIC-Empfehlungen
  </span>
</div>

<p>Hast du Fragen oder möchtest du etwas ergänzen? Schreib mir direkt:
<a href="mailto:christian@come2canada.life" style="color:#b13a2e;">christian@come2canada.life</a></p>

<p>Auf eine gute Reise — nach Kanada.<br>
<em>— Christian, SwissChris</em></p>
HTML
            ,
            $service . ' · ' . date('j. F Y')
        );

        self::send($client['email'], $subject, $body,
            $client['id'] ?? null,
            $vorname,
            'mail_eingang'
        );
    }

    // ─────────────────────────────────────
    // Benachrichtigung an HQ wenn neuer Klient (intern, Du an Christian)
    // ─────────────────────────────────────
    public static function sendHQNotification(array $client): void {
        $name    = trim(($client['vorname'] ?? '') . ' ' . ($client['nachname'] ?? ''));
        $service = self::serviceName($client['service_type'] ?? 'portfolio');
        $hqLink  = C2C_HQ_URL . 'client.php?id=' . $client['id'];
        $kanton  = $client['canton'] ?? '—';

        $subject = "Neuer Klient: {$name} ({$service})";
        $body    = <<<HTML
<!DOCTYPE html><html><head><meta charset="UTF-8"></head>
<body style="font-family:Georgia,serif;color:#222;max-width:600px;margin:0 auto;padding:20px;">
<h2 style="color:#1a3a2a;">Neuer Klient eingegangen</h2>
<table style="border-collapse:collapse;font-family:monospace;font-size:13px;">
  <tr><td style="padding:6px 12px 6px 0;color:#888;">Name:</td><td style="padding:6px 0;"><strong>{$name}</strong></td></tr>
  <tr><td style="padding:6px 12px 6px 0;color:#888;">E-Mail:</td><td style="padding:6px 0;">{$client['email']}</td></tr>
  <tr><td style="padding:6px 12px 6px 0;color:#888;">Kanton:</td><td style="padding:6px 0;">{$kanton}</td></tr>
  <tr><td style="padding:6px 12px 6px 0;color:#888;">Service:</td><td style="padding:6px 0;">{$service}</td></tr>
</table>
<p style="margin-top:24px;"><a href="{$hqLink}" style="background:#1a3a2a;color:#fff;padding:10px 20px;text-decoration:none;border-radius:4px;">→ Im HQ öffnen</a></p>
</body></html>
HTML;
        self::send(MAIL_NOTIFY, $subject, $body, $client['id'] ?? null, 'HQ', 'mail_hq_notification');
    }

    // ─────────────────────────────────────
    // Zahlungsbestätigung (Du-Form)
    // ─────────────────────────────────────
    public static function sendPaymentConfirmation(array $client, float $amount, string $currency = 'CHF'): void {
        $vorname = $client['vorname'] ?? 'Lieber Mensch auf dem Weg nach Kanada';
        $service = self::serviceName($client['service_type'] ?? 'portfolio');
        $subject = "Zahlungsbestätigung — come2canada.life";

        $body = self::wrap(
            'Zahlung erhalten — vielen Dank',
            self::greetingPart($vorname) . <<<HTML
<p>Deine Zahlung von <strong>{$amount} {$currency}</strong> für <strong>{$service}</strong>
ist eingegangen. Ich beginne jetzt mit der Arbeit an deinem Profil.</p>

<p>Du erhältst Nachricht von mir, sobald dein Portfolio fertig ist — in der Regel
innerhalb von drei bis fünf Werktagen.</p>

<p><em>— Christian, SwissChris</em></p>
HTML
            ,
            $service . ' · ' . $amount . ' ' . $currency
        );

        self::send($client['email'], $subject, $body,
            $client['id'] ?? null,
            $vorname,
            'mail_payment_confirmation'
        );
    }

    // ─────────────────────────────────────
    // Hilfsfunktion: Anrede nach SwissChris-Stil
    // ─────────────────────────────────────
    private static function greetingPart(string $vorname): string {
        // Wenn Default-Fallback ohne richtigen Namen: andere Anrede
        if (str_contains($vorname, 'Mensch')) {
            return "<p>Hallo!</p>";
        }
        return "<p>Hallo {$vorname}</p>";
    }

    // ─────────────────────────────────────
    // Hilfsfunktion: Mail-Hülle (leicht, cream/weiss, einheitlich mit mail_freigabe)
    // ─────────────────────────────────────
    private static function wrap(string $title, string $contentHtml, ?string $subheadline = null): string {
        $logo = 'https://christianwehrli.ca/c2c/assets/logo-black.png';

        $subheadHtml = '';
        if ($subheadline) {
            $subheadHtml = '<div style="font-size:13px;color:#6a6a6a;margin-top:.5rem;font-family:monospace;letter-spacing:1px;text-transform:uppercase;">'
                         . htmlspecialchars($subheadline) . '</div>';
        }

        return <<<HTML
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>{$title} — Come2Canada.Life</title>
</head>
<body style="margin:0;padding:0;background:#fdfaf3;font-family:Georgia,'Times New Roman',serif;color:#1a1a1a;">

<table role="presentation" cellpadding="0" cellspacing="0" border="0" width="100%" style="background:#fdfaf3;padding:2rem 1rem;">
  <tr>
    <td align="center">

      <table role="presentation" cellpadding="0" cellspacing="0" border="0" width="600" style="max-width:600px;background:#ffffff;border:1px solid #e6e0d4;border-radius:6px;">
        <tr>
          <td style="padding:2.5rem 2rem 1.5rem;text-align:center;">
            <img src="{$logo}" alt="Come2Canada.Life" width="200"
                 style="display:block;margin:0 auto 1rem;max-width:200px;height:auto;">
            <h1 style="margin:0;font-size:1.6rem;font-weight:600;color:#1a1a1a;">{$title}</h1>
            {$subheadHtml}
          </td>
        </tr>

        <tr>
          <td style="padding:0 2rem 1.5rem;font-size:16px;line-height:1.65;color:#1a1a1a;">
            {$contentHtml}
          </td>
        </tr>

        <tr>
          <td style="padding:1.5rem 2rem;border-top:1px solid #e6e0d4;font-size:12px;color:#6a6a6a;text-align:center;">
            come2canada.life · Storytelling und Recherche, keine Rechtsberatung
          </td>
        </tr>
      </table>

    </td>
  </tr>
</table>

</body>
</html>
HTML;
    }

    // ─────────────────────────────────────
    // Interner Versand via SMTP mit mail_log-Logging
    // ─────────────────────────────────────
    private static function send(
        string $to,
        string $subject,
        string $htmlBody,
        ?int $clientId = null,
        ?string $toName = null,
        string $template = 'mail_inline'
    ): void {
        $db = C2CDatabase::get();

        // mail_log Eintrag mit Status 'queued'
        $stmt = $db->prepare("
            INSERT INTO mail_log (client_id, to_email, to_name, subject, template, status)
            VALUES (?, ?, ?, ?, ?, 'queued')
        ");
        $stmt->execute([$clientId, $to, $toName ?: $to, $subject, $template]);
        $mailId = (int)$db->lastInsertId();

        try {
            $smtp = new C2CSmtpClient(SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS);
            $smtp->send(
                MAIL_FROM,
                MAIL_FROM_NAME,
                $to,
                $toName ?: $to,
                $subject,
                $htmlBody
            );

            $db->prepare("UPDATE mail_log SET status='sent', sent_at=NOW() WHERE id=?")
               ->execute([$mailId]);

        } catch (Throwable $e) {
            $db->prepare("UPDATE mail_log SET status='failed', error=? WHERE id=?")
               ->execute([$e->getMessage(), $mailId]);
            error_log("C2CMailer::send fehlgeschlagen an $to — {$e->getMessage()}");
        }
    }

    // ─────────────────────────────────────
    private static function serviceName(string $type): string {
        return match($type) {
            'starter'   => 'Geschichte Starter',
            'family'    => 'Familien-Geschichte',
            default     => 'Vollständiges Portfolio',
        };
    }

    private static function servicePrice(string $type): string {
        return match($type) {
            'starter' => 'CHF 299',
            'family'  => 'CHF 799',
            default   => 'CHF 599',
        };
    }
}
