# Fuente: album/book/ops-templates/backoffice/01-gestion-solicitudes.md
# Drive: 05. ATC - Operaciones/Procedimientos
# Tests Backend: pytest tests/contracts/solicitudes/test_service_requests.py
# Tests Frontend: npx playwright test admin-requests.spec.ts

Feature: Gestion de solicitudes de servicio

  Como administrador del backoffice
  Quiero gestionar todas las solicitudes del sistema
  Para asegurar que se atiendan correctamente

  Background:
    Given que estoy logueado como administrador
    And estoy en la seccion "Solicitudes" del backoffice

  # ============================================
  # VER Y FILTRAR SOLICITUDES
  # ============================================

  Scenario: Ver listado de todas las solicitudes
    When cargo la pagina de solicitudes
    Then deberia ver un listado paginado
    And cada solicitud deberia mostrar:
      | campo        |
      | ID           |
      | Dueno        |
      | Mascota      |
      | Servicios    |
      | Estado       |
      | Fecha        |

  Scenario Outline: Filtrar solicitudes por estado
    When filtro por estado "<estado>"
    Then solo deberia ver solicitudes con estado "<estado>"

    Examples:
      | estado      |
      | Pendiente   |
      | Coordinado  |
      | Pagado      |
      | Completado  |
      | Cancelado   |

  # ============================================
  # ASIGNAR VETERINARIO MANUALMENTE
  # ============================================

  Scenario: Asignar veterinario a solicitud pendiente
    Given que hay una solicitud pendiente en "Palermo"
    And no fue aceptada por ningun veterinario
    When abro el detalle de la solicitud
    And hago click en "Asignar veterinario"
    Then deberia ver lista de veterinarios con cobertura en Palermo

    When selecciono "Dra. Garcia"
    And selecciono fecha "15 de enero" hora "10:00"
    And confirmo la asignacion
    Then la solicitud deberia pasar a estado "Coordinado"
    And deberia estar asignada a Dra. Garcia
    And el dueno deberia recibir notificacion
    And el veterinario deberia recibir notificacion

  # ============================================
  # CAMBIAR ESTADO MANUALMENTE
  # ============================================

  Scenario: Cambiar estado de solicitud
    Given que hay una solicitud en estado "Coordinado"
    And el pago se proceso pero el webhook fallo
    When abro la solicitud
    And hago click en "Cambiar estado"
    And selecciono "Pagado"
    And ingreso motivo "Pago confirmado manualmente - ID MP: 12345"
    And confirmo el cambio
    Then la solicitud deberia pasar a "Pagado"
    And el cambio deberia registrarse en el historial

  Rule: Solo ciertos cambios de estado son validos

    Scenario: No puedo volver a estado anterior
      Given que hay una solicitud en estado "Completado"
      When intento cambiar el estado a "Pagado"
      Then deberia ver error "No se puede volver a un estado anterior"

    Scenario: Puedo cancelar desde cualquier estado
      Given que hay una solicitud en estado "Coordinado"
      When cambio el estado a "Cancelado"
      And ingreso motivo de cancelacion
      Then la solicitud deberia cancelarse

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

  Scenario: Reasignar veterinario
    Given que hay una solicitud asignada a "Dr. Lopez"
    And Dr. Lopez no puede asistir
    When abro la solicitud
    And hago click en "Reasignar"
    And selecciono otro veterinario
    And confirmo
    Then Dr. Lopez deberia ser notificado de la desasignacion
    And el nuevo vet deberia ser notificado
    And el dueno deberia ser notificado del cambio
