<?php
if (count(get_included_files()) === 1) { http_response_code(403); exit('Forbidden'); }

if (!class_exists('PlatformSettings', false)) {
    $_ps = dirname(__DIR__) . '/services/platform_settings.php';
    if (file_exists($_ps)) { require_once $_ps; }
    unset($_ps);
}

/**
 * Mailer — todos los correos transaccionales de Vale.
 * Proveedor: Resend (https://resend.com)
 * Env vars requeridas: RESEND_API_KEY, RESEND_FROM_EMAIL
 *
 * Métodos públicos:
 *   send()               — envío genérico, sin logging
 *   sendWelcome()        — bienvenida a nuevo dueño de negocio (OAuth)
 *   sendSellerWelcome()  — bienvenida a nuevo vendedor con credenciales
 *   testSend()           — prueba manual desde el admin
 */
class Mailer {

    // ── Infraestructura ───────────────────────────────────────────────────────

    private static function appUrl(): string {
        // Primary: explicit APP_URL in .env (required for correct links in emails)
        $env = getenv('APP_URL');
        if ($env) return rtrim($env, '/');

        // Fallback: derive from current request headers
        $proto = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
            || ($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? '') === 'https'
            ? 'https' : 'http';
        $host = $_SERVER['HTTP_HOST'] ?? '';
        if ($host && $host !== 'localhost') return $proto . '://' . $host;

        // Last resort: try platform settings
        try {
            return rtrim(PlatformSettings::get('app_url', 'https://valeai.app'), '/');
        } catch (Throwable $_e) {
            return 'https://valeai.app';
        }
    }

    private static function trainingUrl(): string {
        try {
            return PlatformSettings::get('training_url', 'https://valeai.app/aprende');
        } catch (Throwable $_e) {
            return 'https://valeai.app/aprende';
        }
    }

    /**
     * Envío base contra la API de Resend.
     * @return array{ok:bool, id?:string, error?:string}
     */
    public static function send(string $to, string $subject, string $html): array {
        $apiKey = getenv('RESEND_API_KEY');
        $from   = getenv('RESEND_FROM_EMAIL') ?: 'Vale <hola@valeai.app>';

        // Sanitize: si el valor tiene basura después del cierre de <email>, la corta.
        // Previene errores cuando el .env tiene variables pegadas sin newline.
        if (strpos($from, '>') !== false) {
            $from = trim(substr($from, 0, strrpos($from, '>') + 1));
        } else {
            $parts = explode(' ', $from);
            $from  = trim($parts[0]);
        }

        if (!$apiKey) {
            error_log('Mailer: RESEND_API_KEY no configurado.');
            return ['ok' => false, 'error' => 'RESEND_API_KEY no configurado'];
        }

        $payload = json_encode([
            'from'    => $from,
            'to'      => [$to],
            'subject' => $subject,
            'html'    => $html,
        ]);

        $ch = curl_init('https://api.resend.com/emails');
        curl_setopt_array($ch, [
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_POST           => true,
            CURLOPT_POSTFIELDS     => $payload,
            CURLOPT_TIMEOUT        => 15,
            CURLOPT_HTTPHEADER     => [
                'Authorization: Bearer ' . $apiKey,
                'Content-Type: application/json',
            ],
        ]);

        $resp = curl_exec($ch);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $err  = curl_error($ch);
        unset($ch);

        if ($resp === false) {
            error_log('Mailer cURL error: ' . $err);
            return ['ok' => false, 'error' => 'cURL: ' . $err];
        }

        $data = json_decode($resp, true);
        if ($code >= 200 && $code < 300) {
            return ['ok' => true, 'id' => $data['id'] ?? null];
        }

        $msg = $data['message'] ?? $data['name'] ?? ('HTTP ' . $code);
        error_log('Mailer Resend error: ' . $msg);
        return ['ok' => false, 'error' => $msg];
    }

    /**
     * Guarda el intento en email_logs.
     * Falla silenciosamente — nunca debe romper el flujo principal.
     */
    private static function log(
        PDO    $db,
        string $to,
        string $subject,
        string $type,
        int    $tenantId,
        array  $result
    ): void {
        try {
            $db->prepare(
                "INSERT INTO email_logs (tenant_id, to_email, subject, type, status, resend_id, error)
                 VALUES (:tid, :to, :subj, :type, :status, :rid, :err)"
            )->execute([
                ':tid'    => $tenantId ?: null,
                ':to'     => $to,
                ':subj'   => $subject,
                ':type'   => $type,
                ':status' => $result['ok'] ? 'sent' : 'failed',
                ':rid'    => $result['id'] ?? null,
                ':err'    => !empty($result['error']) ? $result['error'] : null,
            ]);
        } catch (Throwable $e) {
            error_log('Mailer::log DB error: ' . $e->getMessage());
        }
    }

