<?php
/**
 * Solicitudes de arriendo recibidas por el formulario público.
 * El propietario las acepta (se convierten en arriendo) o las rechaza.
 */
require_once 'includes/auth.php';
exigir_rol('propietario');
require_once 'conexion.php';
require_once 'includes/departamentos.php';
require_once 'includes/mailer.php';
require_once 'includes/layout.php';

$id_usuario = $_SESSION['id_usuario'];
$prop = departamento_de_usuario($conn, $id_usuario);
if (!$prop) die('Propietario no encontrado');

$depto          = $prop['numero_departamento'];
$id_propietario = (int)$prop['id_propietario'];

/* ============================================================
   ACEPTAR / RECHAZAR
============================================================ */
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    csrf_check();

    $id_solicitud = (int)($_POST['id_solicitud'] ?? 0);

    /* La solicitud debe ser del departamento del propietario */
    $stmt = $conn->prepare("SELECT * FROM solicitudes
                            WHERE id_solicitud = ? AND numero_departamento = ? LIMIT 1");
    $stmt->bind_param('is', $id_solicitud, $depto);
    $stmt->execute();
    $sol = $stmt->get_result()->fetch_assoc();

    if (!$sol) {
        $_SESSION['mensaje'] = 'Solicitud no encontrada.';
        header('Location: solicitudes.php');
        exit;
    }

    /* ---------- RECHAZAR ---------- */
    if (isset($_POST['rechazar'])) {
        $motivo = trim($_POST['motivo_rechazo'] ?? '');
        $stmt = $conn->prepare("UPDATE solicitudes
                                SET estado='rechazada', motivo_rechazo=?, resuelta_por=?,
                                    fecha_resolucion=NOW()
                                WHERE id_solicitud=?");
        $stmt->bind_param('sii', $motivo, $id_usuario, $id_solicitud);
        $stmt->execute();

        /* Avisar al solicitante (sin mencionar jamás la lista negra) */
        try {
            $mail = nuevoMailer();
            $mail->addAddress($sol['email'], $sol['nombre']);
            $mail->Subject = 'Respuesta a tu solicitud de arriendo';
            $bloques = "
                <p>Estimado/a <strong>" . e($sol['nombre']) . "</strong>:</p>
                <p>Lamentamos informarte que <strong>no podemos concretar tu solicitud</strong>
                   para las fechas del " . fecha_cl($sol['fecha_inicio']) . " al "
                   . fecha_cl($sol['fecha_salida']) . ".</p>"
                . ($motivo ? "<p><em>" . e($motivo) . "</em></p>" : '')
                . "<p>Gracias por tu interés. Puedes escribirnos si quieres consultar por otras fechas.</p>";
            $mail->Body    = plantillaCorreo('Solicitud no aceptada', $bloques, CONDOMINIO_NOMBRE);
            $mail->AltBody = 'Tu solicitud de arriendo no pudo ser aceptada.';
            $mail->send();
            registrarBitacora($conn, 0, $sol['email'], 'solicitud',
                              $mail->Subject, $_SESSION['nombre']);
        } catch (Throwable $e) { /* el rechazo ya quedó guardado */ }

        $_SESSION['mensaje'] = 'Solicitud rechazada y solicitante avisado.';
        header('Location: solicitudes.php');
        exit;
    }

    /* ---------- ACEPTAR ---------- */
    if (isset($_POST['aceptar'])) {

        /* Revalidar disponibilidad: pudo ocuparse mientras estaba pendiente */
        $choque = arriendo_en_conflicto($conn, $depto, $sol['fecha_inicio'], $sol['hora_ingreso'],
                                        $sol['fecha_salida'], $sol['hora_salida'])
               ?: solicitud_en_conflicto($conn, $depto, $sol['fecha_inicio'], $sol['hora_ingreso'],
                                         $sol['fecha_salida'], $sol['hora_salida'], $id_solicitud);
        if ($choque) {
            $_SESSION['mensaje'] = '⛔ No se pudo aceptar: esas fechas ya están ocupadas ('
                                 . texto_rango($choque) . ').';
            header('Location: solicitudes.php');
            exit;
        }

        $conn->begin_transaction();
        try {
            $token = bin2hex(random_bytes(32));
            $visitas = 'SI';

            $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, token_pdf)
                VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)");
            $stmt->bind_param(
                'issssssssssss',
                $id_propietario, $sol['nombre'], $sol['rut'], $sol['direccion'],
                $sol['celular'], $sol['email'], $sol['fecha_inicio'], $sol['fecha_salida'],
                $visitas, $sol['hora_ingreso'], $sol['hora_salida'],
                $sol['patente_vehiculo'], $token
            );
            $stmt->execute();
            $id_arr = $conn->insert_id;

            /* Copiar acompañantes */
            $stmtA = $conn->prepare("SELECT nombre, rut FROM solicitud_acompanantes WHERE id_solicitud = ?");
            $stmtA->bind_param('i', $id_solicitud);
            $stmtA->execute();
            $acomps = $stmtA->get_result();

            $ins = $conn->prepare("INSERT INTO acompanantes (id_arrendatario, nombre, rut) VALUES (?,?,?)");
            while ($a = $acomps->fetch_assoc()) {
                $ins->bind_param('iss', $id_arr, $a['nombre'], $a['rut']);
                $ins->execute();
            }

            $upd = $conn->prepare("UPDATE solicitudes
                                   SET estado='aceptada', id_arrendatario=?, resuelta_por=?,
                                       fecha_resolucion=NOW()
                                   WHERE id_solicitud=?");
            $upd->bind_param('iii', $id_arr, $id_usuario, $id_solicitud);
            $upd->execute();

            $conn->commit();

            /* Avisar al solicitante que fue aceptada (la ficha se envía aparte,
               cuando el propietario aprieta el botón de correo). */
            try {
                $mail = nuevoMailer();
                $mail->addAddress($sol['email'], $sol['nombre']);
                $mail->Subject = '✅ Tu arriendo fue confirmado';
                $bloques = "
                    <p>Estimado/a <strong>" . e($sol['nombre']) . "</strong>:</p>
                    <p>¡Buenas noticias! Tu solicitud fue <strong>aceptada</strong>.</p>
                    <table style='border-collapse:separate;width:100%'>"
                    . filaDato('📥 Ingreso', fecha_cl($sol['fecha_inicio']) . ' ' . hora_cl($sol['hora_ingreso']) . ' hrs')
                    . filaDato('📤 Salida',  fecha_cl($sol['fecha_salida']) . ' ' . hora_cl($sol['hora_salida']) . ' hrs')
                    . filaDato('🏢 Departamento', e($depto))
                    . "</table>
                    <p style='margin-top:14px'>Próximamente recibirás tu
                       <strong>ficha de arriendo en PDF</strong> con las instrucciones de ingreso.</p>
                    <p style='font-size:13px;color:#64748b'>" . CONDOMINIO_DIRECCION . "</p>";
                $mail->Body    = plantillaCorreo('Arriendo confirmado', $bloques, CONDOMINIO_NOMBRE);
                $mail->AltBody = 'Tu solicitud de arriendo fue aceptada.';
                $mail->send();
                registrarBitacora($conn, $id_arr, $sol['email'], 'solicitud',
                                  $mail->Subject, $_SESSION['nombre']);
            } catch (Throwable $e) { /* el arriendo ya quedó creado */ }

            $_SESSION['mensaje'] = '✅ Solicitud aceptada. El arriendo ya aparece en tu dashboard; '
                                 . 'envíale la ficha con el botón de correo cuando quieras.';
        } catch (Throwable $e) {
            $conn->rollback();
            $_SESSION['mensaje'] = 'Error al aceptar la solicitud: ' . $e->getMessage();
        }

        header('Location: solicitudes.php');
        exit;
    }
}

