namespace MissionService.Domain.AggregatesModel.MissionAggregate;

using MissionService.Domain.SeedWork;

/// <summary>
/// EN: Mission types enumeration / VI: Các loại mission
/// </summary>
public class MissionType : Enumeration
{
    /// <summary>EN: Watch video to earn rewards / VI: Xem video để nhận thưởng</summary>
    public static readonly MissionType Video = new(1, nameof(Video));
    
    /// <summary>EN: Click on links/ads / VI: Nhấn vào liên kết/quảng cáo</summary>
    public static readonly MissionType Click = new(2, nameof(Click));
    
    /// <summary>EN: Upload user-generated content / VI: Tải lên nội dung người dùng</summary>
    public static readonly MissionType Upload = new(3, nameof(Upload));
    
    /// <summary>EN: Invite friends / VI: Mời bạn bè</summary>
    public static readonly MissionType Invite = new(4, nameof(Invite));
    
    /// <summary>EN: Daily check-in / VI: Điểm danh hàng ngày</summary>
    public static readonly MissionType CheckIn = new(5, nameof(CheckIn));
    
    /// <summary>EN: Social actions (like, share, subscribe) / VI: Hành động xã hội</summary>
    public static readonly MissionType Social = new(6, nameof(Social));
    
    public MissionType(int id, string name) : base(id, name) { }
}

/// <summary>
/// EN: Mission categories / VI: Danh mục mission
/// </summary>
public class MissionCategory : Enumeration
{
    public static readonly MissionCategory Daily = new(1, nameof(Daily));
    public static readonly MissionCategory Weekly = new(2, nameof(Weekly));
    public static readonly MissionCategory Special = new(3, nameof(Special));
    public static readonly MissionCategory Onboarding = new(4, nameof(Onboarding));
    public static readonly MissionCategory Event = new(5, nameof(Event));
    
    public MissionCategory(int id, string name) : base(id, name) { }
}

/// <summary>
/// EN: Mission status / VI: Trạng thái mission
/// </summary>
public class MissionStatus : Enumeration
{
    public static readonly MissionStatus Draft = new(1, nameof(Draft));
    public static readonly MissionStatus Active = new(2, nameof(Active));
    public static readonly MissionStatus Paused = new(3, nameof(Paused));
    public static readonly MissionStatus Expired = new(4, nameof(Expired));
    public static readonly MissionStatus Archived = new(5, nameof(Archived));
    
    public MissionStatus(int id, string name) : base(id, name) { }
}

/// <summary>
/// EN: Frequency type for mission completion / VI: Tần suất hoàn thành mission
/// </summary>
public class FrequencyType : Enumeration
{
    /// <summary>EN: Can complete once total / VI: Chỉ hoàn thành một lần</summary>
    public static readonly FrequencyType Once = new(1, nameof(Once));
    
    /// <summary>EN: Can complete once per day / VI: Hoàn thành một lần mỗi ngày</summary>
    public static readonly FrequencyType Daily = new(2, nameof(Daily));
    
    /// <summary>EN: Can complete once per week / VI: Hoàn thành một lần mỗi tuần</summary>
    public static readonly FrequencyType Weekly = new(3, nameof(Weekly));
    
    /// <summary>EN: Can complete unlimited times / VI: Hoàn thành không giới hạn</summary>
    public static readonly FrequencyType Unlimited = new(4, nameof(Unlimited));
    
    public FrequencyType(int id, string name) : base(id, name) { }
}
