# language: es
# Fuente: album/book/ops-templates/veterinarian/02-gestion-agenda.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/mascotas/test_vet_availability.py
# Tests Frontend: npx playwright test vet-schedule.spec.ts

Característica: Gestion de agenda veterinaria

  Como veterinario
  Quiero gestionar mi calendario y disponibilidad
  Para organizar mis visitas a domicilio eficientemente

  Antecedentes:
    Dado que estoy logueado como veterinario
    Y estoy en la seccion "Mi agenda"

  # ============================================
  # VER AGENDA
  # ============================================

  Escenario: Ver calendario semanal
    Cuando veo mi agenda en vista semanal
    Entonces deberia ver los 7 dias de la semana
    Y deberia ver mis visitas programadas
    Y cada visita deberia mostrar hora y nombre del paciente

  Escenario: Ver visitas con codigo de color por estado
    Dado que tengo visitas en diferentes estados
    Cuando veo mi agenda
    Entonces las visitas deberian mostrarse con colores:
      | estado      | color     |
      | Coordinado  | amarillo  |
      | Pagado      | verde     |
      | En progreso | azul      |
      | Completado  | gris      |

  Escenario: Ver detalle de visita desde el calendario
    Dado que tengo una visita programada para hoy
    Cuando hago click en la visita
    Entonces deberia ver popup con:
      | campo        | valor                    |
      | Hora         | 10:00 - 11:00           |
      | Dueno        | Maria Garcia            |
      | Direccion    | Av Santa Fe 1234        |
      | Mascota      | Luna (Gato, 3 años)     |
      | Servicios    | Vacunacion, Consulta    |
      | Estado pago  | Pagado                  |
    Y deberia ver boton "Ver detalle completo"

  # ============================================
  # CONFIGURAR DISPONIBILIDAD SEMANAL
  # ============================================

  Escenario: Configurar horario laboral
    Cuando voy a "Configuracion" -> "Mi disponibilidad"
    Y configuro mi horario:
      | dia       | trabajo | desde | hasta | pausa_desde | pausa_hasta |
      | Lunes     | Si      | 09:00 | 18:00 | 13:00       | 14:00       |
      | Martes    | Si      | 09:00 | 18:00 | 13:00       | 14:00       |
      | Miercoles | Si      | 09:00 | 18:00 | 13:00       | 14:00       |
      | Jueves    | Si      | 09:00 | 18:00 | 13:00       | 14:00       |
      | Viernes   | Si      | 09:00 | 15:00 |             |             |
      | Sabado    | No      |       |       |             |             |
      | Domingo   | No      |       |       |             |             |
    Y guardo la configuracion
    Entonces mi disponibilidad deberia actualizarse
    Y no deberia recibir solicitudes fuera de ese horario

  # ============================================
  # BLOQUEAR DIAS ESPECIFICOS
  # ============================================

  Escenario: Marcar dia como no disponible
    Dado que necesito el 20 de enero libre
    Cuando hago click en el dia 20 de enero en el calendario
    Y selecciono "Marcar como no disponible"
    Y ingreso motivo "Vacaciones"
    Y confirmo
    Entonces el dia 20 deberia mostrarse como bloqueado
    Y no deberia poder aceptar solicitudes para ese dia

  Escenario: Bloquear rango de fechas
    Dado que tomo vacaciones del 15 al 22 de enero
    Cuando voy a "Agregar indisponibilidad"
    Y selecciono fecha inicio "15 de enero"
    Y selecciono fecha fin "22 de enero"
    Y ingreso motivo "Vacaciones"
    Y confirmo
    Entonces todos esos dias deberian mostrarse como bloqueados

  Escenario: Desbloquear dia
    Dado que tengo el 20 de enero bloqueado
    Y ya no necesito ese dia libre
    Cuando hago click en el dia bloqueado
    Y selecciono "Quitar bloqueo"
    Entonces el dia deberia estar disponible nuevamente

  # ============================================
  # IMPACTO EN SOLICITUDES
  # ============================================

  Regla: Los bloqueos no afectan visitas ya aceptadas

    Escenario: Bloquear dia con visita ya aceptada
      Dado que tengo una visita aceptada para el 15 de enero
      Cuando intento bloquear el 15 de enero
      Entonces deberia ver advertencia "Tienes una visita programada ese dia"
      Y deberia poder elegir:
        | opcion                        |
        | Cancelar el bloqueo           |
        | Bloquear y contactar al dueno |

  Regla: Cambios de disponibilidad solo afectan solicitudes futuras

    Escenario: Cambiar horario no afecta visitas existentes
      Dado que tengo una visita a las 17:00 el lunes
      Cuando cambio mi horario del lunes para terminar a las 16:00
      Y guardo los cambios
      Entonces la visita de las 17:00 deberia mantenerse
      Y deberia ver advertencia sobre la inconsistencia

  # ============================================
  # NAVEGACION
  # ============================================

  Escenario: Navegar entre semanas
    Cuando hago click en "Semana siguiente"
    Entonces deberia ver el calendario de la proxima semana
    Y deberia poder volver con "Semana anterior"

  Escenario: Ir a fecha especifica
    Cuando hago click en el selector de fecha
    Y selecciono "15 de marzo"
    Entonces deberia ver la semana que contiene el 15 de marzo
