using AdsTrackingService.Domain.SeedWork;

namespace AdsTrackingService.Domain.AggregatesModel.TrackingPixelAggregate;

/// <summary>
/// EN: Repository interface for TrackingPixel aggregate.
/// VI: Interface repository cho aggregate TrackingPixel.
/// </summary>
public interface ITrackingPixelRepository : IRepository<TrackingPixel>
{
    /// <summary>
    /// EN: Get tracking pixel by advertiser ID.
    /// VI: Lấy tracking pixel theo advertiser ID.
    /// </summary>
    Task<TrackingPixel?> GetByAdvertiserIdAsync(Guid advertiserId, CancellationToken ct = default);

    /// <summary>
    /// EN: Get tracking pixel by pixel code.
    /// VI: Lấy tracking pixel theo pixel code.
    /// </summary>
    Task<TrackingPixel?> GetByPixelCodeAsync(string pixelCode, CancellationToken ct = default);

    /// <summary>
    /// EN: Get all active tracking pixels for an advertiser.
    /// VI: Lấy tất cả tracking pixels đang hoạt động của advertiser.
    /// </summary>
    Task<IEnumerable<TrackingPixel>> GetActivePixelsAsync(Guid advertiserId, CancellationToken ct = default);
}
