using Tnsu.ApprovalRoute.Domain.Enums;
namespace Tnsu.ApprovalRoute.Application.TemplateRoutes;
///
/// ДЕЙСТВУЮЩИЙ SLA шага в часах — наследование уже применено: значение шага, а
/// если на шаге не задано, то значение типа заявки. null означает, что SLA не
/// настроен нигде, то есть напоминаний по этому шагу не будет.
/// Резолв отдаёт именно итоговое значение, чтобы вызывающая сторона
/// (request-portal) просто записала его в строку списка согласования и не
/// повторяла у себя правило наследования.
///
///
/// Спрашивать ли причину просрочки — так же с уже применённым наследованием.
///
public sealed record ResolvedRouteStepDto(
int Id,
int OrderNo,
string? ExecutorEmail,
string? Position,
bool AllowReassignToOtherApprovers,
string? Warning = null,
int? SlaHours = null,
bool? AskOverdueReason = null);
///
/// Предупреждение уровня всего резолва (не привязано к конкретному шагу) — например,
/// в маршруте есть шаг с условием по полю IsManager, а в заявке не передано значение
/// поля Position, из которого IsManager вычисляется. Это не ошибка (резолв всё равно
/// отработал, IsManager просто посчитался как «false»), но может означать, что
/// вызывающая сторона забыла передать поле, и шаг из-за этого не появился, хотя должен был.
///
public sealed record ResolveTemplateRouteResultDto(
int RouteId,
bool RequiresControl,
IReadOnlyList Steps,
string? Warning = null);
/// Значение поля списка SharePoint (field_name шага) для проверки условий шагов при resolve.
public sealed record ResolveFieldValueDto(string FieldName, string Value);
///
/// Отдел для шагов с HeadType.DepartmentHead ("руководитель указанного отдела") —
/// не выводится из инициатора, поэтому должен быть передан явно. Необязателен:
/// если в маршруте нет такого шага, поле не нужно; если есть, а поле не
/// передано — шаг не резолвится и получает предупреждение (см.
/// TemplateRouteService.ResolveStepAsync), весь запрос при этом не падает.
///
public sealed record ResolveTemplateRouteRequest(
int RequestTypeId,
string? UserEmail,
Guid? ProjectId,
RouteStepStatus Status,
IReadOnlyList? FieldValues = null,
Guid? DepartmentId = null);