@startuml Процесс создания и жизненный цикл заказа

state "Заказ не создан" as start

state "НОВЫЙ" as new_order

state "ЗАБРОНИРОВАН" as booked {
  state "Таймер брони (3 дня)" as reserve_timer
}

state "Оформление..." as processing_payment
state "В РАБОТЕ" as in_progress
state "ОТМЕНЕН" as cancelled

state "Товар в закупке" as purchasing

start --> new_order : Создать заказ

new_order --> cancelled : Кнопка "Отменить заказ"\n(Ручная отмена)

new_order --> booked : Кнопка "Забронировать"\n(Синхронный запрос во Втис)

booked --> booked : **Успех:** Товары зарезервированы

booked --> new_order : Кнопка "Отменить бронирование"\n(Таймер брони продолжает идти)"

reserve_timer --> cancelled : Истек 3 дня\n(Автоотмена брони)

booked --> cancelled : Кнопка "Отменить заказ"\n(Ручная отмена)

new_order --> processing_payment : Кнопка "Оформить"
booked --> processing_payment : Кнопка "Оформить"

processing_payment --> in_progress : **Успех:** Товары доступны\nЗаказ передан в системы товародвижения

processing_payment --> purchasing : **Неудача:** Товара нет в наличии\n(Запуск процесса закупки)
purchasing --> in_progress : Товар закуплен

state in_progress {
  state "Заказ выполняется" as active
  state "Резерв продлен" as extended
  active --> extended : Кнопка "Продлить резерв"\n(Правила: 1 раз если не оплачен,\n∞ раз (Ст. менеджер) если оплачен)
  extended --> active
}

in_progress --> cancelled : Кнопка "Отменить заказ"

@enduml