# language: es
# Fuente: album/book/ops-templates/pet-owner/04-pago-turno.md
# Drive: 07. Finanzas y contabilidad/Mercado Pago
# Tests Backend: pytest tests/contracts/payments/test_mercadopago.py
# Tests Frontend: npx playwright test payment.spec.ts

Característica: Pago de turno

  Como dueno de mascota con turno coordinado
  Quiero pagar mi turno online
  Para confirmar la visita del veterinario

  Antecedentes:
    Dado que tengo un turno en estado "Coordinado"
    Y el turno tiene asignado veterinario "Dra. Garcia"
    Y la fecha asignada es "15 de enero a las 10:00"

  # ============================================
  # FLUJO DE PAGO EXITOSO
  # ============================================

  Escenario: Pagar turno con tarjeta de credito
    Dado que estoy en el detalle de mi turno coordinado
    Cuando hago click en "Pagar"
    Entonces deberia ser redirigido a Mercado Pago
    Y deberia ver el monto correcto

    Cuando selecciono "Tarjeta de credito"
    Y completo los datos de la tarjeta
    Y confirmo el pago
    Entonces deberia volver a la plataforma
    Y deberia ver "Pago exitoso"
    Y el turno deberia estar en estado "Pagado"

  Escenario: Recibir confirmacion de pago
    Dado que complete el pago exitosamente
    Entonces deberia recibir email de confirmacion
    Y el email deberia contener:
      | campo                |
      | Fecha del turno      |
      | Direccion            |
      | Veterinario asignado |
      | Monto pagado         |
      | Numero de operacion  |

  # ============================================
  # METODOS DE PAGO
  # ============================================

  Esquema del escenario: Pagar con diferentes metodos
    Dado que estoy en Mercado Pago
    Cuando selecciono metodo "<metodo>"
    Y completo el pago
    Entonces el pago deberia ser <resultado>
    Y el estado de acreditacion deberia ser "<acreditacion>"

    Ejemplos:
      | metodo              | resultado | acreditacion   |
      | Tarjeta credito     | exitoso   | inmediata      |
      | Tarjeta debito      | exitoso   | inmediata      |
      | Dinero en cuenta    | exitoso   | inmediata      |
      | Transferencia       | pendiente | 1-2 dias       |
      | Rapipago            | pendiente | hasta 24hs     |

  # ============================================
  # MANEJO DE ERRORES
  # ============================================

  Escenario: Pago rechazado por fondos insuficientes
    Dado que estoy en Mercado Pago
    Cuando intento pagar con tarjeta sin fondos
    Entonces deberia ver error "Fondos insuficientes"
    Y deberia poder reintentar con otra tarjeta
    Y el turno deberia seguir en estado "Coordinado"

  Escenario: Usuario cancela el pago
    Dado que estoy en Mercado Pago
    Cuando hago click en "Volver al sitio"
    Entonces deberia volver a la plataforma
    Y deberia ver mensaje "El pago fue cancelado"
    Y deberia ver boton "Reintentar pago"
    Y el turno deberia seguir en estado "Coordinado"

  Escenario: Cierre de browser durante pago
    Dado que estoy en Mercado Pago
    Y cierro el navegador accidentalmente
    Cuando vuelvo a la plataforma
    Y voy a "Mis turnos"
    Entonces deberia poder ver el estado real del pago
    # Si se proceso: Pagado. Si no: Coordinado con opcion de pagar

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

  Escenario: Link de pago expirado
    Dado que recibi el link de pago hace mas de 24 horas
    Cuando hago click en el link
    Entonces deberia ver "Este link ha expirado"
    Y deberia ver "Contacta a soporte para generar uno nuevo"

  Escenario: Intento pagar turno ya pagado
    Dado que mi turno ya esta en estado "Pagado"
    Cuando accedo al link de pago
    Entonces deberia ver "Este turno ya fue pagado"
    Y deberia ver boton "Ver detalle del turno"

  Escenario: Precio cambio desde la coordinacion
    # Caso muy raro pero posible
    Dado que el precio del servicio aumento desde que se coordino
    Cuando voy a pagar
    Entonces deberia ver el precio original acordado
    # El precio se congela al momento de coordinacion

  # ============================================
  # INTEGRACION CON WEBHOOK
  # ============================================

  Regla: El estado del turno se actualiza via webhook de Mercado Pago

    Escenario: Webhook confirma pago aprobado
      Dado que el usuario completo el pago en Mercado Pago
      Cuando Mercado Pago envia webhook con status "approved"
      Entonces el turno deberia cambiar a estado "Pagado"
      Y el veterinario deberia recibir notificacion
      Y el usuario deberia recibir email de confirmacion

    Escenario: Webhook informa pago pendiente
      Dado que el usuario pago con transferencia bancaria
      Cuando Mercado Pago envia webhook con status "pending"
      Entonces el turno deberia quedarse en "Coordinado"
      Y deberia registrarse el pago pendiente
      Y el usuario deberia recibir email "Esperando acreditacion"

    Escenario: Webhook falla pero pago se proceso
      # Caso de error que requiere intervencion manual
      Dado que el usuario pago exitosamente
      Pero el webhook fallo por error de red
      Entonces el turno seguira en "Coordinado"
      Y el equipo de ops deberia recibir alerta
      Y deberian poder actualizar manualmente
