// EN: Shop type enumeration.
// VI: Enumeration loại Shop.

using MerchantService.Domain.SeedWork;

namespace MerchantService.Domain.AggregatesModel.ShopAggregate;

/// <summary>
/// EN: Represents the type of shop (Online, Physical, or Hybrid).
/// VI: Đại diện cho loại shop (Online, Cửa hàng vật lý, hoặc Hybrid).
/// </summary>
public class ShopType : Enumeration
{
    /// <summary>
    /// EN: Online-only shop (e-commerce).
    /// VI: Shop chỉ online (thương mại điện tử).
    /// </summary>
    public static readonly ShopType OnlineOnly = new(1, nameof(OnlineOnly));
    
    /// <summary>
    /// EN: Physical store only.
    /// VI: Chỉ cửa hàng vật lý.
    /// </summary>
    public static readonly ShopType PhysicalOnly = new(2, nameof(PhysicalOnly));
    
    /// <summary>
    /// EN: Both online and physical presence.
    /// VI: Cả online và cửa hàng vật lý.
    /// </summary>
    public static readonly ShopType Hybrid = new(3, nameof(Hybrid));

    public ShopType(int id, string name) : base(id, name)
    {
    }
    
    /// <summary>
    /// EN: Check if shop type supports physical branches.
    /// VI: Kiểm tra loại shop có hỗ trợ chi nhánh vật lý không.
    /// </summary>
    public bool SupportsBranches => this != OnlineOnly;
}
