using IamService.Domain.SeedWork;

namespace IamService.Domain.AggregatesModel.UserAggregate;

/// <summary>
/// EN: Profile attribute value type enumeration.
/// VI: Enumeration loại giá trị của profile attribute.
/// </summary>
public class ProfileAttributeType : Enumeration
{
    /// <summary>
    /// EN: String value type.
    /// VI: Loại giá trị chuỗi.
    /// </summary>
    public static readonly ProfileAttributeType String = new(1, nameof(String));

    /// <summary>
    /// EN: Number value type (integer or decimal).
    /// VI: Loại giá trị số (số nguyên hoặc thập phân).
    /// </summary>
    public static readonly ProfileAttributeType Number = new(2, nameof(Number));

    /// <summary>
    /// EN: Boolean value type (true/false).
    /// VI: Loại giá trị boolean (true/false).
    /// </summary>
    public static readonly ProfileAttributeType Boolean = new(3, nameof(Boolean));

    /// <summary>
    /// EN: Date/DateTime value type.
    /// VI: Loại giá trị ngày/thời gian.
    /// </summary>
    public static readonly ProfileAttributeType Date = new(4, nameof(Date));

    /// <summary>
    /// EN: JSON object value type.
    /// VI: Loại giá trị đối tượng JSON.
    /// </summary>
    public static readonly ProfileAttributeType Json = new(5, nameof(Json));

    public ProfileAttributeType(int id, string name) : base(id, name)
    {
    }

    /// <summary>
    /// EN: Get all profile attribute types.
    /// VI: Lấy tất cả loại profile attribute.
    /// </summary>
    public static IEnumerable<ProfileAttributeType> GetAll() =>
    [
        String,
        Number,
        Boolean,
        Date,
        Json
    ];
}
