# 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

Feature: Gestion de agenda veterinaria

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

  Background:
    Given que estoy logueado como veterinario
    And estoy en la seccion "Mi agenda"

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

  Scenario: Ver calendario semanal
    When veo mi agenda en vista semanal
    Then deberia ver los 7 dias de la semana
    And deberia ver mis visitas programadas
    And cada visita deberia mostrar hora y nombre del paciente

  Scenario: Ver visitas con codigo de color por estado
    Given que tengo visitas en diferentes estados
    When veo mi agenda
    Then las visitas deberian mostrarse con colores:
      | estado      | color     |
      | Coordinado  | amarillo  |
      | Pagado      | verde     |
      | En progreso | azul      |
      | Completado  | gris      |

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

  Scenario: Configurar horario laboral
    When voy a "Configuracion" -> "Mi disponibilidad"
    And 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      |       |       |             |             |
    And guardo la configuracion
    Then mi disponibilidad deberia actualizarse
    And no deberia recibir solicitudes fuera de ese horario

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

  Scenario: Marcar dia como no disponible
    Given que necesito el 20 de enero libre
    When hago click en el dia 20 de enero en el calendario
    And selecciono "Marcar como no disponible"
    And ingreso motivo "Vacaciones"
    And confirmo
    Then el dia 20 deberia mostrarse como bloqueado
    And no deberia poder aceptar solicitudes para ese dia

  Scenario: Bloquear rango de fechas
    Given que tomo vacaciones del 15 al 22 de enero
    When voy a "Agregar indisponibilidad"
    And selecciono fecha inicio "15 de enero"
    And selecciono fecha fin "22 de enero"
    And ingreso motivo "Vacaciones"
    And confirmo
    Then todos esos dias deberian mostrarse como bloqueados

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

  Rule: Los bloqueos no afectan visitas ya aceptadas

    Scenario: Bloquear dia con visita ya aceptada
      Given que tengo una visita aceptada para el 15 de enero
      When intento bloquear el 15 de enero
      Then deberia ver advertencia "Tienes una visita programada ese dia"
      And deberia poder elegir:
        | opcion                        |
        | Cancelar el bloqueo           |
        | Bloquear y contactar al dueno |

  Rule: Cambios de disponibilidad solo afectan solicitudes futuras

    Scenario: Cambiar horario no afecta visitas existentes
      Given que tengo una visita a las 17:00 el lunes
      When cambio mi horario del lunes para terminar a las 16:00
      And guardo los cambios
      Then la visita de las 17:00 deberia mantenerse
      And deberia ver advertencia sobre la inconsistencia
