using MediatR;

namespace MiningService.Domain.Events;

/// <summary>
/// EN: Event raised when a new miner profile is created.
/// VI: Sự kiện khi hồ sơ thợ đào mới được tạo.
/// </summary>
public record MinerCreatedDomainEvent(Guid MinerId, Guid UserId) : INotification;

/// <summary>
/// EN: Event raised when a mining session is started.
/// VI: Sự kiện khi phiên đào được bắt đầu.
/// </summary>
public record MiningSessionStartedDomainEvent(
    Guid MinerId, 
    Guid SessionId, 
    decimal HourlyRate) : INotification;

/// <summary>
/// EN: Event raised when points are mined (session claimed).
/// VI: Sự kiện khi điểm được đào (phiên được nhận thưởng).
/// </summary>
public record PointsMinedDomainEvent(
    Guid MinerId, 
    decimal PointsEarned, 
    decimal TotalPoints,
    int StreakDays) : INotification;

/// <summary>
/// EN: Event raised when streak tier changes.
/// VI: Sự kiện khi cấp streak thay đổi.
/// </summary>
public record StreakUpdatedDomainEvent(
    Guid MinerId,
    int PreviousStreak,
    int NewStreak,
    decimal NewBonusMultiplier) : INotification;

/// <summary>
/// EN: Event raised when a security circle is completed (3+ members).
/// VI: Sự kiện khi vòng tròn an toàn hoàn thành (3+ thành viên).
/// </summary>
public record CircleCompletedDomainEvent(
    Guid CircleId,
    Guid OwnerId,
    int MemberCount) : INotification;

/// <summary>
/// EN: Event raised when a referral is activated (KYC verified).
/// VI: Sự kiện khi giới thiệu được kích hoạt (KYC đã xác minh).
/// </summary>
public record ReferralActivatedDomainEvent(
    Guid ReferralId,
    Guid ReferrerId,
    Guid ReferredId) : INotification;

/// <summary>
/// EN: Event raised when admin updates system configuration.
/// VI: Sự kiện khi admin cập nhật cấu hình hệ thống.
/// </summary>
public record ConfigurationUpdatedDomainEvent(
    string ConfigType,
    Guid UpdatedBy,
    DateTime UpdatedAt) : INotification;
