<?php
require_once 'includes/auth.php';
exigir_rol('propietario');
require_once 'conexion.php';
require_once 'includes/helpers.php';
require_once 'includes/mailer.php';
require_once 'includes/pdf_ficha.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    header('Location: registrar_arrendatario.php');
    exit;
}
csrf_check();

$id_usuario = $_SESSION['id_usuario'];

/* ---------- Propietario ---------- */
$stmt = $conn->prepare("SELECT id_propietario FROM propietarios WHERE id_usuario = ?");
$stmt->bind_param('i', $id_usuario);
$stmt->execute();
$res = $stmt->get_result();
if ($res->num_rows !== 1) die('Propietario no encontrado');
$id_propietario = $res->fetch_assoc()['id_propietario'];

/* ---------- Datos del formulario ---------- */
$nombre             = trim($_POST['nombre'] ?? '');
$rut                = trim($_POST['rut'] ?? '');
$direccion          = trim($_POST['direccion'] ?? '');
$celular            = trim($_POST['celular'] ?? '');
$email              = trim($_POST['email'] ?? '');
$fecha_inicio       = $_POST['fecha_inicio'] ?? '';
$fecha_salida       = $_POST['fecha_salida'] ?? '';
$hora_ingreso       = $_POST['hora_ingreso'] ?? '';
$hora_salida        = $_POST['hora_salida'] ?? '';
$autorizado_visitas = $_POST['autorizado_visitas'] ?? 'SI';
$patente_vehiculo   = trim($_POST['patente_vehiculo'] ?? '') ?: null;
$url_externa        = trim($_POST['url_externa'] ?? '') ?: null;

if ($nombre === '' || $rut === '' || $fecha_inicio === '' || $fecha_salida === '') {
    die('Faltan datos obligatorios.');
}
if ($fecha_salida <= $fecha_inicio) {
    die('La fecha de salida debe ser posterior a la fecha de ingreso.');
}

/* ---------- Lista negra (titular y acompañantes) ---------- */
if ($ln = en_lista_negra($conn, $rut)) {
    die('⛔ El RUT ' . e($rut) . ' está en la lista negra: ' . e($ln['motivo']));
}
if (!empty($_POST['acompanantes'])) {
    foreach ($_POST['acompanantes'] as $a) {
        if (!empty($a['rut']) && ($ln = en_lista_negra($conn, $a['rut']))) {
            die('⛔ El acompañante con RUT ' . e($a['rut']) . ' está en la lista negra: ' . e($ln['motivo']));
        }
    }
}

/* ---------- Imagen (código de acceso) ---------- */
$imagen_nombre = null;
if (!empty($_FILES['imagen']['name']) && is_uploaded_file($_FILES['imagen']['tmp_name'])) {
    $permitidas = ['jpg', 'jpeg', 'png', 'gif', 'webp'];
    $ext = strtolower(pathinfo($_FILES['imagen']['name'], PATHINFO_EXTENSION));
    if (!in_array($ext, $permitidas, true)) {
        die('Formato de imagen no permitido (usa JPG, PNG, GIF o WEBP).');
    }
    if ($_FILES['imagen']['size'] > 8 * 1024 * 1024) {
        die('La imagen supera los 8 MB.');
    }
    $imagen_nombre = 'arr_' . time() . '_' . rand(1000, 9999) . '.' . $ext;
    if (!move_uploaded_file($_FILES['imagen']['tmp_name'], __DIR__ . '/uploads_arrendatarios/' . $imagen_nombre)) {
        die('Error al subir la imagen');
    }
}

/* ---------- Insertar arrendatario ---------- */
$token_pdf = bin2hex(random_bytes(32));

$stmt = $conn->prepare("
    INSERT INTO arrendatarios (
        id_propietario, nombre, rut, direccion, celular, email,
        fecha_inicio, fecha_salida, autorizado_visitas,
        hora_ingreso, hora_salida, patente_vehiculo,
        imagen, url_externa, token_pdf
    ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param(
    'issssssssssssss',
    $id_propietario, $nombre, $rut, $direccion, $celular, $email,
    $fecha_inicio, $fecha_salida, $autorizado_visitas,
    $hora_ingreso, $hora_salida, $patente_vehiculo,
    $imagen_nombre, $url_externa, $token_pdf
);
if (!$stmt->execute()) {
    die('Error al guardar: ' . e($stmt->error));
}
$id_arr = $conn->insert_id;

/* ---------- Acompañantes ---------- */
if (!empty($_POST['acompanantes'])) {
    $stmtA = $conn->prepare("INSERT INTO acompanantes (id_arrendatario, nombre, rut) VALUES (?, ?, ?)");
    foreach ($_POST['acompanantes'] as $a) {
        $an = trim($a['nombre'] ?? '');
        $ar = trim($a['rut'] ?? '');
        if ($an !== '' && $ar !== '') {
            $stmtA->bind_param('iss', $id_arr, $an, $ar);
            $stmtA->execute();
        }
    }
}

/* ============================================================
   PDF + CORREO CON FICHA ADJUNTA
   ============================================================ */
$avisoCorreo = '';
try {
    $pdfPath = generarFichaPDF($conn, $id_arr, 'F');

    if ($pdfPath && $email) {
        $mail = nuevoMailer();
        $mail->addAddress($email, $nombre);
        $mail->Subject = '📄 Ficha de Ingreso – ' . CONDOMINIO_NOMBRE;

        $bloques = "
            <p>Estimado/a <strong>" . e($nombre) . "</strong>:</p>
            <p>Su arriendo fue registrado correctamente. Adjuntamos su
               <strong>Ficha de Ingreso en PDF</strong> con los datos entregados.
               Este documento es <strong>obligatorio para su ingreso</strong>.</p>
            <table style='border-collapse:separate;width:100%'>"
            . filaDato('📅 Ingreso', fecha_cl($fecha_inicio) . ' a las ' . hora_cl($hora_ingreso) . ' hrs')
            . filaDato('📅 Salida',  fecha_cl($fecha_salida) . ' a las ' . hora_cl($hora_salida) . ' hrs')
            . filaDato('🌙 Noches',  dias_arriendo($fecha_inicio, $fecha_salida))
            . ($patente_vehiculo ? filaDato('🚗 Patente', e($patente_vehiculo)) : '')
            . "</table>
            <p style='margin-top:14px'>
               📎 La ficha va <strong>adjunta a este correo</strong> en formato PDF.<br>
               📍 <a href='" . CONDOMINIO_MAPA . "' target='_blank'>Cómo llegar (Google Maps)</a>
            </p>
            <p style='font-size:13px;color:#64748b'>" . CONDOMINIO_DIRECCION . "</p>";

        $mail->Body    = plantillaCorreo('Ficha de Ingreso', $bloques, CONDOMINIO_NOMBRE);
        $mail->AltBody = 'Su arriendo fue registrado. La ficha va adjunta en PDF.';
        $mail->addAttachment($pdfPath, 'Ficha_Arriendo.pdf');
        $mail->send();

        registrarBitacora($conn, $id_arr, $email, 'manual', $mail->Subject, 'registro');
    }

    if ($pdfPath && file_exists($pdfPath)) {
        unlink($pdfPath);
    }
} catch (Throwable $ex) {
    // Si el correo falla, el registro ya quedó guardado: avisamos sin romper el flujo.
    $avisoCorreo = 'correo_error';
}

header('Location: propietario_dashboard.php?registro=ok' . ($avisoCorreo ? "&correo=$avisoCorreo" : ''));
exit;
