namespace OrderService.Infrastructure.Idempotency;

/// <summary>
/// EN: Interface for managing client request idempotency.
/// VI: Interface để quản lý idempotency của client requests.
/// </summary>
public interface IRequestManager
{
    /// <summary>
    /// EN: Check if a request with the given ID exists.
    /// VI: Kiểm tra xem request với ID cho trước có tồn tại không.
    /// </summary>
    /// <param name="id">EN: Request ID / VI: ID của request</param>
    /// <returns>EN: True if exists / VI: True nếu tồn tại</returns>
    Task<bool> ExistAsync(Guid id);

    /// <summary>
    /// EN: Create a new request record for tracking.
    /// VI: Tạo bản ghi request mới để theo dõi.
    /// </summary>
    /// <typeparam name="T">EN: Command type / VI: Loại command</typeparam>
    /// <param name="id">EN: Request ID / VI: ID của request</param>
    Task CreateRequestForCommandAsync<T>(Guid id);
}
