using IamService.Domain.SeedWork;

namespace IamService.Domain.Events;

/// <summary>
/// EN: Event when access review is created.
/// VI: Event khi đánh giá truy cập được tạo.
/// </summary>
public record AccessReviewCreatedEvent(
    Guid ReviewId,
    string Name,
    Guid OwnerId,
    string Scope) : IDomainEvent
{
    public DateTime OccurredOn { get; } = DateTime.UtcNow;
}

/// <summary>
/// EN: Event when access review is started.
/// VI: Event khi đánh giá truy cập được bắt đầu.
/// </summary>
public record AccessReviewStartedEvent(
    Guid ReviewId,
    Guid OwnerId,
    int ItemCount) : IDomainEvent
{
    public DateTime OccurredOn { get; } = DateTime.UtcNow;
}

/// <summary>
/// EN: Event when access review is completed.
/// VI: Event khi đánh giá truy cập hoàn thành.
/// </summary>
public record AccessReviewCompletedEvent(
    Guid ReviewId,
    int CertifiedCount,
    int RevokedCount) : IDomainEvent
{
    public DateTime OccurredOn { get; } = DateTime.UtcNow;
}

/// <summary>
/// EN: Event when privileged access is granted.
/// VI: Event khi quyền truy cập đặc quyền được cấp.
/// </summary>
public record PrivilegedAccessGrantedEvent(
    Guid GrantId,
    Guid UserId,
    Guid RoleId,
    string ResourceScope,
    DateTime ExpiresAt) : IDomainEvent
{
    public DateTime OccurredOn { get; } = DateTime.UtcNow;
}

/// <summary>
/// EN: Event when privileged access is revoked.
/// VI: Event khi quyền truy cập đặc quyền bị thu hồi.
/// </summary>
public record PrivilegedAccessRevokedEvent(
    Guid GrantId,
    Guid UserId,
    Guid RevokedByUserId,
    string? Reason) : IDomainEvent
{
    public DateTime OccurredOn { get; } = DateTime.UtcNow;
}