    // ── Plantilla base ────────────────────────────────────────────────────────

    private static function wrap(
        string $preheader,
        string $heroColor,
        string $heroTitle,
        string $heroSub,
        string $bodyHtml,
        string $appUrl
    ): string {
        $year    = date('Y');
        $logoUrl = $appUrl . '/img/logo-white.png';

        return <<<HTML
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>{$heroTitle}</title>
<style>
  @import url('https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,600;9..144,700&family=Hanken+Grotesk:wght@400;600;700&display=swap');
</style>
</head>
<body style="margin:0;padding:0;background:#1A1210;font-family:'Hanken Grotesk',Arial,sans-serif;-webkit-font-smoothing:antialiased;">
<span style="display:none;max-height:0;overflow:hidden;">{$preheader}</span>
<table width="100%" cellpadding="0" cellspacing="0" style="background:#1A1210;padding:32px 16px;">
  <tr><td align="center">
  <table width="560" cellpadding="0" cellspacing="0" style="max-width:560px;width:100%;">

    <!-- Logo header -->
    <tr>
      <td align="center" style="padding-bottom:24px;">
        <img src="{$logoUrl}" alt="Vale" height="32" style="display:block;height:32px;width:auto;">
      </td>
    </tr>

    <!-- Card -->
    <tr>
      <td style="background:#FFFDF9;border-radius:20px;overflow:hidden;box-shadow:0 24px 48px rgba(0,0,0,.45);">

        <!-- Hero band -->
        <table width="100%" cellpadding="0" cellspacing="0">
          <tr>
            <td style="background:{$heroColor};padding:32px 40px;text-align:center;">
              <div style="font-family:'Fraunces',Georgia,serif;font-size:24px;font-weight:700;color:#fff;line-height:1.2;margin-bottom:6px;">{$heroTitle}</div>
              <div style="font-size:14px;color:rgba(255,255,255,.8);line-height:1.5;">{$heroSub}</div>
            </td>
          </tr>
        </table>

        <!-- Body -->
        <table width="100%" cellpadding="0" cellspacing="0">
          <tr>
            <td style="padding:32px 40px;">
              {$bodyHtml}
            </td>
          </tr>
        </table>

      </td>
    </tr>

    <!-- Footer -->
    <tr>
      <td style="padding:24px 0;text-align:center;">
        <p style="margin:0;font-size:12px;color:#7A6B5D;">
          Vale · por Supraide &nbsp;·&nbsp;
          <a href="{$appUrl}/privacy" style="color:#7A6B5D;text-decoration:none;">Privacidad</a>
          &nbsp;·&nbsp;
          <a href="{$appUrl}/terms" style="color:#7A6B5D;text-decoration:none;">Términos</a>
        </p>
        <p style="margin:6px 0 0;font-size:11px;color:#5A4B3F;">© {$year} Supraide. Todos los derechos reservados.</p>
      </td>
    </tr>

  </table>
  </td></tr>
</table>
</body>
</html>
HTML;
    }

    /** Bloque de "portal card" reutilizable dentro de los emails */
    private static function portalCard(string $icon, string $title, string $desc, string $url): string {
        return <<<HTML
<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:10px;">
  <tr>
    <td style="background:#FAF6F0;border:1px solid #EDE5D9;border-radius:12px;padding:14px 18px;">
      <table width="100%" cellpadding="0" cellspacing="0">
        <tr>
          <td style="width:36px;vertical-align:middle;">
            <div style="width:32px;height:32px;background:#A8331A;border-radius:8px;text-align:center;line-height:32px;font-size:16px;">{$icon}</div>
          </td>
          <td style="padding-left:12px;vertical-align:middle;">
            <div style="font-size:13px;font-weight:700;color:#3A2E28;margin-bottom:2px;">{$title}</div>
            <div style="font-size:12px;color:#8A7A6E;">{$desc}</div>
          </td>
          <td style="text-align:right;vertical-align:middle;white-space:nowrap;">
            <a href="{$url}" style="font-size:12px;font-weight:700;color:#A8331A;text-decoration:none;">Abrir →</a>
          </td>
        </tr>
      </table>
    </td>
  </tr>
</table>
HTML;
    }

