<?php
require_once 'includes/auth.php';
exigir_rol('admin');
require_once 'conexion.php';
require_once 'includes/layout.php';

/* ---------- Acciones (POST + CSRF) ---------- */
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    csrf_check();
    $id_usuario = (int)($_POST['id_usuario'] ?? 0);

    if (isset($_POST['eliminar']) && $id_usuario) {
        $stmt = $conn->prepare("DELETE FROM usuarios WHERE id_usuario = ?");
        $stmt->bind_param('i', $id_usuario);
        $_SESSION['mensaje'] = $stmt->execute()
            ? 'Usuario eliminado con éxito.'
            : 'Error al eliminar (puede tener arrendatarios asociados).';
    }
    if (isset($_POST['bloquear']) && $id_usuario) {
        $stmt = $conn->prepare("UPDATE usuarios SET estado = 'bloqueado' WHERE id_usuario = ?");
        $stmt->bind_param('i', $id_usuario);
        $_SESSION['mensaje'] = $stmt->execute() ? 'Propietario bloqueado.' : 'Error al bloquear.';
    }
    if (isset($_POST['desbloquear']) && $id_usuario) {
        $stmt = $conn->prepare("UPDATE usuarios SET estado = 'activo' WHERE id_usuario = ?");
        $stmt->bind_param('i', $id_usuario);
        $_SESSION['mensaje'] = $stmt->execute() ? 'Propietario desbloqueado.' : 'Error al desbloquear.';
    }
    if (isset($_POST['reset_password']) && $id_usuario) {
        $nueva = password_hash('123456', PASSWORD_BCRYPT);
        $stmt = $conn->prepare("UPDATE usuarios SET password = ? WHERE id_usuario = ?");
        $stmt->bind_param('si', $nueva, $id_usuario);
        $_SESSION['mensaje'] = $stmt->execute()
            ? "Contraseña reseteada. La nueva contraseña es '123456'."
            : 'Error al resetear contraseña.';
    }
    header('Location: ' . $_SERVER['PHP_SELF']);
    exit;
}

