# 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

Feature: Pago de turno

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

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

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

  Scenario: Pagar turno con tarjeta de credito
    Given que estoy en el detalle de mi turno coordinado
    When hago click en "Pagar"
    Then deberia ser redirigido a Mercado Pago
    And deberia ver el monto correcto

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

  Scenario: Recibir confirmacion de pago
    Given que complete el pago exitosamente
    Then deberia recibir email de confirmacion
    And el email deberia contener:
      | campo                |
      | Fecha del turno      |
      | Direccion            |
      | Veterinario asignado |
      | Monto pagado         |
      | Numero de operacion  |

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

  Scenario Outline: Pagar con diferentes metodos
    Given que estoy en Mercado Pago
    When selecciono metodo "<metodo>"
    And completo el pago
    Then el pago deberia ser <resultado>
    And el estado de acreditacion deberia ser "<acreditacion>"

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

  Scenario: Pago rechazado por fondos insuficientes
    Given que estoy en Mercado Pago
    When intento pagar con tarjeta sin fondos
    Then deberia ver error "Fondos insuficientes"
    And deberia poder reintentar con otra tarjeta
    And el turno deberia seguir en estado "Coordinado"

  Scenario: Usuario cancela el pago
    Given que estoy en Mercado Pago
    When hago click en "Volver al sitio"
    Then deberia volver a la plataforma
    And deberia ver mensaje "El pago fue cancelado"
    And deberia ver boton "Reintentar pago"
    And el turno deberia seguir en estado "Coordinado"

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

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

  Scenario: Link de pago expirado
    Given que recibi el link de pago hace mas de 24 horas
    When hago click en el link
    Then deberia ver "Este link ha expirado"
    And deberia ver "Contacta a soporte para generar uno nuevo"

  Scenario: Intento pagar turno ya pagado
    Given que mi turno ya esta en estado "Pagado"
    When accedo al link de pago
    Then deberia ver "Este turno ya fue pagado"
    And deberia ver boton "Ver detalle del turno"

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

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

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

    Scenario: Webhook confirma pago aprobado
      Given que el usuario completo el pago en Mercado Pago
      When Mercado Pago envia webhook con status "approved"
      Then el turno deberia cambiar a estado "Pagado"
      And el veterinario deberia recibir notificacion
      And el usuario deberia recibir email de confirmacion

    Scenario: Webhook informa pago pendiente
      Given que el usuario pago con transferencia bancaria
      When Mercado Pago envia webhook con status "pending"
      Then el turno deberia quedarse en "Coordinado"
      And deberia registrarse el pago pendiente
      And el usuario deberia recibir email "Esperando acreditacion"

    Scenario: Webhook falla pero pago se proceso
      # Caso de error que requiere intervencion manual
      Given que el usuario pago exitosamente
      But el webhook fallo por error de red
      Then el turno seguira en "Coordinado"
      And el equipo de ops deberia recibir alerta
      And deberian poder actualizar manualmente