    // ── Emails públicos ───────────────────────────────────────────────────────

    /**
     * Bienvenida al nuevo dueño de negocio (se dispara en registro Google OAuth).
     * Incluye accesos, portales y próximos pasos.
     */
    public static function sendWelcome(
        PDO    $db,
        string $toEmail,
        string $name,
        int    $tenantId = 0,
        string $publicSlug = ''
    ): array {
        $appUrl      = self::appUrl();
        $trainingUrl = self::trainingUrl();
        $firstName   = explode(' ', trim($name))[0];
        $subject     = "¡Vale ya está lista para {$firstName}!";

        $dashUrl     = $appUrl . '/inicio';
        $negocioUrl  = $appUrl . '/negocio';
        $dirUrl      = $publicSlug
            ? $appUrl . '/n/' . $publicSlug
            : $appUrl . '/directorio';

        $portales = self::portalCard('🏠', 'Tu panel de control', 'Gestión, mensajes, clientes y agenda.', $dashUrl)
                  . self::portalCard('🤖', 'Configurar a Vale', 'Personalizá el comportamiento de tu asistente.', $negocioUrl)
                  . self::portalCard('📍', 'Tu página pública', 'Así te ve el mundo. Compartí el link con tus clientes.', $dirUrl)
                  . self::portalCard('📚', 'Centro de capacitación', 'Guías, tutoriales y mejores prácticas de Vale.', $trainingUrl);

        $body = <<<HTML
<p style="margin:0 0 20px;font-size:16px;color:#2A231E;line-height:1.65;">
  Hola, <strong>{$firstName}</strong>. Tu cuenta en <strong>Vale</strong> fue creada con
  <span style="color:#A8331A;">{$toEmail}</span>.<br>
  A partir de ahora Vale atiende, agenda y hace seguimiento por vos — las 24 horas.
</p>

<table width="100%" cellpadding="0" cellspacing="0" style="background:#fff;border:1px solid #EDE5D9;border-radius:12px;margin-bottom:24px;">
  <tr>
    <td style="padding:18px 22px;">
      <div style="font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:#8A7A6E;margin-bottom:12px;">Tus accesos</div>
      <table width="100%" cellpadding="0" cellspacing="0">
        <tr><td style="padding:7px 0;border-bottom:1px solid #F0E8DC;font-size:13px;color:#6A5A50;">Cuenta</td>
            <td style="padding:7px 0;border-bottom:1px solid #F0E8DC;font-size:13px;color:#2A231E;font-weight:600;text-align:right;">{$toEmail}</td></tr>
        <tr><td style="padding:7px 0;border-bottom:1px solid #F0E8DC;font-size:13px;color:#6A5A50;">Método de acceso</td>
            <td style="padding:7px 0;border-bottom:1px solid #F0E8DC;font-size:13px;color:#2A231E;font-weight:600;text-align:right;">Google (sin contraseña)</td></tr>
        <tr><td style="padding:7px 0;font-size:13px;color:#6A5A50;">Portal</td>
            <td style="padding:7px 0;font-size:13px;text-align:right;"><a href="{$appUrl}" style="color:#A8331A;font-weight:700;text-decoration:none;">{$appUrl}</a></td></tr>
      </table>
    </td>
  </tr>
</table>

<p style="margin:0 0 10px;font-size:13px;font-weight:700;color:#5A3A2A;text-transform:uppercase;letter-spacing:.8px;">Tus portales</p>
{$portales}

<p style="margin:20px 0 10px;font-size:13px;color:#6A5A50;">Próximos pasos:</p>
<table width="100%" cellpadding="0" cellspacing="0" style="margin-bottom:28px;">
  <tr><td style="padding:6px 0;font-size:13px;color:#2A231E;"><span style="color:#D99A4E;font-weight:700;margin-right:8px;">1.</span>Completá el onboarding para que Vale aprenda sobre tu negocio</td></tr>
  <tr><td style="padding:6px 0;font-size:13px;color:#2A231E;"><span style="color:#D99A4E;font-weight:700;margin-right:8px;">2.</span>Vinculá tu WhatsApp para atender clientes con IA</td></tr>
  <tr><td style="padding:6px 0;font-size:13px;color:#2A231E;"><span style="color:#D99A4E;font-weight:700;margin-right:8px;">3.</span>Compartí tu página pública y empezá a recibir clientes</td></tr>
</table>

<table width="100%" cellpadding="0" cellspacing="0">
  <tr><td align="center">
    <a href="{$dashUrl}" style="display:inline-block;background:#A8331A;color:#fff;font-size:15px;font-weight:700;text-decoration:none;padding:15px 36px;border-radius:12px;box-shadow:0 6px 18px rgba(168,51,26,.3);">
      Ir a mi panel →
    </a>
  </td></tr>
</table>
HTML;

        $html   = self::wrap(
            "Tu asistente con IA ya está lista para trabajar.",
            'linear-gradient(135deg,#A8331A,#C4502A)',
            "¡Ya sos parte de Vale, {$firstName}!",
            'Tu asistente con IA ya está lista para trabajar.',
            $body,
            $appUrl
        );
        $result = self::send($toEmail, $subject, $html);
        self::log($db, $toEmail, $subject, 'welcome_owner', $tenantId, $result);
        return $result;
    }