/* ============================================================
   LISTADO
============================================================ */
$filtro = $_GET['estado'] ?? 'pendiente';
$estadosValidos = ['pendiente', 'aceptada', 'rechazada', 'todas'];
if (!in_array($filtro, $estadosValidos, true)) $filtro = 'pendiente';

if ($filtro === 'todas') {
    $stmt = $conn->prepare("SELECT * FROM solicitudes WHERE numero_departamento = ?
                            ORDER BY FIELD(estado,'pendiente','aceptada','rechazada'), fecha_creacion DESC");
    $stmt->bind_param('s', $depto);
} else {
    $stmt = $conn->prepare("SELECT * FROM solicitudes WHERE numero_departamento = ? AND estado = ?
                            ORDER BY fecha_creacion DESC");
    $stmt->bind_param('ss', $depto, $filtro);
}
$stmt->execute();
$solicitudes = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);

/* Conteos por estado */
$stmt = $conn->prepare("SELECT estado, COUNT(*) c FROM solicitudes
                        WHERE numero_departamento = ? GROUP BY estado");
$stmt->bind_param('s', $depto);
$stmt->execute();
$conteo = ['pendiente' => 0, 'aceptada' => 0, 'rechazada' => 0];
$r = $stmt->get_result();
while ($x = $r->fetch_assoc()) $conteo[$x['estado']] = (int)$x['c'];

if (isset($_SESSION['mensaje'])) {
    $mensajeFlash = $_SESSION['mensaje'];
    unset($_SESSION['mensaje']);
}

$enlacePublico = BASE_URL . '/solicitar.php?depto=' . urlencode($depto);

page_header('Solicitudes de Arriendo', 'solicitudes');
?>

<?php if (isset($mensajeFlash)): ?>
<script>document.addEventListener('DOMContentLoaded', () => Swal.fire({
  icon: 'info', title: 'Listo', text: <?= json_encode($mensajeFlash) ?>, confirmButtonText: 'Entendido'
}));</script>
<?php endif; ?>

<!-- Enlace para compartir -->
<div class="card mb-4">
  <div class="card-body">
    <div class="d-flex flex-wrap align-items-center gap-2">
      <div class="flex-grow-1" style="min-width:240px">
        <div class="fw-semibold mb-1"><i class="bi bi-link-45deg text-primary"></i>
          Tu enlace para recibir solicitudes</div>
        <div class="text-secondary" style="font-size:13px">
          Compártelo con quien quiera arrendar tu departamento <?= e($depto) ?>.
          El sistema le muestra solo las fechas disponibles.
        </div>
      </div>
      <div class="input-group" style="max-width:520px">
        <input type="text" class="form-control" id="enlacePublico" readonly
               value="<?= e($enlacePublico) ?>">
        <button class="btn btn-primary" type="button" onclick="copiarEnlace()">
          <i class="bi bi-clipboard"></i> Copiar
        </button>
        <a class="btn btn-outline-success" target="_blank"
           href="https://wa.me/?text=<?= urlencode('Puedes solicitar tu arriendo aquí: ' . $enlacePublico) ?>">
          <i class="bi bi-whatsapp"></i>
        </a>
      </div>
    </div>
  </div>
</div>

<!-- Filtros -->
<div class="row g-3 mb-4">
  <?php
  $tarjetas = [
      ['Pendientes', $conteo['pendiente'], 'bg-warning-grad',   'bi-hourglass-split', 'pendiente'],
      ['Aceptadas',  $conteo['aceptada'],  'bg-success-grad',   'bi-check2-circle',   'aceptada'],
      ['Rechazadas', $conteo['rechazada'], 'bg-danger-grad',    'bi-x-circle',        'rechazada'],
      ['Todas',      array_sum($conteo),   'bg-info-grad',      'bi-collection',      'todas'],
  ];
  foreach ($tarjetas as $t): ?>
  <div class="col-6 col-lg-3">
    <a href="?estado=<?= $t[4] ?>" class="text-decoration-none text-reset">
      <div class="stat-card <?= $filtro === $t[4] ? 'activa' : '' ?>">
        <div class="stat-icon <?= $t[2] ?>"><i class="bi <?= $t[3] ?>"></i></div>
        <div class="stat-info"><h3><?= $t[1] ?></h3><span><?= $t[0] ?></span></div>
      </div>
    </a>
  </div>
  <?php endforeach; ?>
</div>

<?php if (!$solicitudes): ?>
  <div class="card"><div class="card-body text-center py-5">
    <i class="bi bi-inbox text-secondary" style="font-size:44px"></i>
    <p class="text-secondary mt-3 mb-0">No hay solicitudes <?= $filtro !== 'todas' ? e($filtro) . 's' : '' ?>.</p>
  </div></div>
<?php endif; ?>

<?php foreach ($solicitudes as $s):
    $acompStmt = $conn->prepare("SELECT nombre, rut FROM solicitud_acompanantes WHERE id_solicitud = ?");
    $acompStmt->bind_param('i', $s['id_solicitud']);
    $acompStmt->execute();
    $acomps = $acompStmt->get_result()->fetch_all(MYSQLI_ASSOC);

    $badge = ['pendiente' => 'warning', 'aceptada' => 'success', 'rechazada' => 'danger'][$s['estado']];
?>
<div class="card mb-3">
  <div class="card-header d-flex flex-wrap align-items-center gap-2">
    <span class="fw-semibold"><i class="bi bi-person-circle me-1 text-primary"></i>
      <?= e($s['nombre']) ?></span>
    <span class="badge estado-badge text-bg-<?= $badge ?>"><?= ucfirst($s['estado']) ?></span>
    <?php if ($s['alerta_lista_negra']): ?>
      <span class="badge estado-badge text-bg-danger">
        <i class="bi bi-shield-exclamation"></i> Lista negra
      </span>
    <?php endif; ?>
    <span class="ms-auto text-secondary" style="font-size:12px">
      Recibida el <?= fecha_hora_cl($s['fecha_creacion']) ?>
    </span>
  </div>
  <div class="card-body">

    <?php if ($s['alerta_lista_negra']): ?>
    <div class="alert alert-danger aviso-lista-negra">
      <strong><i class="bi bi-exclamation-triangle-fill me-1"></i>
        Atención: hay un RUT en tu lista negra</strong>
      <div style="font-size:13px" class="mt-1"><?= e($s['detalle_lista_negra']) ?></div>
      <div style="font-size:12px" class="mt-2 text-danger-emphasis">
        El solicitante <strong>no fue informado</strong> de esto. Decide tú si aceptas o rechazas.
      </div>
    </div>
    <?php endif; ?>

    <div class="row g-3">
      <div class="col-md-6">
        <table class="table table-sm mb-0">
          <tr><th style="width:130px">RUT</th><td><?= e($s['rut']) ?></td></tr>
          <tr><th>Correo</th><td><?= e($s['email']) ?></td></tr>
          <tr><th>Teléfono</th><td>
            <?= e($s['celular']) ?>
            <?php if ($wa = link_whatsapp($s['celular'])): ?>
              <a href="<?= e($wa) ?>" target="_blank" class="text-success ms-1"><i class="bi bi-whatsapp"></i></a>
            <?php endif; ?>
          </td></tr>
          <tr><th>Ciudad</th><td><?= e($s['direccion'] ?: '—') ?></td></tr>
          <tr><th>Patente</th><td><?= e($s['patente_vehiculo'] ?: '—') ?></td></tr>
        </table>
      </div>
      <div class="col-md-6">
        <table class="table table-sm mb-0">
          <tr><th style="width:130px">Ingreso</th>
              <td><?= fecha_cl($s['fecha_inicio']) ?> <?= hora_cl($s['hora_ingreso']) ?> hrs</td></tr>
          <tr><th>Salida</th>
              <td><?= fecha_cl($s['fecha_salida']) ?> <?= hora_cl($s['hora_salida']) ?> hrs</td></tr>
          <tr><th>Noches</th><td><?= dias_arriendo($s['fecha_inicio'], $s['fecha_salida']) ?></td></tr>
          <tr><th>Acompañantes</th><td>
            <?php if ($acomps): ?>
              <ul class="mb-0 ps-3" style="font-size:13px">
                <?php foreach ($acomps as $a): ?>
                  <li><?= e($a['nombre']) ?> — <?= e($a['rut']) ?></li>
                <?php endforeach; ?>
              </ul>
            <?php else: ?>—<?php endif; ?>
          </td></tr>
        </table>
      </div>
    </div>

    <?php if ($s['mensaje']): ?>
      <div class="alert alert-light border mt-3 mb-0" style="font-size:14px">
        <i class="bi bi-chat-quote me-1 text-secondary"></i> <?= nl2br(e($s['mensaje'])) ?>
      </div>
    <?php endif; ?>

    <?php if ($s['estado'] === 'rechazada' && $s['motivo_rechazo']): ?>
      <div class="alert alert-secondary mt-3 mb-0" style="font-size:14px">
        <strong>Motivo del rechazo:</strong> <?= e($s['motivo_rechazo']) ?>
      </div>
    <?php endif; ?>

    <?php if ($s['estado'] === 'pendiente'): ?>
    <div class="d-flex gap-2 mt-3">
      <form method="POST" class="d-inline" id="acep-<?= (int)$s['id_solicitud'] ?>">
        <?= csrf_field() ?>
        <input type="hidden" name="id_solicitud" value="<?= (int)$s['id_solicitud'] ?>">
        <input type="hidden" name="aceptar" value="1">
        <button type="button" class="btn btn-success"
          onclick="confirmarAceptar(<?= (int)$s['id_solicitud'] ?>, '<?= e(addslashes($s['nombre'])) ?>', <?= $s['alerta_lista_negra'] ? 'true' : 'false' ?>)">
          <i class="bi bi-check-lg"></i> Aceptar
        </button>
      </form>
      <button type="button" class="btn btn-outline-danger"
        onclick="rechazar(<?= (int)$s['id_solicitud'] ?>, '<?= e(addslashes($s['nombre'])) ?>')">
        <i class="bi bi-x-lg"></i> Rechazar
      </button>
    </div>
    <?php endif; ?>
  </div>
</div>
<?php endforeach; ?>

<form method="POST" id="formRechazo" class="d-none">
  <?= csrf_field() ?>
  <input type="hidden" name="id_solicitud" id="rechazoId">
  <input type="hidden" name="rechazar" value="1">
  <input type="hidden" name="motivo_rechazo" id="rechazoMotivo">
</form>

<?php
$js = <<<'JS'
<script>
function copiarEnlace() {
  const campo = document.getElementById('enlacePublico');
  campo.select();
  navigator.clipboard.writeText(campo.value)
    .then(() => avisar('success', 'Enlace copiado'))
    .catch(() => { document.execCommand('copy'); avisar('success', 'Enlace copiado'); });
}

function confirmarAceptar(id, nombre, enListaNegra) {
  const extra = enListaNegra
    ? '<div style="background:#fef2f2;border:1px solid #fecaca;border-radius:8px;padding:10px;margin-top:10px;color:#991b1b;font-size:13px">' +
      '<strong>⚠️ Recuerda:</strong> esta solicitud tiene un RUT en tu lista negra.</div>'
    : '';
  Swal.fire({
    title: '¿Aceptar la solicitud?',
    html: 'Se creará el arriendo de <strong>' + nombre + '</strong> y esas fechas quedarán ocupadas.' + extra,
    icon: enListaNegra ? 'warning' : 'question',
    showCancelButton: true,
    confirmButtonColor: '#059669',
    cancelButtonColor: '#64748b',
    confirmButtonText: 'Sí, aceptar',
    cancelButtonText: 'Cancelar'
  }).then(r => { if (r.isConfirmed) document.getElementById('acep-' + id).submit(); });
}

function rechazar(id, nombre) {
  Swal.fire({
    title: 'Rechazar solicitud',
    html: 'Se le avisará a <strong>' + nombre + '</strong> por correo.<br>' +
          '<span style="font-size:13px;color:#64748b">Nunca se menciona la lista negra.</span>',
    input: 'textarea',
    inputLabel: 'Motivo (opcional, lo verá el solicitante)',
    inputPlaceholder: 'Ej: esas fechas ya están comprometidas…',
    showCancelButton: true,
    confirmButtonColor: '#e11d48',
    cancelButtonColor: '#64748b',
    confirmButtonText: 'Rechazar',
    cancelButtonText: 'Cancelar'
  }).then(r => {
    if (r.isConfirmed) {
      document.getElementById('rechazoId').value = id;
      document.getElementById('rechazoMotivo').value = r.value || '';
      document.getElementById('formRechazo').submit();
    }
  });
}
</script>
JS;
page_footer($js);
