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

using MerchantService.Domain.SeedWork;

namespace MerchantService.Domain.AggregatesModel.ShopAggregate;

/// <summary>
/// EN: Represents the status of a shop.
/// VI: Đại diện cho trạng thái của shop.
/// </summary>
public class ShopStatus : Enumeration
{
    /// <summary>
    /// EN: Shop is in draft mode (not published).
    /// VI: Shop ở chế độ nháp (chưa công khai).
    /// </summary>
    public static readonly ShopStatus Draft = new(1, nameof(Draft));
    
    /// <summary>
    /// EN: Shop is active and visible to customers.
    /// VI: Shop đang hoạt động và hiển thị với khách hàng.
    /// </summary>
    public static readonly ShopStatus Active = new(2, nameof(Active));
    
    /// <summary>
    /// EN: Shop is temporarily inactive.
    /// VI: Shop tạm thời không hoạt động.
    /// </summary>
    public static readonly ShopStatus Inactive = new(3, nameof(Inactive));
    
    /// <summary>
    /// EN: Shop is permanently closed.
    /// VI: Shop đóng cửa vĩnh viễn.
    /// </summary>
    public static readonly ShopStatus Closed = new(4, nameof(Closed));

    public ShopStatus(int id, string name) : base(id, name)
    {
    }
    
    /// <summary>
    /// EN: Check if shop is visible to customers.
    /// VI: Kiểm tra shop có hiển thị với khách hàng không.
    /// </summary>
    public bool IsVisible => this == Active;
    
    /// <summary>
    /// EN: Check if shop can accept orders.
    /// VI: Kiểm tra shop có thể nhận đơn hàng không.
    /// </summary>
    public bool CanAcceptOrders => this == Active;
}
