// EN: Tenant provider interface for multi-tenant row-level security.
// VI: Interface tenant provider cho bảo mật row-level đa tenant.

namespace OrderService.API.Infrastructure.Tenant;

/// <summary>
/// EN: Provides current tenant context from JWT claims for row-level security.
/// VI: Cung cấp tenant context từ JWT claims cho bảo mật row-level.
/// </summary>
public interface ITenantProvider
{
    /// <summary>
    /// EN: Get current authenticated user ID from JWT "sub" claim.
    /// VI: Lấy user ID hiện tại từ JWT "sub" claim.
    /// </summary>
    Guid? GetCurrentUserId();

    /// <summary>
    /// EN: Get current merchant ID from JWT "merchant_id" claim.
    /// VI: Lấy merchant ID hiện tại từ JWT "merchant_id" claim.
    /// </summary>
    Guid? GetCurrentMerchantId();

    /// <summary>
    /// EN: Get current shop ID from JWT "shop_id" claim or X-Shop-Id header.
    /// VI: Lấy shop ID hiện tại từ JWT "shop_id" claim hoặc header X-Shop-Id.
    /// </summary>
    Guid? GetCurrentShopId();

    /// <summary>
    /// EN: Check if the current request is a service-to-service (internal) call.
    /// VI: Kiểm tra xem request hiện tại có phải là cuộc gọi service-to-service (nội bộ) không.
    /// </summary>
    bool IsServiceCall();

    /// <summary>
    /// EN: Check if the current user has admin/system role (bypasses tenant filter).
    /// VI: Kiểm tra xem user hiện tại có role admin/system không (bỏ qua tenant filter).
    /// </summary>
    bool IsAdmin();
}