/* ---------- Estadísticas ---------- */
$stats = $conn->query("
    SELECT
        (SELECT COUNT(*) FROM propietarios) AS propietarios,
        (SELECT COUNT(*) FROM usuarios WHERE rol = 'conserje') AS conserjes,
        (SELECT COUNT(*) FROM arrendatarios WHERE CURDATE() BETWEEN fecha_inicio AND fecha_salida) AS activos,
        (SELECT COUNT(*) FROM lista_negra) AS lista_negra
")->fetch_assoc();

/* ---------- Propietarios ---------- */
$search = trim($_GET['search'] ?? '');
$stmt = $conn->prepare("
    SELECT p.id_propietario, u.id_usuario, u.nombre, u.rut, u.email,
           p.numero_departamento, p.celular, p.estacionamiento, u.estado,
           (SELECT COUNT(*) FROM arrendatarios a WHERE a.id_propietario = p.id_propietario) AS num_arriendos
    FROM propietarios p
    JOIN usuarios u ON p.id_usuario = u.id_usuario
    WHERE u.nombre LIKE ? OR u.rut LIKE ? OR u.email LIKE ?
    ORDER BY u.nombre");
$term = "%$search%";
$stmt->bind_param('sss', $term, $term, $term);
$stmt->execute();
$propietarios = $stmt->get_result();

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

page_header('Dashboard Administrador', 'dashboard');
?>

<?php if (isset($mensajeFlash)): ?>
<script>document.addEventListener('DOMContentLoaded', () => avisar('info', <?= json_encode($mensajeFlash) ?>));</script>
<?php endif; ?>

<div class="row g-3 mb-4">
  <?php
  $cards = [
      ['Propietarios',      (int)$stats['propietarios'], 'bg-info-grad',    'bi-people'],
      ['Conserjes',         (int)$stats['conserjes'],    'bg-purple-grad',  'bi-person-badge'],
      ['Arriendos activos', (int)$stats['activos'],      'bg-success-grad', 'bi-house-check'],
      ['En lista negra',    (int)$stats['lista_negra'],  'bg-danger-grad',  'bi-shield-x'],
  ];
  foreach ($cards as $c): ?>
  <div class="col-6 col-lg-3">
    <div class="stat-card" style="cursor:default">
      <div class="stat-icon <?= $c[2] ?>"><i class="bi <?= $c[3] ?>"></i></div>
      <div class="stat-info"><h3><?= $c[1] ?></h3><span><?= $c[0] ?></span></div>
    </div>
  </div>
  <?php endforeach; ?>
</div>

<div class="card">
  <div class="card-header d-flex flex-wrap align-items-center gap-2">
    <span><i class="bi bi-people me-2 text-primary"></i> Propietarios</span>
    <form method="GET" class="d-flex flex-wrap gap-2 ms-auto" style="min-width:min(100%,430px)">
      <input type="text" name="search" class="form-control form-control-sm flex-grow-1" style="min-width:140px"
             placeholder="Buscar por nombre, RUT o email…" value="<?= e($search) ?>">
      <button type="submit" class="btn btn-sm btn-primary"><i class="bi bi-search"></i></button>
      <a href="registrar_propietario.php" class="btn btn-sm btn-outline-primary text-nowrap">
        <i class="bi bi-person-plus"></i> Nuevo
      </a>
    </form>
  </div>
  <div class="card-body">
    <div class="table-responsive">
      <table class="table table-hover align-middle">
        <thead>
          <tr>
            <th>Nombre</th><th>RUT</th><th>Email</th><th>Depto</th><th>Estac.</th>
            <th>Celular</th><th>Arriendos</th><th>Estado</th><th class="text-end">Acciones</th>
          </tr>
        </thead>
        <tbody>
        <?php while ($row = $propietarios->fetch_assoc()): ?>
          <tr>
            <td class="fw-semibold"><?= e($row['nombre']) ?></td>
            <td><?= e($row['rut']) ?></td>
            <td><?= e($row['email']) ?></td>
            <td class="text-center"><span class="badge text-bg-light border"><?= e($row['numero_departamento']) ?></span></td>
            <td class="text-center"><?= e($row['estacionamiento']) ?></td>
            <td><?= e($row['celular']) ?></td>
            <td class="text-center"><?= (int)$row['num_arriendos'] ?></td>
            <td>
              <?php if ($row['estado'] === 'activo'): ?>
                <span class="badge estado-badge text-bg-success">Activo</span>
              <?php else: ?>
                <span class="badge estado-badge text-bg-danger">Bloqueado</span>
              <?php endif; ?>
            </td>
            <td class="text-end">
              <form method="POST" class="d-inline" id="form-<?= (int)$row['id_usuario'] ?>">
                <?= csrf_field() ?>
                <input type="hidden" name="id_usuario" value="<?= (int)$row['id_usuario'] ?>">
                <div class="btn-group btn-group-sm">
                  <a href="editar_propietario.php?id=<?= (int)$row['id_propietario'] ?>"
                     class="btn btn-outline-warning" title="Editar"><i class="bi bi-pencil"></i></a>
                  <?php if ($row['estado'] === 'activo'): ?>
                    <button type="submit" name="bloquear" class="btn btn-outline-secondary" title="Bloquear">
                      <i class="bi bi-lock"></i></button>
                  <?php else: ?>
                    <button type="submit" name="desbloquear" class="btn btn-outline-success" title="Desbloquear">
                      <i class="bi bi-unlock"></i></button>
                  <?php endif; ?>
                  <button type="button" class="btn btn-outline-info" title="Resetear contraseña"
                          onclick="accionConfirmada(<?= (int)$row['id_usuario'] ?>, 'reset_password',
                            'Se reseteará la contraseña de <?= e(addslashes($row['nombre'])) ?> a 123456.')">
                    <i class="bi bi-key"></i></button>
                  <button type="button" class="btn btn-outline-danger" title="Eliminar"
                          onclick="accionConfirmada(<?= (int)$row['id_usuario'] ?>, 'eliminar',
                            'Se eliminará a <?= e(addslashes($row['nombre'])) ?> definitivamente.')">
                    <i class="bi bi-trash"></i></button>
                </div>
              </form>
            </td>
          </tr>
        <?php endwhile; ?>
        </tbody>
      </table>
    </div>
  </div>
</div>

<?php
$js = <<<'JS'
<script>
function accionConfirmada(idUsuario, accion, texto) {
  Swal.fire({
    title: '¿Estás seguro?', text: texto, icon: 'warning',
    showCancelButton: true, confirmButtonColor: '#e11d48', cancelButtonColor: '#64748b',
    confirmButtonText: 'Sí, continuar', cancelButtonText: 'Cancelar'
  }).then(r => {
    if (r.isConfirmed) {
      const form = document.getElementById('form-' + idUsuario);
      const input = document.createElement('input');
      input.type = 'hidden'; input.name = accion; input.value = '1';
      form.appendChild(input);
      form.submit();
    }
  });
}
</script>
JS;
page_footer($js);
