<?php
/**
 * ============================================================
 *  CRON DE AVISOS AUTOMÁTICOS
 *
 *  AL ARRENDATARIO
 *    · Ingreso mañana  → correo con la FICHA PDF ADJUNTA
 *    · Ingreso hoy     → correo con la FICHA PDF ADJUNTA
 *    · Salida hoy      → recordatorio de salida
 *
 *  AL PROPIETARIO (y a todos los copropietarios del departamento)
 *    · Un día antes de que INGRESE un arrendatario
 *    · Un día antes de que SALGA un arrendatario
 *
 *  No se repiten envíos: si el cron corre varias veces al día,
 *  cada aviso sale una sola vez.
 *
 *  Cron sugerido (cPanel):
 *    0 9 * * * curl -s https://misarriendos.cl/arriendos/alertas_arriendos.php
 * ============================================================
 */
header('Content-Type: text/html; charset=UTF-8');

require_once __DIR__ . '/conexion.php';
require_once __DIR__ . '/includes/helpers.php';
require_once __DIR__ . '/includes/departamentos.php';
require_once __DIR__ . '/includes/mailer.php';
require_once __DIR__ . '/includes/pdf_ficha.php';

$enviados = 0;
$errores  = [];

/* ============================================================
   1. AVISOS AL ARRENDATARIO — INGRESO (mañana = 1, hoy = 0)
============================================================ */
foreach ([1 => 'mañana', 0 => 'hoy'] as $diff => $cuando) {

    $stmt = $conn->prepare("
        SELECT a.id_arrendatario, a.nombre, a.email, a.hora_ingreso, a.imagen,
               a.url_externa, a.fecha_inicio, p.numero_departamento
        FROM arrendatarios a
        JOIN propietarios p ON a.id_propietario = p.id_propietario
        WHERE DATEDIFF(a.fecha_inicio, CURDATE()) = ? AND a.email <> ''");
    $stmt->bind_param('i', $diff);
    $stmt->execute();
    $res = $stmt->get_result();

    while ($row = $res->fetch_assoc()) {

        if (correoYaEnviadoHoy($conn, (int)$row['id_arrendatario'], 'inicio')) {
            continue;
        }

        try {
            $mail = nuevoMailer();
            $mail->addAddress($row['email'], $row['nombre']);
            $mail->Subject = "📌 Aviso de Ingreso – Departamento {$row['numero_departamento']}";

            /* Código de acceso embebido */
            $imagenHTML = '';
            $archivoImagen = __DIR__ . '/uploads_arrendatarios/' . $row['imagen'];
            if (!empty($row['imagen']) && file_exists($archivoImagen)) {
                $cid = uniqid('img_');
                $mail->addEmbeddedImage($archivoImagen, $cid);
                $imagenHTML = "
                    <p style='margin-top:16px'><strong>🔑 Tu código de acceso al departamento</strong><br>
                    <span style='font-size:13px;color:#64748b'>Digítalo en la cerradura electrónica y termina con #</span></p>
                    <img src='cid:$cid' style='max-width:300px;border-radius:10px;border:1px solid #e2e8f0;display:block'>";
            }

            $urlHTML = '';
            if (!empty($row['url_externa'])) {
                $urlHTML = "
                    <p style='margin-top:14px'>🔗 <strong>Enlace QR para ingresar al condominio</strong>
                    (te lo solicitarán en portería):<br>
                    <a href='" . e($row['url_externa']) . "' target='_blank'>" . e($row['url_externa']) . "</a></p>";
            }

            $bloques = "
                <p>Estimado/a <strong>" . e($row['nombre']) . "</strong>:</p>
                <p>Le recordamos que su <strong>ingreso está programado para $cuando</strong>.</p>
                <table style='border-collapse:separate;width:100%'>"
                . filaDato('📅 Fecha ingreso', fecha_cl($row['fecha_inicio']))
                . filaDato('⏰ Hora ingreso', hora_cl($row['hora_ingreso']) . ' hrs')
                . filaDato('🏢 Departamento', e($row['numero_departamento']))
                . "</table>
                <p style='margin-top:12px'>
                   📎 Adjuntamos su <strong>Ficha de Arriendo (PDF)</strong>, obligatoria para el ingreso.<br>
                   📍 <a href='" . CONDOMINIO_MAPA . "' target='_blank'>Cómo llegar (Google Maps)</a></p>
                $imagenHTML
                $urlHTML
                <p style='font-size:13px;color:#64748b;margin-top:16px'>" . CONDOMINIO_DIRECCION . "</p>";

            $mail->Body    = plantillaCorreo('Aviso de Ingreso', $bloques, CONDOMINIO_NOMBRE);
            $mail->AltBody = "Su ingreso es $cuando. La ficha va adjunta en PDF.";

            $pdfPath = generarFichaPDF($conn, (int)$row['id_arrendatario'], 'F');
            if ($pdfPath) {
                $mail->addAttachment($pdfPath, 'Ficha_Arriendo.pdf');
            }

            $mail->send();
            if ($pdfPath && file_exists($pdfPath)) unlink($pdfPath);

            registrarBitacora($conn, (int)$row['id_arrendatario'], $row['email'], 'inicio', $mail->Subject);
            $enviados++;
        } catch (Throwable $e) {
            $errores[] = "Ingreso {$row['nombre']}: " . $e->getMessage();
        }
    }
}

/* ============================================================
   2. AVISO AL ARRENDATARIO — SALIDA (hoy)
============================================================ */
$res = $conn->query("
    SELECT a.id_arrendatario, a.nombre, a.email, a.hora_salida, a.fecha_salida,
           p.numero_departamento
    FROM arrendatarios a
    JOIN propietarios p ON a.id_propietario = p.id_propietario
    WHERE DATEDIFF(a.fecha_salida, CURDATE()) = 0 AND a.email <> ''");

while ($row = $res->fetch_assoc()) {

    if (correoYaEnviadoHoy($conn, (int)$row['id_arrendatario'], 'termino')) {
        continue;
    }

    try {
        $mail = nuevoMailer();
        $mail->addAddress($row['email'], $row['nombre']);
        $mail->Subject = "🚪 Aviso de Salida – Departamento {$row['numero_departamento']}";

        $bloques = "
            <p>Estimado/a <strong>" . e($row['nombre']) . "</strong>:</p>
            <p>Le recordamos que su <strong>salida está programada para hoy</strong>.</p>
            <table style='border-collapse:separate;width:100%'>"
            . filaDato('📅 Fecha salida', fecha_cl($row['fecha_salida']))
            . filaDato('⏰ Hora salida', hora_cl($row['hora_salida']) . ' hrs')
            . filaDato('🏢 Departamento', e($row['numero_departamento']))
            . "</table>
            <p style='margin-top:14px'>Gracias por su visita. ¡Esperamos verle pronto! 🌊</p>
            <p style='font-size:13px;color:#64748b'>" . CONDOMINIO_DIRECCION . "</p>";

        $mail->Body    = plantillaCorreo('Aviso de Salida', $bloques, CONDOMINIO_NOMBRE);
        $mail->AltBody = 'Su salida está programada para hoy.';
        $mail->send();

        registrarBitacora($conn, (int)$row['id_arrendatario'], $row['email'], 'termino', $mail->Subject);
        $enviados++;
    } catch (Throwable $e) {
        $errores[] = "Salida {$row['nombre']}: " . $e->getMessage();
    }
}

/* ============================================================
   3. AVISOS AL PROPIETARIO — un día antes del ingreso
      y un día antes de la salida.
      Le llega a TODOS los propietarios del departamento.
============================================================ */
$avisosPropietario = [
    'prop_ingreso' => [
        'campo'   => 'fecha_inicio',
        'titulo'  => 'Mañana ingresa un arrendatario',
        'asunto'  => '🔔 Mañana ingresa un arrendatario',
        'icono'   => '📥',
        'accion'  => 'ingresa',
    ],
    'prop_salida' => [
        'campo'   => 'fecha_salida',
        'titulo'  => 'Mañana sale un arrendatario',
        'asunto'  => '🔔 Mañana sale un arrendatario',
        'icono'   => '📤',
        'accion'  => 'sale',
    ],
];

foreach ($avisosPropietario as $tipo => $cfg) {

    $campo = $cfg['campo'];   // nombre de columna fijo, definido arriba (no viene del usuario)

    $res = $conn->query("
        SELECT a.id_arrendatario, a.nombre, a.rut, a.celular, a.email,
               a.fecha_inicio, a.fecha_salida, a.hora_ingreso, a.hora_salida,
               a.patente_vehiculo,
               p.numero_departamento, p.estacionamiento,
               (SELECT COUNT(*) FROM acompanantes ac
                 WHERE ac.id_arrendatario = a.id_arrendatario) AS num_acomp
        FROM arrendatarios a
        JOIN propietarios p ON a.id_propietario = p.id_propietario
        WHERE DATEDIFF(a.$campo, CURDATE()) = 1");

    while ($row = $res->fetch_assoc()) {

        if (correoYaEnviadoHoy($conn, (int)$row['id_arrendatario'], $tipo)) {
            continue;
        }

        /* Todos los propietarios del departamento (matrimonios incluidos) */
        $destinatarios = correos_propietarios_departamento($conn, $row['numero_departamento']);
        if (!$destinatarios) {
            continue;
        }

        try {
            $mail = nuevoMailer();
            foreach ($destinatarios as $d) {
                $mail->addAddress($d['email'], $d['nombre']);
            }
            $mail->Subject = $cfg['asunto'] . " – Depto {$row['numero_departamento']}";

            $esIngreso = ($tipo === 'prop_ingreso');
            $fechaClave = $esIngreso ? $row['fecha_inicio'] : $row['fecha_salida'];
            $horaClave  = $esIngreso ? $row['hora_ingreso'] : $row['hora_salida'];

            $whatsapp = link_whatsapp($row['celular']);
            $waHtml = $whatsapp
                ? " <a href='" . e($whatsapp) . "' target='_blank'>(WhatsApp)</a>"
                : '';

            $bloques = "
                <p>Hola:</p>
                <p>Te recordamos que <strong>mañana {$cfg['accion']}</strong> un arrendatario
                   del departamento <strong>" . e($row['numero_departamento']) . "</strong>.</p>
                <table style='border-collapse:separate;width:100%'>"
                . filaDato($cfg['icono'] . ' ' . ($esIngreso ? 'Ingresa' : 'Sale'),
                           fecha_cl($fechaClave) . ' a las ' . hora_cl($horaClave) . ' hrs')
                . filaDato('👤 Arrendatario', e($row['nombre']))
                . filaDato('🪪 RUT', e($row['rut']))
                . filaDato('📱 Teléfono', e($row['celular']) . $waHtml)
                . filaDato('👥 Acompañantes', (int)$row['num_acomp'])
                . ($row['patente_vehiculo'] ? filaDato('🚗 Patente', e($row['patente_vehiculo'])) : '')
                . filaDato('🅿️ Estacionamiento', e($row['estacionamiento']))
                . filaDato('📆 Estadía completa',
                           fecha_cl($row['fecha_inicio']) . ' ' . hora_cl($row['hora_ingreso'])
                           . ' → ' . fecha_cl($row['fecha_salida']) . ' ' . hora_cl($row['hora_salida']))
                . "</table>
                <p style='margin-top:14px;font-size:13px;color:#64748b'>
                   Este es un recordatorio para ti como propietario.
                   El arrendatario recibe su propio aviso por separado.</p>";

            $mail->Body    = plantillaCorreo($cfg['titulo'], $bloques,
                                             'Departamento ' . $row['numero_departamento']);
            $mail->AltBody = "Mañana {$cfg['accion']} {$row['nombre']} "
                           . '(' . fecha_cl($fechaClave) . ' ' . hora_cl($horaClave) . ').';
            $mail->send();

            registrarBitacora(
                $conn,
                (int)$row['id_arrendatario'],
                implode(', ', array_column($destinatarios, 'email')),
                $tipo,
                $mail->Subject
            );
            $enviados++;
        } catch (Throwable $e) {
            $errores[] = "Aviso propietario ({$tipo}) {$row['nombre']}: " . $e->getMessage();
        }
    }
}

echo "✅ Proceso terminado. Correos enviados: $enviados";
if ($errores) {
    echo '<br>⚠️ Errores:<br>' . implode('<br>', array_map('htmlspecialchars', $errores));
}
