namespace OmsorgCore.Application.Abstractions;

/// <summary>
/// Liest die Identität des aktuell angemeldeten Benutzers aus dem Request-Kontext.
/// Implementierung lebt in der Api-Schicht (dort ist HttpContext bekannt), Application/Engine
/// kennen nur dieses Interface.
/// </summary>
public interface ICurrentUserService
{
    Guid? UserId { get; }
    bool IsAuthenticated { get; }
    string? Username { get; }
    string? RoleName { get; }
    string? IpAddress { get; }

    /// <summary>
    /// Verknüpfte Mitarbeiter-Id (<see cref="Domain.Entities.User.EmployeeId"/>) dieses Users, falls
    /// vorhanden - aus dem JWT-Claim "employeeId", nicht per DB-Read. Wird nach Verknüpfen/Lösen
    /// erst mit dem nächsten Token-Refresh aktuell (Staleness-Fenster = Access-Token-Laufzeit).
    /// Anker für Own-Scope-Datenfilterung, siehe <see cref="IPermissionService.GetScopeAsync"/>.
    /// </summary>
    Guid? EmployeeId { get; }
}