    /**
     * Bienvenida al nuevo vendedor con sus credenciales de acceso.
     * Se dispara cuando el admin crea un vendedor.
     */
    public static function sendSellerWelcome(
        PDO    $db,
        string $toEmail,
        string $name,
        string $plainPassword
    ): array {
        $appUrl      = self::appUrl();
        $trainingUrl = self::trainingUrl();
        $firstName   = explode(' ', trim($name))[0];
        $subject     = "¡Bienvenido al equipo de Vale, {$firstName}!";
        $loginUrl    = $appUrl . '/login';
        $portalUrl   = $appUrl . '/seller/recursos';

        $portales = self::portalCard('📊', 'Tu portal de vendedor', 'KPIs, pipeline, clientes y recursos.', $portalUrl)
                  . self::portalCard('🎯', 'Kit de ventas', 'Pitch por escenario, frases que cierran.', $appUrl . '/landing/vale-vendedores.html')
                  . self::portalCard('🃏', 'Battlecard de campo', 'Opener, objeciones y cierre en una página.', $appUrl . '/landing/vale-battlecard-vendedor.html')
                  . self::portalCard('📚', 'Centro de capacitación', 'Guías y recursos para vendedores de Vale.', $trainingUrl);

        $body = <<<HTML
<p style="margin:0 0 20px;font-size:16px;color:#2A231E;line-height:1.65;">
  Hola, <strong>{$firstName}</strong>. Tu cuenta de vendedor en <strong>Vale</strong> fue creada.
  Con ella tenés acceso a tu portal, al kit de ventas y a todo lo que necesitás para cerrar negocios.
</p>

<table width="100%" cellpadding="0" cellspacing="0" style="background:#fff;border:1px solid #EDE5D9;border-radius:12px;margin-bottom:24px;">
  <tr>
    <td style="padding:18px 22px;">
      <div style="font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:#8A7A6E;margin-bottom:12px;">Tus credenciales de acceso</div>
      <table width="100%" cellpadding="0" cellspacing="0">
        <tr><td style="padding:7px 0;border-bottom:1px solid #F0E8DC;font-size:13px;color:#6A5A50;">Email</td>
            <td style="padding:7px 0;border-bottom:1px solid #F0E8DC;font-size:13px;color:#2A231E;font-weight:700;text-align:right;">{$toEmail}</td></tr>
        <tr><td style="padding:7px 0;border-bottom:1px solid #F0E8DC;font-size:13px;color:#6A5A50;">Contraseña</td>
            <td style="padding:7px 0;border-bottom:1px solid #F0E8DC;font-size:13px;font-family:monospace;font-weight:700;text-align:right;color:#A8331A;">{$plainPassword}</td></tr>
        <tr><td style="padding:7px 0;font-size:13px;color:#6A5A50;">Acceso</td>
            <td style="padding:7px 0;font-size:13px;text-align:right;"><a href="{$loginUrl}" style="color:#A8331A;font-weight:700;text-decoration:none;">{$loginUrl}</a></td></tr>
      </table>
      <p style="margin:10px 0 0;font-size:11px;color:#C0392B;font-weight:600;">Guardá estas credenciales. Tu admin puede cambiar la contraseña desde el panel.</p>
    </td>
  </tr>
</table>

<p style="margin:0 0 10px;font-size:13px;font-weight:700;color:#5A3A2A;text-transform:uppercase;letter-spacing:.8px;">Tus portales</p>
{$portales}

<table width="100%" cellpadding="0" cellspacing="0" style="margin-top:24px;">
  <tr><td align="center">
    <a href="{$portalUrl}" style="display:inline-block;background:#A8331A;color:#fff;font-size:15px;font-weight:700;text-decoration:none;padding:15px 36px;border-radius:12px;box-shadow:0 6px 18px rgba(168,51,26,.3);">
      Entrar a mi portal →
    </a>
  </td></tr>
</table>
HTML;

        $html   = self::wrap(
            "Tus credenciales y acceso al portal de vendedores.",
            'linear-gradient(135deg,#2C4A2E,#3D6B40)',
            "¡Bienvenido al equipo, {$firstName}!",
            'Tu cuenta de vendedor de Vale ya está activa.',
            $body,
            $appUrl
        );
        $result = self::send($toEmail, $subject, $html);
        self::log($db, $toEmail, $subject, 'welcome_seller', 0, $result);
        return $result;
    }

