// EN: Merchant status enumeration.
// VI: Enumeration trạng thái Merchant.

using MerchantService.Domain.SeedWork;

namespace MerchantService.Domain.AggregatesModel.MerchantAggregate;

/// <summary>
/// EN: Represents the status of a merchant.
/// VI: Đại diện cho trạng thái của merchant.
/// </summary>
public class MerchantStatus : Enumeration
{
    /// <summary>
    /// EN: Merchant is pending admin approval.
    /// VI: Merchant đang chờ admin phê duyệt.
    /// </summary>
    public static readonly MerchantStatus PendingApproval = new(1, nameof(PendingApproval));
    
    /// <summary>
    /// EN: Merchant is active and can operate.
    /// VI: Merchant đang hoạt động và có thể kinh doanh.
    /// </summary>
    public static readonly MerchantStatus Active = new(2, nameof(Active));
    
    /// <summary>
    /// EN: Merchant is temporarily suspended.
    /// VI: Merchant tạm thời bị đình chỉ.
    /// </summary>
    public static readonly MerchantStatus Suspended = new(3, nameof(Suspended));
    
    /// <summary>
    /// EN: Merchant is permanently banned.
    /// VI: Merchant bị cấm vĩnh viễn.
    /// </summary>
    public static readonly MerchantStatus Banned = new(4, nameof(Banned));

    public MerchantStatus(int id, string name) : base(id, name)
    {
    }
    
    /// <summary>
    /// EN: Check if merchant can create shops.
    /// VI: Kiểm tra merchant có thể tạo shop không.
    /// </summary>
    public bool CanCreateShop => this == Active;
    
    /// <summary>
    /// EN: Check if merchant can be suspended.
    /// VI: Kiểm tra merchant có thể bị đình chỉ không.
    /// </summary>
    public bool CanBeSuspended => this == Active;
    
    /// <summary>
    /// EN: Check if merchant can be activated.
    /// VI: Kiểm tra merchant có thể được kích hoạt không.
    /// </summary>
    public bool CanBeActivated => this == PendingApproval || this == Suspended;
}
