namespace TakeoutSaaS.Shared.Abstractions.Tenancy;

/// <summary>
/// 租户上下文：封装当前请求解析得到的租户标识、编号及解析来源。
/// </summary>
/// <remarks>
/// 初始化租户上下文。
/// </remarks>
/// <param name="tenantId">租户 ID</param>
/// <param name="tenantCode">租户编码（可选）</param>
/// <param name="source">解析来源</param>
public sealed class TenantContext(long tenantId, string? tenantCode, string source)
{
    /// <summary>
    /// 未解析到租户时的默认上下文。
    /// </summary>
    public static TenantContext Empty { get; } = new(0, null, "unresolved");

    /// <summary>
    /// 当前租户 ID，未解析时为 Guid.Empty。
    /// </summary>
    public long TenantId { get; } = tenantId;

    /// <summary>
    /// 当前租户编码（例如子域名或业务编码），可为空。
    /// </summary>
    public string? TenantCode { get; } = tenantCode;

    /// <summary>
    /// 租户解析来源（Header、Host、Token 等）。
    /// </summary>
    public string Source { get; } = source;

    /// <summary>
    /// 是否已成功解析到租户。
    /// </summary>
    public bool IsResolved => TenantId != 0;
}
