<?php
/**
 * ============================================================
 *  FORMULARIO PÚBLICO DE SOLICITUD DE ARRIENDO
 *  Enlace por departamento:  solicitar.php?depto=1031
 *
 *  · Valida que las fechas y horas no choquen con un arriendo ya
 *    confirmado (dos arriendos el mismo día están permitidos
 *    mientras las horas no se pisen).
 *  · Si algún RUT está en lista negra NO se le dice nada al
 *    arrendatario: la solicitud se recibe igual y se marca
 *    internamente para que el propietario lo vea.
 * ============================================================
 */
session_start();
require_once 'conexion.php';
require_once 'includes/helpers.php';
require_once 'includes/departamentos.php';
require_once 'includes/mailer.php';

$depto = trim($_GET['depto'] ?? $_POST['depto'] ?? '');

/* ---------- Validar que el departamento exista ---------- */
$stmt = $conn->prepare("SELECT numero_departamento FROM propietarios
                        WHERE numero_departamento = ? LIMIT 1");
$stmt->bind_param('s', $depto);
$stmt->execute();
$deptoValido = (bool)$stmt->get_result()->fetch_assoc();

$errores = [];
$enviado = false;

/* Token simple para que el formulario no se reenvíe dos veces */
if (empty($_SESSION['csrf_publico'])) {
    $_SESSION['csrf_publico'] = bin2hex(random_bytes(24));
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && $deptoValido) {

    if (($_POST['csrf'] ?? '') !== $_SESSION['csrf_publico']) {
        $errores[] = 'La sesión expiró. Vuelve a enviar el 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'] ?? '';
    $patente      = trim($_POST['patente_vehiculo'] ?? '');
    $mensaje      = trim($_POST['mensaje'] ?? '');

    /* ---------- Validaciones básicas ---------- */
    if ($nombre === '' || $rut === '' || $email === '') {
        $errores[] = 'Completa tu nombre, RUT y correo electrónico.';
    }
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errores[] = 'El correo electrónico no es válido.';
    }
    if (validar_rut($rut) === false) {
        $errores[] = 'El RUT ingresado no es válido. Revísalo por favor.';
    }
    if ($fecha_inicio === '' || $fecha_salida === '' || $hora_ingreso === '' || $hora_salida === '') {
        $errores[] = 'Completa las fechas y horas de ingreso y salida.';
    } elseif ($fecha_inicio < date('Y-m-d')) {
        $errores[] = 'La fecha de ingreso no puede ser anterior a hoy.';
    } elseif (($fecha_salida . ' ' . $hora_salida) <= ($fecha_inicio . ' ' . $hora_ingreso)) {
        $errores[] = 'La salida debe ser posterior al ingreso.';
    }

    /* ---------- Disponibilidad ---------- */
    if (!$errores) {
        $choque = arriendo_en_conflicto($conn, $depto, $fecha_inicio, $hora_ingreso,
                                        $fecha_salida, $hora_salida);
        if (!$choque) {
            $choque = solicitud_en_conflicto($conn, $depto, $fecha_inicio, $hora_ingreso,
                                             $fecha_salida, $hora_salida);
        }
        if ($choque) {
            $errores[] = '⛔ Esas fechas no están disponibles. El departamento ya está '
                       . 'arrendado desde el ' . texto_rango($choque) . ' hrs. '
                       . 'Puedes elegir otro horario: si un arriendo termina a las 12:00, '
                       . 'el siguiente puede comenzar desde esa misma hora.';
        }
    }

    /* ---------- Guardar ---------- */
    if (!$errores) {

        /* Lista negra: se revisa en silencio (titular + acompañantes).
           El arrendatario NO se entera; solo queda marcado para el propietario. */
        $alerta = 0;
        $detalle = [];
        if ($ln = en_lista_negra($conn, $rut)) {
            $alerta = 1;
            $detalle[] = "Titular {$nombre} ({$rut}): {$ln['motivo']}";
        }
        $acompValidos = [];
        foreach (($_POST['acompanantes'] ?? []) as $a) {
            $an = trim($a['nombre'] ?? '');
            $ar = trim($a['rut'] ?? '');
            if ($an === '' || $ar === '') continue;
            $acompValidos[] = ['nombre' => $an, 'rut' => $ar];
            if ($lna = en_lista_negra($conn, $ar)) {
                $alerta = 1;
                $detalle[] = "Acompañante {$an} ({$ar}): {$lna['motivo']}";
            }
        }
        $detalleTexto = $detalle ? implode(' | ', $detalle) : null;

        $stmt = $conn->prepare("
            INSERT INTO solicitudes
                (numero_departamento, nombre, rut, direccion, celular, email,
                 fecha_inicio, fecha_salida, hora_ingreso, hora_salida,
                 patente_vehiculo, mensaje, alerta_lista_negra, detalle_lista_negra)
            VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
        $stmt->bind_param(
            'ssssssssssssis',
            $depto, $nombre, $rut, $direccion, $celular, $email,
            $fecha_inicio, $fecha_salida, $hora_ingreso, $hora_salida,
            $patente, $mensaje, $alerta, $detalleTexto
        );
        $stmt->execute();
        $id_solicitud = $conn->insert_id;

        if ($acompValidos) {
            $stmtA = $conn->prepare("INSERT INTO solicitud_acompanantes (id_solicitud, nombre, rut)
                                     VALUES (?, ?, ?)");
            foreach ($acompValidos as $a) {
                $stmtA->bind_param('iss', $id_solicitud, $a['nombre'], $a['rut']);
                $stmtA->execute();
            }
        }

        /* ---------- Avisar a los propietarios ---------- */
        try {
            $destinatarios = correos_propietarios_departamento($conn, $depto);
            if ($destinatarios) {
                $mail = nuevoMailer();
                foreach ($destinatarios as $d) {
                    $mail->addAddress($d['email'], $d['nombre']);
                }
                $mail->Subject = "📨 Nueva solicitud de arriendo – Depto $depto";

                $alertaHtml = '';
                if ($alerta) {
                    $alertaHtml = "
                        <div style='background:#fef2f2;border:1px solid #fecaca;border-radius:10px;
                                    padding:14px;margin:16px 0;color:#991b1b'>
                          <strong>⚠️ ATENCIÓN: hay un RUT en tu lista negra</strong><br>
                          <span style='font-size:13px'>" . e($detalleTexto) . "</span><br>
                          <span style='font-size:12px;color:#7f1d1d'>
                            El solicitante no fue informado de esto.
                          </span>
                        </div>";
                }

                $listaAcomp = '';
                if ($acompValidos) {
                    $listaAcomp = '<ul style="margin:6px 0 0;padding-left:18px;font-size:13px">';
                    foreach ($acompValidos as $a) {
                        $listaAcomp .= '<li>' . e($a['nombre']) . ' — ' . e($a['rut']) . '</li>';
                    }
                    $listaAcomp .= '</ul>';
                }

                $bloques = "
                    <p>Recibiste una <strong>nueva solicitud de arriendo</strong> para el
                       departamento <strong>" . e($depto) . "</strong>.</p>
                    $alertaHtml
                    <table style='border-collapse:separate;width:100%'>"
                    . filaDato('👤 Solicitante', e($nombre))
                    . filaDato('🪪 RUT', e($rut))
                    . filaDato('📧 Correo', e($email))
                    . filaDato('📱 Teléfono', e($celular))
                    . filaDato('📥 Ingreso', fecha_cl($fecha_inicio) . ' ' . hora_cl($hora_ingreso) . ' hrs')
                    . filaDato('📤 Salida', fecha_cl($fecha_salida) . ' ' . hora_cl($hora_salida) . ' hrs')
                    . filaDato('🌙 Noches', dias_arriendo($fecha_inicio, $fecha_salida))
                    . ($patente ? filaDato('🚗 Patente', e($patente)) : '')
                    . ($acompValidos ? filaDato('👥 Acompañantes', $listaAcomp) : '')
                    . ($mensaje ? filaDato('💬 Mensaje', nl2br(e($mensaje))) : '')
                    . "</table>
                    <p style='margin-top:16px'>
                      <a href='" . BASE_URL . "/solicitudes.php'
                         style='background:#4f46e5;color:#fff;padding:11px 20px;border-radius:9px;
                                text-decoration:none;display:inline-block;font-weight:600'>
                        Revisar y aceptar o rechazar
                      </a>
                    </p>
                    <p style='font-size:13px;color:#64748b'>
                      La solicitud queda <strong>pendiente</strong> hasta que la aceptes.
                      No se reservó ninguna fecha todavía.</p>";

                $mail->Body    = plantillaCorreo('Nueva solicitud de arriendo', $bloques,
                                                 'Departamento ' . $depto);
                $mail->AltBody = "Nueva solicitud de $nombre para el depto $depto.";
                $mail->send();

                registrarBitacora($conn, 0, implode(', ', array_column($destinatarios, 'email')),
                                  'solicitud', $mail->Subject, 'formulario público');
            }
        } catch (Throwable $ex) {
            // Si el correo falla, la solicitud igual quedó guardada.
        }

        $_SESSION['csrf_publico'] = bin2hex(random_bytes(24)); // evita reenvío
        $enviado = true;
    }
}
?>
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Solicitar Arriendo · <?= CONDOMINIO_NOMBRE ?></title>
<link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🏖️</text></svg>">
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.3/font/bootstrap-icons.min.css" rel="stylesheet">
<link href="assets/css/app.css" rel="stylesheet">
<style>
  body { background: linear-gradient(160deg,#0f172a 0%,#312e81 60%,#4f46e5 100%); min-height:100vh; padding:24px 12px; }
  .publico { max-width: 860px; margin: 0 auto; }
  .publico .card { border-radius: 18px; }
  .cabecera-publica { color:#fff; text-align:center; margin-bottom:22px; }
</style>
</head>
<body>

<div class="publico">

  <div class="cabecera-publica">
    <div class="login-logo mb-2"><i class="bi bi-buildings"></i></div>
    <h1 class="fs-4 fw-bold mb-1">Solicitud de Arriendo</h1>
    <p class="mb-0" style="opacity:.85"><?= CONDOMINIO_NOMBRE ?>
      <?= $deptoValido ? '· Departamento ' . e($depto) : '' ?></p>
  </div>

<?php if (!$deptoValido): ?>

  <div class="card">
    <div class="card-body text-center py-5">
      <i class="bi bi-exclamation-triangle text-warning" style="font-size:44px"></i>
      <h2 class="fs-5 fw-bold mt-3">Enlace no válido</h2>
      <p class="text-secondary mb-0">
        Este enlace no corresponde a ningún departamento.<br>
        Solicita el enlace correcto al propietario.
      </p>
    </div>
  </div>

<?php elseif ($enviado): ?>

  <div class="card">
    <div class="card-body text-center py-5">
      <i class="bi bi-check-circle-fill text-success" style="font-size:52px"></i>
      <h2 class="fs-4 fw-bold mt-3">¡Solicitud enviada!</h2>
      <p class="text-secondary">
        El propietario recibió tu solicitud y te responderá al correo
        <strong><?= e($_POST['email']) ?></strong>.
      </p>
      <div class="alert alert-info d-inline-block text-start mt-2" style="font-size:14px">
        <i class="bi bi-info-circle me-1"></i>
        Tu arriendo <strong>todavía no está confirmado</strong>.
        Queda pendiente hasta que el propietario lo acepte.
      </div>
    </div>
  </div>

<?php else: ?>

  <?php if ($errores): ?>
    <div class="alert alert-danger">
      <?php foreach ($errores as $err): ?>
        <div><i class="bi bi-x-circle me-1"></i><?= e($err) ?></div>
      <?php endforeach; ?>
    </div>
  <?php endif; ?>

  <form method="POST" id="formSolicitud">
    <input type="hidden" name="csrf" value="<?= e($_SESSION['csrf_publico']) ?>">
    <input type="hidden" name="depto" value="<?= e($depto) ?>">

    <div class="card mb-3">
      <div class="card-header"><i class="bi bi-person me-2 text-primary"></i> Tus datos</div>
      <div class="card-body">
        <div class="row g-3">
          <div class="col-md-6">
            <label class="form-label">Nombre completo *</label>
            <input name="nombre" class="form-control" required
                   value="<?= e($_POST['nombre'] ?? '') ?>">
          </div>
          <div class="col-md-6">
            <label class="form-label">RUT *</label>
            <input name="rut" id="rut" class="form-control" required placeholder="12345678-9"
                   oninput="marcarRut(this)" value="<?= e($_POST['rut'] ?? '') ?>">
          </div>
          <div class="col-md-6">
            <label class="form-label">Correo electrónico *</label>
            <input type="email" name="email" class="form-control" required
                   value="<?= e($_POST['email'] ?? '') ?>">
            <div class="form-text">Aquí te llegará la respuesta del propietario.</div>
          </div>
          <div class="col-md-3">
            <label class="form-label">Teléfono</label>
            <input name="celular" class="form-control" placeholder="+56 9 ..."
                   value="<?= e($_POST['celular'] ?? '') ?>">
          </div>
          <div class="col-md-3">
            <label class="form-label">Patente vehículo</label>
            <input name="patente_vehiculo" class="form-control" placeholder="ABCD12"
                   value="<?= e($_POST['patente_vehiculo'] ?? '') ?>">
          </div>
          <div class="col-12">
            <label class="form-label">Ciudad / comuna donde vives</label>
            <input name="direccion" class="form-control"
                   value="<?= e($_POST['direccion'] ?? '') ?>">
          </div>
        </div>
      </div>
    </div>

    <div class="card mb-3">
      <div class="card-header"><i class="bi bi-calendar-range me-2 text-primary"></i> Fechas que quieres arrendar</div>
      <div class="card-body">
        <div class="row g-3">
          <div class="col-md-3 col-7">
            <label class="form-label">Fecha ingreso *</label>
            <input type="date" name="fecha_inicio" id="fecha_inicio" class="form-control" required
                   min="<?= date('Y-m-d') ?>" value="<?= e($_POST['fecha_inicio'] ?? '') ?>">
          </div>
          <div class="col-md-3 col-5">
            <label class="form-label">Hora ingreso *</label>
            <input type="time" name="hora_ingreso" class="form-control" required
                   value="<?= e($_POST['hora_ingreso'] ?? '16:00') ?>">
          </div>
          <div class="col-md-3 col-7">
            <label class="form-label">Fecha salida *</label>
            <input type="date" name="fecha_salida" id="fecha_salida" class="form-control" required
                   min="<?= date('Y-m-d') ?>" value="<?= e($_POST['fecha_salida'] ?? '') ?>">
          </div>
          <div class="col-md-3 col-5">
            <label class="form-label">Hora salida *</label>
            <input type="time" name="hora_salida" class="form-control" required
                   value="<?= e($_POST['hora_salida'] ?? '12:00') ?>">
          </div>
        </div>
        <div id="avisoDisponible" class="alert mt-3 py-2 mb-0 d-none" style="font-size:14px"></div>
      </div>
    </div>

    <div class="card mb-3">
      <div class="card-header d-flex align-items-center">
        <i class="bi bi-people me-2 text-primary"></i> ¿Quiénes te acompañan?
        <button type="button" class="btn btn-sm btn-outline-primary ms-auto" onclick="agregarAcomp()">
          <i class="bi bi-plus-lg"></i> Agregar
        </button>
      </div>
      <div class="card-body">
        <div id="acompanantes"></div>
        <p id="sinAcomp" class="text-secondary mb-0" style="font-size:14px">
          Agrega a todas las personas que se alojarán contigo.
        </p>
      </div>
    </div>

    <div class="card mb-3">
      <div class="card-body">
        <label class="form-label">Mensaje para el propietario (opcional)</label>
        <textarea name="mensaje" class="form-control" rows="3"
                  placeholder="Cuéntale cualquier cosa que necesite saber…"><?= e($_POST['mensaje'] ?? '') ?></textarea>
      </div>
    </div>

    <div class="d-grid mb-4">
      <button class="btn btn-primary btn-lg" id="btnEnviar">
        <i class="bi bi-send me-1"></i> Enviar solicitud
      </button>
    </div>
  </form>

<?php endif; ?>

  <p class="text-center text-white-50" style="font-size:12px">
    <?= CONDOMINIO_NOMBRE ?> · <?= date('Y') ?>
  </p>
</div>

<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js"></script>
<script src="assets/js/app.js"></script>
<script>
let i = 0;
function agregarAcomp(nombre = '', rut = '') {
  i++;
  document.getElementById('sinAcomp').style.display = 'none';
  const fila = document.createElement('div');
  fila.className = 'row g-2 mb-2 fila-acomp';
  fila.innerHTML = `
    <div class="col-6"><input class="form-control" name="acompanantes[${i}][nombre]" placeholder="Nombre completo"></div>
    <div class="col-5"><input class="form-control" name="acompanantes[${i}][rut]" placeholder="RUT" oninput="marcarRut(this)"></div>
    <div class="col-1 d-grid"><button type="button" class="btn btn-outline-danger"><i class="bi bi-x-lg"></i></button></div>`;
  fila.querySelector('button').addEventListener('click', () => {
    fila.remove();
    if (!document.querySelectorAll('.fila-acomp').length) {
      document.getElementById('sinAcomp').style.display = '';
    }
  });
  document.getElementById('acompanantes').appendChild(fila);
}

/* Consulta de disponibilidad mientras el usuario elige las fechas */
function revisarDisponibilidad() {
  const fi = document.getElementById('fecha_inicio').value;
  const fs = document.getElementById('fecha_salida').value;
  const hi = document.querySelector('[name=hora_ingreso]').value;
  const hs = document.querySelector('[name=hora_salida]').value;
  const box = document.getElementById('avisoDisponible');
  if (!fi || !fs || !hi || !hs) return;

  if ((fs + ' ' + hs) <= (fi + ' ' + hi)) {
    box.className = 'alert alert-warning mt-3 py-2 mb-0';
    box.innerHTML = '<i class="bi bi-exclamation-triangle me-1"></i> La salida debe ser posterior al ingreso.';
    return;
  }

  const params = new URLSearchParams({
    depto: '<?= e($depto) ?>', fecha_inicio: fi, fecha_salida: fs,
    hora_ingreso: hi, hora_salida: hs
  });
  fetch('verificar_disponibilidad.php?' + params)
    .then(r => r.json())
    .then(d => {
      box.classList.remove('d-none');
      if (d.disponible) {
        box.className = 'alert alert-success mt-3 py-2 mb-0';
        box.innerHTML = '<i class="bi bi-check-circle me-1"></i> ¡Fechas disponibles! Puedes continuar.';
        document.getElementById('btnEnviar').disabled = false;
      } else {
        box.className = 'alert alert-danger mt-3 py-2 mb-0';
        box.innerHTML = '<i class="bi bi-x-circle me-1"></i> <strong>No disponible.</strong> ' + d.mensaje;
        document.getElementById('btnEnviar').disabled = true;
      }
    })
    .catch(() => {});
}
['fecha_inicio', 'fecha_salida'].forEach(id =>
  document.getElementById(id)?.addEventListener('change', revisarDisponibilidad));
document.querySelectorAll('[name=hora_ingreso],[name=hora_salida]').forEach(el =>
  el.addEventListener('change', revisarDisponibilidad));
</script>
</body>
</html>
