# language: es
# Fuente: album/book/ops-templates/pet-owner/02-reservar-turno.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/workflows/test_turnero_general.py
# Tests Frontend: npx playwright test turnero.spec.ts
# Relacionado: def/work_plan/10-flow-turnero.md

Característica: Reservar turno veterinario (Turnero)

  Como dueno de mascota
  Quiero reservar un turno veterinario a domicilio
  Para que atiendan a mi mascota sin salir de casa

  Antecedentes:
    Dado que estoy en la pagina del turnero

  # ============================================
  # VERIFICACION DE COBERTURA
  # ============================================

  Escenario: Verificar cobertura en zona disponible
    Cuando ingreso direccion "Av Santa Fe 1234, CABA"
    Entonces deberia ver mensaje "Tenemos cobertura en tu zona"
    Y deberia poder continuar al siguiente paso

  Escenario: Zona sin cobertura
    Cuando ingreso direccion "Calle Principal 100, Ushuaia"
    Entonces deberia ver mensaje "Aun no tenemos cobertura en tu zona"
    Y deberia ver formulario "Avisame cuando lleguen"

  # ============================================
  # FLUJO COMPLETO POR TIPO DE USUARIO
  # ============================================

  Esquema del escenario: Reservar turno como <tipo_usuario>
    Dado que soy un usuario <tipo_usuario>
    Y tengo cobertura en mi zona
    Cuando completo los datos de mi mascota:
      | campo    | valor   |
      | nombre   | Luna    |
      | tipo     | Gato    |
      | edad     | 2 años  |
      | castrada | Si      |
    Y selecciono servicios:
      | servicio    |
      | Vacunacion  |
    Y selecciono fechas preferidas:
      | fecha      | franja   |
      | 2024-01-15 | Mañana   |
      | 2024-01-16 | Tarde    |
    Y completo datos de contacto con email "<email>"
    Y envio la solicitud
    Entonces deberia crearse una solicitud en estado "Pendiente"
    Y el dueno deberia ser <estado_dueno>
    Y deberia recibir email de confirmacion

    Ejemplos:
      | tipo_usuario | email              | estado_dueno              |
      | invitado     | nuevo@test.com     | creado como invitado      |
      | registrado   | user@test.com      | mi cuenta existente       |
      | recurrente   | conocido@test.com  | identificado por email    |

  # ============================================
  # SELECCION DE SERVICIOS
  # ============================================

  Escenario: Servicios filtrados por tipo de mascota
    Dado que agregue una mascota tipo "Gato"
    Cuando veo los servicios disponibles
    Entonces deberia ver "Vacuna triple felina"
    Y deberia ver "Vacuna antirabica"
    Pero no deberia ver "Vacuna sextuple canina"

  Escenario: Consulta clinica se agrega automaticamente con vacunacion
    Dado que estoy seleccionando servicios
    Cuando selecciono "Vacunacion"
    Entonces "Consulta clinica" deberia agregarse automaticamente
    Y deberia ver nota "Incluye revision general"
    Y no deberia poder quitar "Consulta clinica"

  Escenario: Servicios combo con descuento
    Dado que estoy seleccionando servicios
    Cuando agrego los siguientes servicios:
      | servicio              |
      | Vacunacion            |
      | Desparasitacion       |
      | Antipulgas            |
    Entonces deberia ver "Plan preventivo completo"
    Y el total deberia incluir descuento de combo

  Escenario: Castracion no disponible para mascota castrada
    Dado que mi mascota esta marcada como castrada
    Cuando veo los servicios disponibles
    Entonces no deberia ver "Castracion"

  # ============================================
  # DATOS DE CONTACTO Y CUENTA
  # ============================================

  Escenario: Pre-llenado de datos para usuario logueado
    Dado que estoy logueado como "maria@ejemplo.com"
    Y tengo registrada mascota "Firulais"
    Cuando inicio el flujo de turnero
    Entonces mi direccion deberia estar pre-llenada
    Y deberia poder seleccionar "Firulais" de mis mascotas
    Y mis datos de contacto ya deberian estar completos

  Escenario: Detectar usuario existente por email
    Dado que soy usuario invitado
    Y existe una cuenta con email "existente@ejemplo.com"
    Cuando ingreso email "existente@ejemplo.com" en datos de contacto
    Entonces deberia ver "Ya tenes cuenta con este email"
    Y deberia ver opciones:
      | opcion                    |
      | Iniciar sesion            |
      | Continuar como invitado   |

  # ============================================
  # EDGE CASES
  # ============================================

  Escenario: Usuario abandona flujo a mitad
    Dado que complete los datos de mascota
    Y cerre el navegador sin enviar
    Cuando vuelvo a la pagina del turnero
    Entonces deberia poder recuperar mi progreso
    # Nota: datos guardados en localStorage o session

  Escenario: Multiples mascotas en una solicitud
    Dado que quiero atender a 2 mascotas
    Cuando agrego mascota "Luna" tipo "Gato"
    Y agrego mascota "Rocky" tipo "Perro"
    Y selecciono servicios para cada una
    Entonces deberia crearse una solicitud con 2 mascotas
    Y el precio deberia reflejar ambas

  Escenario: Franja horaria especifica
    Dado que solo puedo por la mañana
    Cuando selecciono franja "Mañana (9-12hs)"
    Entonces la solicitud deberia registrar esa preferencia
    # Nota: Es preferencia, no garantia
