name: vas_estrategico
version: 3
start: preparar

nodes:
  - id: preparar
    action: preparar_vas_estrategico
    input:
      items: $.input.items
      linhas: $.input.linhas
    pause:
      enabled: true
      when:
        eq: [$.output.await_user_input, true]
      return_from: $.output.mensagem
      expected_input:
        key: resposta_usuario
        allowed_values: ["SIM", "NAO", "OUTRO"]
        normalize: upper_strip
      resume_from: decisao

  - id: resposta_bundle
    action: montar_resposta_texto
    input:
      dados:
        texto_usuario: $.vars.preparar.mensagem_bundle_fechamento

  - id: decisao
    action: no_op
    input: {}

  - id: resposta_sim
    action: montar_resposta_texto
    input:
      dados:
        texto_usuario: $.vars.preparar.mensagem_pos_aceite

  - id: explicar_cancelamento
    action: montar_explicacao_cancelamento_vas_estrategico
    input:
      linhas: $.vars.preparar.linhas
      orientacoes_cancelamento: $.input.orientacoes_cancelamento

  - id: registrar_sim
    action: registrar_atendimento_vas_estrategico
    input:
      linhas: $.vars.preparar.linhas
      mensagem_base: $.vars.resposta_sim.mensagem
      request_status: "Fechado"
      status: "CLOSED"

  - id: registrar_nao
    action: registrar_atendimento_vas_estrategico
    input:
      linhas: $.vars.preparar.linhas
      mensagem_base: $.vars.explicar_cancelamento.mensagem
      request_status: "Fechado"
      status: "CLOSED"

  - id: registrar_bundle
    action: registrar_atendimento_vas_estrategico
    input:
      linhas: $.vars.preparar.linhas
      mensagem_base: $.vars.resposta_bundle.mensagem
      request_status: "Fechado"
      status: "CLOSED"

  - id: registrar_outro
    action: registrar_atendimento_vas_estrategico
    input:
      linhas: $.vars.preparar.linhas
      mensagem_base: "Atendimento encerrado sem confirmação de manutenção do serviço."
      request_status: "Fechado"
      status: "CLOSED"

edges:
  - from: preparar
    to: decisao
    priority: 10
    when:
      eq: [$.vars.preparar.await_user_input, true]

  - from: preparar
    to: resposta_bundle
    priority: 20

  # Decisão pós-pausa. A pergunta "aceitou a explicação?" decide ANTES da
  # distinção bundle (igual ao diagrama). OUTRO nunca chega aqui: o runtime
  # intercepta resposta ambígua antes de retomar (fluxo_repergunta_outro
  # re-explica e repergunta), então resposta_usuario é sempre SIM ou NAO.

  # Aceitou (SIM) — bundle OU estratégico: sem reforço, só registra/finaliza.
  - from: decisao
    to: resposta_sim
    priority: 10
    when:
      eq: [$.input.resposta_usuario, SIM]

  # Não aceitou (NAO) + há estratégico: explica o procedimento de cancelamento
  # do(s) estratégico(s) (pedidos mistos seguem por aqui, como antes).
  - from: decisao
    to: explicar_cancelamento
    priority: 20
    when:
      all:
        - eq: [$.vars.preparar.has_estrategico_items, true]
        - eq: [$.input.resposta_usuario, NAO]

  # Não aceitou (NAO) + bundle puro (sem estratégico): reforça a impossibilidade
  # de cancelar. SIM já foi tratado acima (priority menor), então aqui só cai NAO.
  - from: decisao
    to: resposta_bundle
    priority: 30
    when:
      eq: [$.vars.preparar.has_estrategico_items, false]

  - from: decisao
    to: registrar_outro
    priority: 99

  - from: resposta_sim
    to: registrar_sim

  - from: explicar_cancelamento
    to: registrar_nao

  - from: registrar_sim
    to: END

  - from: registrar_nao
    to: END

  - from: resposta_bundle
    to: registrar_bundle

  - from: registrar_bundle
    to: END

  - from: registrar_outro
    to: END
