namespace Tnsu.ApprovalRoute.Application.Reminders;
/// Согласующий/исполнитель из строки списка — кому напоминать.
///
/// На сколько часов просрочен шаг: сейчас минус (активация шага + SLA).
/// Выходные не учитываются — считаются календарные часы.
///
/// Ссылка на заявку, требующую решения.
///
/// Спрашивать ли у пользователя причину просрочки. Значение уже с применённым
/// наследованием (шаг перекрывает тип заявки).
///
/// Статус просроченного шага (ApprovalStatus строки списка «… — согласование»).
///
/// Уникальный код заявки (колонка RequestUniqueCode списка данных) — null, если у
/// заявки его нет или строка данных не найдена.
///
///
/// Вид напоминания. Необязательный — параметр добавлен позже остальных, поэтому по
/// умолчанию («не указана»): старые вызовы
/// конструктора и потребители, ничего не знающие о категориях, продолжают работать
/// как раньше.
///
///
/// Только для — email руководителя
/// принимаемого сотрудника (см. ReminderService.GetProbationEndingAsync). Для
/// остальных категорий — null.
///
/// Только для ProbationEnding — email принимаемого сотрудника.
/// Только для ProbationEnding — ФИО принимаемого сотрудника (колонка CandidateName).
/// Только для ProbationEnding — текст испытательного срока (колонка ProbationPeriod).
/// Только для ProbationEnding — дата приёма (колонка HireDate).
/// Только для ProbationEnding — дата окончания испытательного срока (HireDate + срок).
/// Только для ProbationEnding — сколько дней осталось до конца испытательного срока.
public sealed record ReminderDto(
string Email,
int HoursOverdue,
string Url,
bool AskOverdueReason,
int RequestTypeId,
string RequestTypeName,
int RequestId,
string Status,
string? RequestUniqueCode,
ReminderCategory Category = ReminderCategory.None,
string? ManagerEmail = null,
string? CandidateEmail = null,
string? CandidateName = null,
string? ProbationPeriod = null,
DateTimeOffset? HireDate = null,
DateTimeOffset? ProbationEndsAt = null,
int? DaysUntilProbationEnds = null);