"""
Workflow Signals.

Django signals for workflow events.
"""
from django.dispatch import Signal


# =============================================================================
# Process Instance Signals
# =============================================================================

# Sent when a process instance starts
# sender: ProcessInstance
# Provides: instance, user, variables
process_started = Signal()

# Sent when a process instance completes successfully
# sender: ProcessInstance
# Provides: instance
process_completed = Signal()

# Sent when a process instance is cancelled
# sender: ProcessInstance
# Provides: instance, user, reason
process_cancelled = Signal()

# Sent when a process instance fails
# sender: ProcessInstance
# Provides: instance, error
process_failed = Signal()

# Sent when a process instance is suspended
# sender: ProcessInstance
# Provides: instance, user
process_suspended = Signal()

# Sent when a process instance is resumed
# sender: ProcessInstance
# Provides: instance, user
process_resumed = Signal()


# =============================================================================
# Task Signals
# =============================================================================

# Sent when a task is created
# sender: Task
# Provides: task, instance
task_created = Signal()

# Sent when a task is assigned to users/groups
# sender: Task
# Provides: task, users, groups
task_assigned = Signal()

# Sent when a user claims a task
# sender: Task
# Provides: task, user
task_claimed = Signal()

# Sent when a user unclaims a task
# sender: Task
# Provides: task, user
task_unclaimed = Signal()

# Sent when a task is completed
# sender: Task
# Provides: task, user, variables
task_completed = Signal()

# Sent when a task is delegated
# sender: Task
# Provides: task, from_user, to_user
task_delegated = Signal()

# Sent when a task fails
# sender: Task
# Provides: task, error
task_failed = Signal()


# =============================================================================
# SLA Signals
# =============================================================================

# Sent when an SLA is violated
# sender: SLAViolation
# Provides: violation, task, sla_definition
sla_violated = Signal()


# =============================================================================
# Variable Signals
# =============================================================================

# Sent when a process variable is changed
# sender: ProcessVariable
# Provides: variable, old_value, new_value
variable_changed = Signal()
