using IamService.Domain.SeedWork;

namespace IamService.Domain.AggregatesModel.ComplianceAggregate;

/// <summary>
/// EN: Repository interface for ComplianceReport aggregate.
/// VI: Interface repository cho ComplianceReport aggregate.
/// </summary>
public interface IComplianceReportRepository : IRepository<ComplianceReport>
{
    ComplianceReport Add(ComplianceReport report);
    void Update(ComplianceReport report);
    Task<ComplianceReport?> GetByIdAsync(Guid id, CancellationToken cancellationToken = default);
    Task<ComplianceReport?> GetByIdWithViolationsAsync(Guid id, CancellationToken cancellationToken = default);
    Task<IEnumerable<ComplianceReport>> GetByTypeAsync(int reportTypeId, int take = 20, CancellationToken cancellationToken = default);
    Task<IEnumerable<ComplianceReport>> GetRecentAsync(int take = 20, CancellationToken cancellationToken = default);
    Task<IEnumerable<ComplianceViolation>> GetUnresolvedViolationsAsync(CancellationToken cancellationToken = default);
}