    /**
     * Bienvenida al cliente de un tenant — se dispara la primera vez que Vale captura su email.
     */
    public static function sendClientWelcome(
        PDO    $db,
        string $toEmail,
        string $clientName,
        string $tenantName,
        int    $tenantId
    ): array {
        $appUrl    = self::appUrl();
        $firstName = explode(' ', trim($clientName))[0] ?: 'allí';
        $subject   = "¡Bienvenido/a a {$tenantName}!";

        $body = <<<HTML
<p style="margin:0 0 18px;font-size:16px;color:#2A231E;line-height:1.65;">
  Hola, <strong>{$firstName}</strong>. Acabás de quedar registrado/a en <strong>{$tenantName}</strong>
  como cliente. A partir de ahora Vale AI te atenderá, te ayudará a agendar citas y te mantendrá al tanto — las 24 horas.
</p>

<table width="100%" cellpadding="0" cellspacing="0" style="background:#FAF6F0;border:1px solid #EDE5D9;border-radius:14px;margin-bottom:24px;">
  <tr>
    <td style="padding:20px 24px;">
      <div style="font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:1px;color:#8A7A6E;margin-bottom:14px;">¿Qué podés hacer desde ahora?</div>
      <table width="100%" cellpadding="0" cellspacing="0">
        <tr><td style="padding:7px 0;border-bottom:1px solid #EDE5D9;font-size:13px;color:#3A2E28;">📅 &nbsp;Agendar y modificar citas fácilmente</td></tr>
        <tr><td style="padding:7px 0;border-bottom:1px solid #EDE5D9;font-size:13px;color:#3A2E28;">🔔 &nbsp;Recibir recordatorios automáticos</td></tr>
        <tr><td style="padding:7px 0;font-size:13px;color:#3A2E28;">💬 &nbsp;Consultar a Vale en cualquier momento</td></tr>
      </table>
    </td>
  </tr>
</table>

<p style="margin:0 0 4px;font-size:13px;color:#8A7A6E;text-align:center;">Este correo fue generado automáticamente por Vale AI en nombre de <strong>{$tenantName}</strong>.</p>
HTML;

        $html   = self::wrap(
            "Ya sos cliente de {$tenantName} — Vale AI te atenderá.",
            'linear-gradient(135deg,#1E7A4D,#27A05F)',
            "¡Bienvenido/a, {$firstName}!",
            "{$tenantName} ya tiene tu perfil listo.",
            $body,
            $appUrl
        );
        $result = self::send($toEmail, $subject, $html);
        self::log($db, $toEmail, $subject, 'client_welcome', $tenantId, $result);
        return $result;
    }

