---
# schema ::=
#
#   POLICY_NAME:
#     STATE:
#       INPUT_EVENT:
#         state: OUTPUT_STATE
#         action:
#           cmd: COMMAND
#           log_on_comment: bool
#           on_success: OUTPUT_EVENT
#           on_failure: OUTPUT_EVENT
#           on_error: OUTPUT_EVENT
#
# COMMAND ::=
#
#     ["notify", "METHOD", "RECEIVER", "TEMPLATE"]
#   | ["timeout", "SECONDS"]
#   | ["assign"]
#   | ["escalate"]
#   | ["comment"]
#   | ["eval", "SCRIPT", "ARG0", "ARG1", ...]
#
# first state must be "Inited"

default:
  Inited:
    CreatedEvent:
      state: Created
      action:
        cmd: ["assign"]
        on_success: AssignEvent
        on_error: ErrorOnAssigningEvent
  Created:
    AssignEvent:
      state: Assigned
      action:
        cmd: ["notify", "card", "cc", "alert"]
        on_success: NotifyEvent
    ErrorOnAssigningEvent:
      state: AssignmentError
      action:
        cmd: ["notify", "card", "cc", "alert"]
        on_success: NotifyErrorHandlerEvent
  Assigned:
    NotifyEvent:
      state: NotifiedCC
      action:
        cmd: ["notify", "phone", "assignee", "alert", "LogOnComment"]
        log_on_comment: true
        on_success: NotifyEvent
  NotifiedCC:
    NotifyEvent:
      state: Notified1Times
      action:
        cmd: ["timeout", "20"]
        on_success: TimeoutEvent
    AcknowledgeEvent:
      state: Acknowledged
  Notified1Times:
    TimeoutEvent:
      state: Notified1TimesTimeout
      action:
        cmd: ["notify", "phone", "assignee", "alert", "LogOnComment"]
        log_on_comment: true
        on_success: NotifyEvent
    AcknowledgeEvent:
      state: Acknowledged
  Notified1TimesTimeout:
    NotifyEvent:
      state: Notified2Times
      action:
        cmd: ["timeout", "20"]
        on_success: TimeoutEvent
    AcknowledgeEvent:
      state: Acknowledged
  Notified2Times:
    TimeoutEvent:
      state: Notified2TimesTimeout
      action:
        cmd: ["notify", "phone", "assignee", "alert", "LogOnComment"]
        log_on_comment: true
        on_success: NotifyEvent
    AcknowledgeEvent:
      state: Acknowledged
  Notified2TimesTimeout:
    NotifyEvent:
      state: Notified3Times
      action:
        cmd: ["timeout", "20"]
        on_success: TimeoutEvent
    AcknowledgeEvent:
      state: Acknowledged
  Notified3Times:
    TimeoutEvent:
      state: Notified3TimesTimeout
      action:
        cmd: ["escalate"]
        on_success: EscalateEvent
        on_error: EscalateErrorEvent
    AcknowledgeEvent:
      state: Acknowledged
  Notified3TimesTimeout:
    EscalateEvent:
      state: Escalated
      action:
        cmd: ["notify", "phone", "assignee", "alert", "LogOnComment"]
        log_on_comment: true
        on_success: NotifyEscalationEvent
    EscalateErrorEvent:
      state: EscalateError
      action:
        cmd: ["notify", "phone", "firemaster", "alert", "LogOnComment"]
        log_on_comment: true
        on_success: NotifyFiremasterEvent
    AcknowledgeEvent:
      state: Acknowledged
  Escalated:
    NotifyEscalationEvent:
      state: NotifiedEscalation
      action:
        cmd: ["timeout", "20"]
        on_success: TimeoutEvent
    AcknowledgeEvent:
      state: Acknowledged
  EscalateError:
    NotifyFiremasterEvent:
      state: NotifiedFiremaster
      action:
        cmd: ["timeout", "20"]
        on_success: TimeoutEvent
    AcknowledgeEvent:
      state: Acknowledged
  NotifiedEscalation:
    TimeoutEvent:
      state: NotifiedEscalationTimeout
      action:
        cmd: ["escalate"]
        on_success: EscalateEvent
        on_error: EscalateErrorEvent
    AcknowledgeEvent:
      state: Acknowledged
  NotifiedEscalationTimeout:
    EscalateEvent:
      state: Escalated
      action:
        cmd: ["notify", "phone", "assignee", "alert", "LogOnComment"]
        log_on_comment: true
        on_success: NotifyEscalationEvent
    EscalateErrorEvent:
      state: EscalateError
      action:
        cmd: ["notify", "phone", "firemaster", "alert", "LogOnComment"]
        log_on_comment: true
        on_success: NotifyFiremasterEvent
    AcknowledgeEvent:
      state: Acknowledged
  NotifiedFiremaster:
    TimeoutEvent:
      state: NoResponse
    AcknowledgeEvent:
      state: Acknowledged
  NoResponse:
    AcknowledgeEvent:
      state: Acknowledged
  Acknowledged:
  AssignmentError:
    NotifyErrorHandlerEvent:
      state: BadEnd
  BadEnd:
