namespace Deal.Modules.Tenants.Application.Models;
///
/// Результат impersonation.
///
/// true — сессия impersonation создана.
/// Код ошибки при Ok=false (см. константы); null при успехе.
/// Raw-токен tenant-сессии (значение куки deal_session); null при Ok=false.
/// Момент истечения сессии (30 дней от создания, как у обычного входа).
/// Логин пользователя, под которым выполнен вход; null при Ok=false.
/// Идентификатор пользователя (для аудита); null при Ok=false.
/// Тенант пользователя; null при Ok=false.
public sealed record ImpersonationResultDto(
bool Ok,
string? Error,
string? SessionToken,
DateTimeOffset? ExpiresAt,
string? Login,
Guid? UserId,
Guid? TenantId)
{
///
/// Код ошибки: тенант не найден
///
public const string ErrorTenantNotFound = "tenant_not_found";
///
/// Код ошибки: в тенанте нет пользователей, а login не указан
///
public const string ErrorTenantHasNoUsers = "tenant_has_no_users";
///
/// Код ошибки: пользователь с таким login не найден в тенанте
///
public const string ErrorUserNotFound = "user_not_found";
///
/// Неуспешный результат без полезной нагрузки.
///
/// Код ошибки (см. константы).
/// ImpersonationResultDto с Ok=false.
public static ImpersonationResultDto Failed(string error) =>
new(Ok: false, Error: error, SessionToken: null, ExpiresAt: null, Login: null, UserId: null, TenantId: null);
}