# Mejoras Adicionales Opcionales para el Calendario

## 1. Versión con Filtro Dinámico

Si deseas agregar un filtro para mostrar/ocultar eventos por tipo, agrega esto antes del calendario en `calendar-view.php`:

```html
<!-- Filtro de eventos -->
<div style="margin-bottom: 15px;">
  <button class="btn btn-sm btn-info" onclick="filterCalendar('all')">
    <i class="fa fa-list"></i> Todos
  </button>
  <button
    class="btn btn-sm btn-primary"
    onclick="filterCalendar('reservation')"
  >
    <i class="fa fa-calendar"></i> Citas
  </button>
  <button class="btn btn-sm btn-danger" onclick="filterCalendar('reserve')">
    <i class="fa fa-bookmark"></i> Solicitudes
  </button>
</div>

<script>
  function filterCalendar(type) {
    $.ajax({
      url: "./assets/ajax/calendar-events.php?filter=" + type,
      type: "GET",
      dataType: "json",
      success: function (events) {
        $("#calendar").fullCalendar("removeEvents");
        $("#calendar").fullCalendar("addEventSource", events);
        $("#calendar").fullCalendar("rerenderEvents");
      },
    });
  }
</script>
```

## 2. Estadísticas en Tiempo Real

Agregue un widget de estadísticas arriba del calendario:

```php
<?php
$totalReservations = count(ReservationData::getEvery());
$totalReserves = count(ReserveData::getAll());
$totalEvents = $totalReservations + $totalReserves;
?>

<div class="row">
  <div class="col-md-4">
    <div class="card">
      <div class="card-body text-center">
        <h5>Citas Totales</h5>
        <h3 class="text-primary"><?php echo $totalReservations; ?></h3>
      </div>
    </div>
  </div>
  <div class="col-md-4">
    <div class="card">
      <div class="card-body text-center">
        <h5>Solicitudes Totales</h5>
        <h3 class="text-danger"><?php echo $totalReserves; ?></h3>
      </div>
    </div>
  </div>
  <div class="col-md-4">
    <div class="card">
      <div class="card-body text-center">
        <h5>Eventos Totales</h5>
        <h3 class="text-success"><?php echo $totalEvents; ?></h3>
      </div>
    </div>
  </div>
</div>
```

## 3. Campos Adicionales de Reserve para Mejorar Visualización

Si quieres que los eventos de reserve muestren más información, puedes modificar la tabla `reserve` para agregar:

```sql
ALTER TABLE reserve ADD COLUMN (
  date_at DATE,
  time_at TIME,
  status ENUM('pendiente', 'confirmada', 'cancelada') DEFAULT 'pendiente'
);
```

Luego actualizar en calendar-view.php:

```php
"start" => $reserve->date_at . "T" . $reserve->time_at,
```

## 4. Notificaciones Visuales

Agregar notificación cuando haya nuevas solicitudes de reserva:

```javascript
<script>
  // Verificar nuevas reservas cada 5 minutos
  setInterval(function() {
    $.ajax({
      url: './assets/ajax/check-new-reserves.php',
      type: 'GET',
      success: function(count) {
        if (count > 0) {
          console.log('Nuevas solicitudes de reserva: ' + count);
          // Mostrar notificación
          toastr.info(count + ' nuevas solicitudes de reserva', 'Notificación');
        }
      }
    });
  }, 300000); // 5 minutos
</script>
```

## 5. Exportar Calendario a iCal

Crear archivo `calendar-export.php`:

```php
<?php
require_once 'core/autoload.php';
include "core/app/model/ReservationData.php";
include "core/app/model/ReserveData.php";

header('Content-Type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename="calendario.ics"');

$ical = "BEGIN:VCALENDAR\n";
$ical .= "VERSION:2.0\n";
$ical .= "PRODID:-//Mi Sistema//Calendario//ES\n";
$ical .= "CALSCALE:GREGORIAN\n";

// Agregar eventos de reservations
foreach (ReservationData::getEvery() as $event) {
    $ical .= "BEGIN:VEVENT\n";
    $ical .= "UID:res_" . $event->id . "\n";
    $ical .= "SUMMARY:" . $event->title . "\n";
    $ical .= "DTSTART:" . str_replace('-', '', str_replace(':', '', $event->date_at . 'T' . $event->time_at)) . "\n";
    $ical .= "END:VEVENT\n";
}

// Agregar eventos de reserves
foreach (ReserveData::getAll() as $reserve) {
    $ical .= "BEGIN:VEVENT\n";
    $ical .= "UID:rev_" . $reserve->id . "\n";
    $ical .= "SUMMARY:RESERVA: " . $reserve->name . "\n";
    $ical .= "DTSTART:" . str_replace('-', '', date('Y-m-d', strtotime($reserve->created_at))) . "T100000\n";
    $ical .= "END:VEVENT\n";
}

$ical .= "END:VCALENDAR\n";

echo $ical;
?>
```

## 6. Búsqueda Avanzada en Calendario

Agregar un campo de búsqueda:

```html
<input
  type="text"
  id="searchCalendar"
  placeholder="Buscar paciente..."
  class="form-control"
  style="margin-bottom: 10px;"
/>

<script>
  $("#searchCalendar").on("keyup", function () {
    var searchTerm = $(this).val().toLowerCase();
    var allEvents = $("#calendar").fullCalendar("clientEvents");

    $("#calendar").fullCalendar("removeEvents");

    var filteredEvents = allEvents.filter(function (event) {
      return event.title.toLowerCase().includes(searchTerm);
    });

    $("#calendar").fullCalendar("addEventSource", filteredEvents);
    $("#calendar").fullCalendar("rerenderEvents");
  });
</script>
```

## Implementación Recomendada

Para una integración completa, recomendamos implementar en este orden:

1. ✅ **Básico**: Integración actual (ya implementada)
2. 🔄 **Intermedio**: Agregar filtro dinámico (opción 1)
3. 📊 **Avanzado**: Estadísticas en tiempo real (opción 2)
4. 🔔 **Premium**: Notificaciones y búsqueda (opciones 4 y 6)

Contáctame si necesitas ayuda implementando cualquiera de estas mejoras.
