using Ban.Sdaid.Notation.Documents;
namespace Ban.Sdaid.Icd.Epics.PacketProcessing.UseCases.StateMachines
{
/// <summary>Жизненный цикл пакета ввода: от постановки в очередь до создания ИК.</summary>
public class InputPacketStateMachine : IStateMachineDocument
{
public static string _refName = "состояния пакета ввода";
public string Name => "Жизненный цикл пакета ввода";
public string Description =>
@"Четыре состояния пакета и переходы между ними. Состояние хранится и меняется явными действиями пользователя и обработки.";
public string Version => "0.2";
public string Status => "draft";
public string[] Comments => new string[0];
public static string S1_Diagram = """
## Диаграмма состояний
```mermaid
stateDiagram-v2
[*] --> Queued: завершён ввод карты
Queued --> Queued: обработка выполнена, вид опознан
Queued --> Failed: вид ИК не опознан
Queued --> Checking: пользователь взял в работу
Checking --> Queued: вернул в очередь
Checking --> Queued: правка кадров, «поставить в очередь»
Checking --> Queued: отклонил вид с подсказкой
Checking --> Failed: отклонил вид, верный неизвестен
Checking --> Completed: создана информационная карта
Failed --> Queued: указан верный вид ИК
Completed --> [*]
```
""";
public static string S2_States = """
## Состояния
| Состояние | Смысл | Чей ход |
|---|---|---|
| В очереди | ждёт обработки или повторной обработки | Сервис |
| Проверка | обработан и взят пользователем в работу | пользователь |
| Завершён | по пакету создана информационная карта | — |
| Ошибка | вид ИК не опознан и не указан пользователем | пользователь |
Обработка не выводит пакет из очереди: она заполняет опознанную форму, уверенность
и распознанные значения, а пакет остаётся доступным для взятия в работу. Отдельного
состояния «обрабатывается» нет — оно ничего не меняло бы в работе пользователя.
""";
public static string S3_Transitions = $"""
## Переходы
**Ввод завершён** — пакет попадает в очередь автоматически, отдельного действия
постановки не требуется.
**Взятие в работу** переводит в проверку и закрепляет пакет за пользователем. Возврат
в очередь освобождает его.
**Правка кадров** — удаление, пересъёмка, переназначение страницы — делает результаты
распознавания недействительными. Пакет возвращается в очередь по команде пользователя;
Сервис этого сам не делает, иначе каждое движение кадра запускало бы обработку заново.
**Отклонение вида ИК** возвращает пакет в очередь с контекстом: какой вид отвергнут
и какой считать верным. Если верный вид пользователю неизвестен и опознать нечего,
пакет переходит в ошибку.
**Создание карты** завершает пакет. Дальше он не правится: править нечего, карта уже
создана и живёт своей жизнью.
Основание — {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_008_PacketStatesAndTwoTabs)}.
""";
public static string S99_Related = $"""
## Связанные артефакты
- {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_008_PacketStatesAndTwoTabs)} — решение о четырёх состояниях и двух вкладках проверки
- {nameof(Ban.Sdaid.Icd.Arch.Adr.ADR_007_InputWithoutPlan)} — решение о вводе без плана
""";
}
}