    /**
     * Confirmación de cita al cliente (al agendar vía Vale AI).
     */
    public static function sendAppointmentConfirmation(
        PDO    $db,
        string $toEmail,
        string $clientName,
        string $tenantName,
        string $serviceName,
        string $scheduledAt,
        string $timezone,
        int    $tenantId
    ): array {
        $appUrl    = self::appUrl();
        $firstName = explode(' ', trim($clientName))[0] ?: 'allí';
        $subject   = "Cita confirmada en {$tenantName}";

        // Format date in Spanish
        try {
            $dt = new DateTime($scheduledAt, new DateTimeZone($timezone ?: 'America/Managua'));
        } catch (Throwable $_) {
            $dt = new DateTime($scheduledAt);
        }
        $days   = ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'];
        $months = ['enero','febrero','marzo','abril','mayo','junio','julio','agosto','septiembre','octubre','noviembre','diciembre'];
        $dayName   = $days[(int)$dt->format('w')];
        $day       = $dt->format('j');
        $monthName = $months[(int)$dt->format('n') - 1];
        $year      = $dt->format('Y');
        $time      = $dt->format('g:i') . ' ' . ($dt->format('A') === 'AM' ? 'a.m.' : 'p.m.');
        $dateLabel = "{$dayName}, {$day} de {$monthName} de {$year}";

        $body = <<<HTML
<p style="margin:0 0 20px;font-size:16px;color:#2A231E;line-height:1.65;">
  Hola, <strong>{$firstName}</strong>. Tu cita quedó confirmada. Aquí están los detalles:
</p>

<table width="100%" cellpadding="0" cellspacing="0" style="background:#FAF6F0;border:1px solid #EDE5D9;border-radius:14px;margin-bottom:24px;">
  <tr>
    <td style="padding:22px 26px;">
      <table width="100%" cellpadding="0" cellspacing="0">
        <tr>
          <td style="padding:9px 0;border-bottom:1px solid #EDE5D9;font-size:13px;color:#8A7A6E;width:40%;">Negocio</td>
          <td style="padding:9px 0;border-bottom:1px solid #EDE5D9;font-size:13px;color:#2A231E;font-weight:700;text-align:right;">{$tenantName}</td>
        </tr>
        <tr>
          <td style="padding:9px 0;border-bottom:1px solid #EDE5D9;font-size:13px;color:#8A7A6E;">Servicio</td>
          <td style="padding:9px 0;border-bottom:1px solid #EDE5D9;font-size:13px;color:#2A231E;font-weight:700;text-align:right;">{$serviceName}</td>
        </tr>
        <tr>
          <td style="padding:9px 0;border-bottom:1px solid #EDE5D9;font-size:13px;color:#8A7A6E;">Fecha</td>
          <td style="padding:9px 0;border-bottom:1px solid #EDE5D9;font-size:13px;color:#2A231E;font-weight:700;text-align:right;">{$dateLabel}</td>
        </tr>
        <tr>
          <td style="padding:9px 0;font-size:13px;color:#8A7A6E;">Hora</td>
          <td style="padding:9px 0;font-size:14px;color:#A8331A;font-weight:700;text-align:right;">{$time}</td>
        </tr>
      </table>
    </td>
  </tr>
</table>

<p style="margin:0 0 20px;font-size:13px;color:#6A5A50;line-height:1.6;">
  Si necesitás cambiar o cancelar la cita, podés escribirle directamente a Vale y te ayudará de inmediato.
</p>

<p style="margin:0;font-size:12px;color:#9A8A7E;text-align:center;">
  Confirmación generada por Vale AI para <strong>{$tenantName}</strong>.
</p>
HTML;

        $html   = self::wrap(
            "Tu cita en {$tenantName} está confirmada para el {$dateLabel} a las {$time}.",
            'linear-gradient(135deg,#A8331A,#C4502A)',
            '¡Cita confirmada!',
            "{$tenantName} te espera el {$dayName} {$day} de {$monthName}.",
            $body,
            $appUrl
        );
        $result = self::send($toEmail, $subject, $html);
        self::log($db, $toEmail, $subject, 'appointment_confirmation', $tenantId, $result);
        return $result;
    }

