using MembershipService.Domain.SeedWork;

namespace MembershipService.Domain.AggregatesModel.ExperienceAggregate;

/// <summary>
/// EN: Experience source enumeration - defines where EXP comes from.
/// VI: Experience source enumeration - định nghĩa nguồn gốc EXP.
/// </summary>
/// <remarks>
/// EN: Uses Enumeration pattern for type-safe enum with rich behavior.
/// VI: Sử dụng Enumeration pattern cho enum an toàn kiểu với hành vi phong phú.
/// </remarks>
public class ExperienceSource : Enumeration
{
    /// <summary>
    /// EN: EXP from purchase/order completion.
    /// VI: EXP từ hoàn thành đơn hàng.
    /// </summary>
    public static readonly ExperienceSource Purchase = new(1, nameof(Purchase));

    /// <summary>
    /// EN: EXP from friend referral.
    /// VI: EXP từ giới thiệu bạn bè.
    /// </summary>
    public static readonly ExperienceSource Referral = new(2, nameof(Referral));

    /// <summary>
    /// EN: EXP from app activity (browsing, engagement).
    /// VI: EXP từ hoạt động trên app (duyệt, tương tác).
    /// </summary>
    public static readonly ExperienceSource Activity = new(3, nameof(Activity));

    /// <summary>
    /// EN: EXP from promotional campaigns.
    /// VI: EXP từ chiến dịch khuyến mãi.
    /// </summary>
    public static readonly ExperienceSource Promotion = new(4, nameof(Promotion));

    /// <summary>
    /// EN: EXP from product reviews.
    /// VI: EXP từ đánh giá sản phẩm.
    /// </summary>
    public static readonly ExperienceSource Review = new(5, nameof(Review));

    /// <summary>
    /// EN: EXP from daily check-in.
    /// VI: EXP từ check-in hàng ngày.
    /// </summary>
    public static readonly ExperienceSource CheckIn = new(6, nameof(CheckIn));

    /// <summary>
    /// EN: EXP manually granted by admin.
    /// VI: EXP được admin cấp thủ công.
    /// </summary>
    public static readonly ExperienceSource Admin = new(7, nameof(Admin));

    /// <summary>
    /// EN: Private constructor for Enumeration pattern.
    /// VI: Constructor private cho Enumeration pattern.
    /// </summary>
    public ExperienceSource(int id, string name) : base(id, name)
    {
    }
}
