# Fuente: album/book/ops-templates/pet-owner/03-gestion-mascotas.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/mascotas/test_pets.py
# Tests Frontend: npx playwright test pets.spec.ts

Feature: Gestion de mascotas

  Como dueno de mascota registrado
  Quiero gestionar la informacion de mis mascotas
  Para tenerla actualizada y acceder a su historial medico

  Background:
    Given que estoy logueado como dueno de mascota
    And estoy en la seccion "Mis mascotas"

  # ============================================
  # AGREGAR MASCOTA
  # ============================================

  Scenario: Agregar mascota con datos minimos
    When hago click en "Agregar mascota"
    And completo el formulario:
      | campo  | valor  |
      | nombre | Luna   |
      | tipo   | Gato   |
    And hago click en "Guardar"
    Then deberia ver "Luna" en mi lista de mascotas
    And Luna deberia aparecer disponible en el turnero

  Scenario: Agregar mascota con datos completos
    When hago click en "Agregar mascota"
    And completo el formulario:
      | campo             | valor           |
      | nombre            | Rocky           |
      | tipo              | Perro           |
      | raza              | Labrador        |
      | fecha_nacimiento  | 2020-03-15      |
      | peso              | 25              |
      | sexo              | Macho           |
      | castrado          | Si              |
    And subo una foto de Rocky
    And hago click en "Guardar"
    Then deberia ver "Rocky" con su foto en mi lista
    And deberia ver badge "Castrado"

  Scenario Outline: Validacion de datos de mascota
    When intento agregar mascota con <campo> igual a "<valor>"
    Then deberia ver error "<mensaje>"

    Examples:
      | campo  | valor                          | mensaje                    |
      | nombre |                                | El nombre es obligatorio   |
      | nombre | A                              | Nombre muy corto           |
      | tipo   |                                | Selecciona el tipo         |
      | peso   | -5                             | El peso debe ser positivo  |
      | peso   | 500                            | Peso fuera de rango        |

  # ============================================
  # EDITAR MASCOTA
  # ============================================

  Scenario: Editar peso de mascota
    Given que tengo una mascota "Luna" con peso 4kg
    When edito a Luna
    And cambio el peso a 5kg
    And guardo los cambios
    Then Luna deberia mostrar peso "5 kg"

  Scenario: Marcar mascota como castrada
    Given que tengo una mascota "Rocky" no castrado
    When edito a Rocky
    And marco "Esta castrado"
    And guardo los cambios
    Then Rocky deberia mostrar badge "Castrado"
    And el servicio "Castracion" no deberia aparecer para Rocky en el turnero

  Scenario: Actualizar foto de mascota
    Given que tengo una mascota "Luna" sin foto
    When edito a Luna
    And subo una nueva foto
    And guardo los cambios
    Then deberia ver la foto de Luna en su tarjeta

  # ============================================
  # ELIMINAR MASCOTA
  # ============================================

  Scenario: Eliminar mascota sin historial
    Given que tengo una mascota "Nuevo" sin visitas
    When hago click en "Eliminar" para Nuevo
    And confirmo la eliminacion
    Then Nuevo no deberia aparecer en mi lista
    # Nota: Es soft delete

  Scenario: Eliminar mascota con historial medico
    Given que tengo una mascota "Luna" con visitas anteriores
    When hago click en "Eliminar" para Luna
    Then deberia ver advertencia "Luna tiene historial medico"
    And deberia ver "El historial se conservara pero no podras verlo"
    When confirmo la eliminacion
    Then Luna no deberia aparecer en mi lista

  Scenario: No puedo eliminar mascota con turno pendiente
    Given que tengo una mascota "Rocky" con turno pendiente
    When intento eliminar a Rocky
    Then deberia ver error "Rocky tiene turnos pendientes"
    And deberia ver sugerencia "Cancela los turnos primero"

  # ============================================
  # VER HISTORIAL MEDICO
  # ============================================

  Scenario: Ver historial de visitas de mascota
    Given que tengo una mascota "Luna" con 3 visitas completadas
    When hago click en Luna
    And voy a la seccion "Historial"
    Then deberia ver 3 visitas listadas
    And deberian estar ordenadas por fecha descendente

  Scenario: Ver detalle de visita
    Given que tengo una mascota "Luna" con visitas
    When veo el historial de Luna
    And hago click en la primera visita
    Then deberia ver:
      | campo          |
      | Fecha          |
      | Veterinario    |
      | Diagnostico    |
      | Tratamiento    |
      | Medicamentos   |

  Scenario: Mascota sin historial
    Given que tengo una mascota "Nuevo" recien agregada
    When veo el perfil de Nuevo
    Then la seccion "Historial" deberia estar vacia
    And deberia ver mensaje "Aun no hay visitas registradas"
    And deberia ver boton "Reservar primer turno"

  # ============================================
  # CASOS ESPECIALES
  # ============================================

  Scenario: Mascota heredada de cuenta invitado
    Given que me registre con email "juan@test.com"
    And previamente reserve turno como invitado para "Firulais"
    When voy a "Mis mascotas"
    Then deberia ver "Firulais" en mi lista
    And deberia ver su historial de visitas previas

  Scenario: Razas filtradas por tipo
    When agrego una mascota tipo "Gato"
    Then las razas disponibles deberian ser razas de gato
    And no deberia ver razas de perro como "Labrador"