    /**
     * Alerta interna a Vale (VALE_ADMIN_EMAIL): nuevo cliente captado en un tenant.
     */
    public static function sendNewClientAlert(
        PDO    $db,
        string $clientName,
        string $clientEmail,
        string $tenantName,
        int    $tenantId
    ): array {
        $adminEmail = getenv('VALE_ADMIN_EMAIL') ?: 'francodc88@gmail.com';
        $appUrl     = self::appUrl();
        $subject    = "Nuevo cliente en Vale: {$clientName} ({$tenantName})";
        $now        = date('d/m/Y H:i');

        $body = <<<HTML
<p style="margin:0 0 16px;font-size:15px;color:#2A231E;line-height:1.6;">
  Se captó un nuevo cliente en la plataforma Vale.
</p>
<table width="100%" cellpadding="0" cellspacing="0" style="background:#FAF6F0;border:1px solid #EDE5D9;border-radius:12px;margin-bottom:20px;">
  <tr>
    <td style="padding:18px 22px;">
      <table width="100%" cellpadding="0" cellspacing="0">
        <tr>
          <td style="padding:7px 0;border-bottom:1px solid #EDE5D9;font-size:13px;color:#8A7A6E;">Cliente</td>
          <td style="padding:7px 0;border-bottom:1px solid #EDE5D9;font-size:13px;color:#2A231E;font-weight:700;text-align:right;">{$clientName}</td>
        </tr>
        <tr>
          <td style="padding:7px 0;border-bottom:1px solid #EDE5D9;font-size:13px;color:#8A7A6E;">Email</td>
          <td style="padding:7px 0;border-bottom:1px solid #EDE5D9;font-size:13px;color:#2A231E;font-weight:700;text-align:right;">{$clientEmail}</td>
        </tr>
        <tr>
          <td style="padding:7px 0;border-bottom:1px solid #EDE5D9;font-size:13px;color:#8A7A6E;">Negocio (tenant)</td>
          <td style="padding:7px 0;border-bottom:1px solid #EDE5D9;font-size:13px;color:#2A231E;font-weight:700;text-align:right;">{$tenantName}</td>
        </tr>
        <tr>
          <td style="padding:7px 0;font-size:13px;color:#8A7A6E;">Capturado</td>
          <td style="padding:7px 0;font-size:13px;color:#2A231E;text-align:right;">{$now}</td>
        </tr>
      </table>
    </td>
  </tr>
</table>
<table width="100%" cellpadding="0" cellspacing="0">
  <tr><td align="center">
    <a href="{$appUrl}/admin/tenants/{$tenantId}" style="display:inline-block;background:#A8331A;color:#fff;font-size:13px;font-weight:700;text-decoration:none;padding:11px 28px;border-radius:10px;">
      Ver en admin →
    </a>
  </td></tr>
</table>
HTML;

        $html   = self::wrap(
            "Nuevo cliente captado: {$clientName} en {$tenantName}.",
            'linear-gradient(135deg,#2C3E50,#3D5A70)',
            'Nuevo cliente en Vale',
            "{$tenantName} · {$now}",
            $body,
            $appUrl
        );
        $result = self::send($adminEmail, $subject, $html);
        self::log($db, $adminEmail, $subject, 'new_client_alert', $tenantId, $result);
        return $result;
    }

    /**
     * Email de prueba — se envía desde /admin/emails.
     * Permite verificar que Resend está funcionando sin registrar un usuario real.
     */
    public static function sendTest(PDO $db, string $toEmail): array {
        $appUrl  = self::appUrl();
        $subject = 'Prueba de envío — Vale Admin';

        $now  = date('Y-m-d H:i:s');
        $body = <<<HTML
<p style="margin:0 0 20px;font-size:16px;color:#2A231E;line-height:1.65;">
  Este es un correo de prueba enviado desde el panel de administración de Vale.
  Si lo recibiste, el sistema de email está funcionando correctamente.
</p>
<table width="100%" cellpadding="0" cellspacing="0" style="background:#F0FAF4;border:1px solid #B8E0C4;border-radius:12px;margin-bottom:20px;">
  <tr>
    <td style="padding:18px 22px;">
      <div style="font-size:13px;color:#1E7A4D;font-weight:700;margin-bottom:6px;">Sistema operativo</div>
      <div style="font-size:13px;color:#2A5A3A;">Proveedor: Resend API<br>Desde: {$appUrl}<br>Fecha: {$now}</div>
    </td>
  </tr>
</table>
HTML;

        $html   = self::wrap(
            'Prueba de envío exitosa desde Vale Admin.',
            'linear-gradient(135deg,#1E7A4D,#27A05F)',
            'Prueba de envío exitosa',
            'El sistema de email de Vale está funcionando correctamente.',
            $body,
            $appUrl
        );
        $result = self::send($toEmail, $subject, $html);
        self::log($db, $toEmail, $subject, 'test', 0, $result);
        return $result;
    }
}
