# Fuente: album/book/ops-templates/pet-owner/01-registro.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/common/test_users.py
# Tests Frontend: npx playwright test auth.spec.ts

Feature: Registro de usuario

  Como visitante de la plataforma
  Quiero poder crear una cuenta
  Para gestionar mis mascotas y reservar turnos

  # ============================================
  # CAMINO FELIZ
  # ============================================

  Scenario: Registro exitoso con datos validos
    Given que estoy en la pagina de registro
    When ingreso email "nuevo@ejemplo.com"
    And ingreso contraseña "Password123"
    And confirmo contraseña "Password123"
    And acepto los terminos y condiciones
    And hago click en "Crear cuenta"
    Then deberia ver mensaje "Te enviamos un email de verificacion"
    And deberia recibir email de verificacion

  Scenario: Verificar email y activar cuenta
    Given que me registre con email "nuevo@ejemplo.com"
    And recibi el email de verificacion
    When hago click en el link de verificacion
    Then mi cuenta deberia estar activa
    And deberia ser redirigido al dashboard

  # ============================================
  # VALIDACIONES
  # ============================================

  Scenario Outline: Registro con datos invalidos
    Given que estoy en la pagina de registro
    When ingreso email "<email>"
    And ingreso contraseña "<password>"
    And confirmo contraseña "<confirmacion>"
    And hago click en "Crear cuenta"
    Then deberia ver error "<mensaje_error>"

    Examples:
      | email              | password     | confirmacion | mensaje_error                        |
      | invalido           | Password123  | Password123  | Email invalido                       |
      | test@test.com      | 123          | 123          | Contraseña muy corta                 |
      | test@test.com      | password     | password     | Debe contener al menos un numero     |
      | test@test.com      | Password123  | Diferente123 | Las contraseñas no coinciden         |

  Scenario: Registro con email ya existente
    Given que existe un usuario con email "existente@ejemplo.com"
    And estoy en la pagina de registro
    When ingreso email "existente@ejemplo.com"
    And completo el resto del formulario correctamente
    And hago click en "Crear cuenta"
    Then deberia ver error "Este email ya esta registrado"
    And deberia ver link "Recuperar contraseña"

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

  Scenario: Registro linkea con cuenta invitado existente
    # Usuario que reservo turno como invitado y ahora quiere registrarse
    Given que existe un usuario invitado con email "invitado@ejemplo.com"
    And ese usuario tiene una mascota "Luna" registrada
    And estoy en la pagina de registro
    When me registro con email "invitado@ejemplo.com"
    And verifico mi cuenta
    Then deberia ver mi mascota "Luna" en el dashboard
    And deberia ver mis turnos anteriores

  Scenario: Registro desde flujo de turnero
    # Usuario empezo a reservar turno y decide crear cuenta
    Given que estoy en el paso final del turnero
    And ingrese mis datos de contacto
    When hago click en "Crear cuenta para guardar mis datos"
    Then deberia ver formulario simplificado
    And mi email ya deberia estar pre-llenado
    And solo deberia ingresar contraseña

  Scenario: Reenviar email de verificacion
    Given que me registre pero no verifique mi cuenta
    And estoy en la pagina de login
    When intento iniciar sesion
    Then deberia ver "Tu cuenta no esta verificada"
    And deberia ver boton "Reenviar email"
    When hago click en "Reenviar email"
    Then deberia recibir nuevo email de verificacion
