using Ban.Sdaid.Notation.Documents;
using Ban.Sdaid.Icd.Domain.Export;
namespace Ban.Sdaid.Icd.Ui.Pages
{
/// <summary>Журнал выгрузок: сформированные файлы для АБИС, их состав и содержимое.</summary>
public class ExportLogPage : IPageDocument, IFolder<UiFolder>, IHasStructuralLinks
{
public SdaidLink[] Links => new[]
{
Rel.Uses<CardExportSpec>(),
Rel.Realizes<Ban.Sdaid.Icd.Requirements.FR_007_AbisExport>(),
};
public string Name => "Журнал выгрузок";
/// <summary>Display-текст для типизированных ссылок <c>SdaidAnchors.RefTo<ExportLogPage>()</c>.</summary>
public static string _refName = "экран «Журнал выгрузок»";
public string Description =>
@"Сформированные файлы для загрузки в АБИС: когда появились, из каких карт собраны, где лежат и что в них написано.";
public string Version => "0.1";
public string Status => "draft";
public string[] Comments => new[]
{
"2026-08-28. Заведён по CR «Выгрузка в АБИС без отбора выборки».",
};
public static string S1_Purpose = $"""
## Зачем экран
Файл для АБИС формируется при создании карты, без участия человека
({SdaidAnchors.RefTo<Ban.Sdaid.Icd.Arch.Adr.ADR_013_ExportFileOnCardCreation>()}).
Пока выгрузку запускал пользователь, он и видел, что выгрузил; теперь это знание
нужно вернуть — иначе файлы появляются и исчезают незаметно, а тихий отказ обнаружится
через недели.
Экран административный. Хранителю сюда ходить незачем: его работа заканчивается
созданием карты.
""";
public static string S2_Layout = $"""
## Раскладка
Мастер-деталь: слева список выгрузок, справа выбранная. Список — потому что вопрос
обычно звучит «что было за такой-то день», а не «покажи вот эту».
Строка списка: имя файла, момент, происхождение, число карт, формат. Имени файла
отведено первое место — по нему выгрузку опознают снаружи Сервиса.
Справа три блока. **Реквизиты файла** — имя, момент, происхождение, формат,
пользователь, место в хранилище. **Состав** — карты, вошедшие в файл. **Содержимое
файла** — текст как есть.
Содержимому файла место именно здесь: на экране проверки его читать некому, а тут
сидит тот, кто в состоянии что-то с ним сделать.
Фильтры: период, происхождение, формат, поиск по имени файла, шифру и инвентарному
номеру — то есть по тому, что известно, когда ищут «куда делась эта карта».
""";
public static string S3_NoStates = """
## Чего на экране нет
**Состояния «принято в АБИС».** Сервис файл кладёт, а не отправляет, и судьбы его
не наблюдает. Показывать приёмку значило бы утверждать то, чего Сервис не знает.
**Повторного формирования.** Файл создаётся заново из реестра карт, где видно, какой
карте его не хватает. Здесь — только то, что уже сформировано.
**Ошибок формирования.** Незавершённой выгрузки не существует: запись появляется после
того, как файл записан. Не записался — записи нет, и карта осталась без файла.
""";
public static string S4_Alert = $"""
## Предупреждение о картах без файла
Обычный ход работы карт без файла не оставляет, поэтому такие карты — единственное,
о чём экран предупреждает сам: сообщение вверху со ссылкой
в {SdaidAnchors.RefTo<InformationCardsPage>()}, где их и чинят.
Так два экрана делят обязанности: журнал отвечает, что сформировано, реестр — для чего
не сформировано.
""";
public static string S9_Prototype = $"""
## Прототип
{SdaidHtml.LinkTo<ExportLogPage>("exports.html", "Открыть прототип в новой вкладке")}
{SdaidHtml.IframeOf<ExportLogPage>("exports.html", 720)}
""";
}
}