# 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

Feature: 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

  Background:
    Given que estoy en la pagina del turnero

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

  Scenario: Verificar cobertura en zona disponible
    When ingreso direccion "Av Santa Fe 1234, CABA"
    Then deberia ver mensaje "Tenemos cobertura en tu zona"
    And deberia poder continuar al siguiente paso

  Scenario: Zona sin cobertura
    When ingreso direccion "Calle Principal 100, Ushuaia"
    Then deberia ver mensaje "Aun no tenemos cobertura en tu zona"
    And deberia ver formulario "Avisame cuando lleguen"

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

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

    Examples:
      | 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
  # ============================================

  Scenario: Servicios filtrados por tipo de mascota
    Given que agregue una mascota tipo "Gato"
    When veo los servicios disponibles
    Then deberia ver "Vacuna triple felina"
    And deberia ver "Vacuna antirabica"
    But no deberia ver "Vacuna sextuple canina"

  Scenario: Consulta clinica se agrega automaticamente con vacunacion
    Given que estoy seleccionando servicios
    When selecciono "Vacunacion"
    Then "Consulta clinica" deberia agregarse automaticamente
    And deberia ver nota "Incluye revision general"
    And no deberia poder quitar "Consulta clinica"

  Scenario: Servicios combo con descuento
    Given que estoy seleccionando servicios
    When agrego los siguientes servicios:
      | servicio              |
      | Vacunacion            |
      | Desparasitacion       |
      | Antipulgas            |
    Then deberia ver "Plan preventivo completo"
    And el total deberia incluir descuento de combo

  Scenario: Castracion no disponible para mascota castrada
    Given que mi mascota esta marcada como castrada
    When veo los servicios disponibles
    Then no deberia ver "Castracion"

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

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

  Scenario: Detectar usuario existente por email
    Given que soy usuario invitado
    And existe una cuenta con email "existente@ejemplo.com"
    When ingreso email "existente@ejemplo.com" en datos de contacto
    Then deberia ver "Ya tenes cuenta con este email"
    And deberia ver opciones:
      | opcion                    |
      | Iniciar sesion            |
      | Continuar como invitado   |

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

  Scenario: Usuario abandona flujo a mitad
    Given que complete los datos de mascota
    And cerre el navegador sin enviar
    When vuelvo a la pagina del turnero
    Then deberia poder recuperar mi progreso
    # Nota: datos guardados en localStorage o session

  Scenario: Multiples mascotas en una solicitud
    Given que quiero atender a 2 mascotas
    When agrego mascota "Luna" tipo "Gato"
    And agrego mascota "Rocky" tipo "Perro"
    And selecciono servicios para cada una
    Then deberia crearse una solicitud con 2 mascotas
    And el precio deberia reflejar ambas

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