kreta/Kreta.WebApi/Naplo/Kreta.Naplo.Domain/V3/Adatszotar/Adatszotar.cs
2024-03-13 00:33:46 +01:00

86 lines
3 KiB
C#

using System;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using Kreta.Naplo.Domain.V3.UniqueIdentifier;
namespace Kreta.Naplo.Domain.V3.Adatszotar
{
[Serializable]
public class Adatszotar<T> where T : System.Enum
{
private string _leiras;
public Adatszotar(int id)
{
Uid = new AdatszotarUid(id, GetEnumName(id));
}
public Adatszotar(int id, string leiras)
{
Uid = new AdatszotarUid(id, GetEnumName(id));
Leiras = leiras;
}
public Adatszotar(string leiras)
{
Uid = new AdatszotarUid(0, GetEnumName(0));
Leiras = leiras;
}
public Adatszotar(string nev, string leiras)
{
Uid = new AdatszotarUid(0, nev);
Leiras = leiras;
}
public string EnumTypeFullName => typeof(T).Name;
public string EnumTypeName => EnumTypeFullName.Replace("Enum", string.Empty).Replace("enum", string.Empty);
public static bool IsAdatszotarElem(int id) => id >= Constant.EgyedilegFelvettAdatSzotarElemStartIndex && string.IsNullOrWhiteSpace(System.Enum.GetName(typeof(T), id));
public string Leiras { get => _leiras ?? GetDisplayNameAttribute(); private set => _leiras = value; }
public AdatszotarUid Uid { get; private set; }
private string GetEnumName(int id) => id == 0 ? $"{typeof(T)}_{nameof(Enum.Adatszotar.IsmeretlenErtek)}"
: IsAdatszotarElem(id) ? nameof(Enum.Adatszotar.AdatszotarElem)
: System.Enum.GetName(typeof(T), id);
public override bool Equals(object obj) => obj is Adatszotar<T> @enum && Uid.Id == @enum.Uid.Id;
public T GetEnum() => (T)System.Enum.Parse(typeof(T), Uid.Nev);
public override int GetHashCode() => 2_108_858_624 + Uid.Id.GetHashCode();
private string GetDisplayNameAttribute()
{
if (string.IsNullOrWhiteSpace(Uid.Nev))
{
return null;
}
var fieldInfo = typeof(T).GetField(Uid.Nev);
if (fieldInfo != null)
{
var attributes = (DisplayAttribute)fieldInfo.GetCustomAttributes(typeof(DisplayAttribute), false).FirstOrDefault();
if (attributes != null)
{
return attributes.GetName();
}
}
return null;
}
public static implicit operator Adatszotar<T>(int id) => new Adatszotar<T>(id);
public static implicit operator Adatszotar<T>(T enumValue) => new Adatszotar<T>(Convert.ToInt32(enumValue));
public static bool operator !=(Adatszotar<T> lhsWrapper, T rhsEnum) => IsAdatszotarElem(lhsWrapper.Uid.Id) || !lhsWrapper.GetEnum().Equals(rhsEnum);
public static bool operator ==(Adatszotar<T> lhsWrapper, T rhsEnum) => !IsAdatszotarElem(lhsWrapper.Uid.Id) && lhsWrapper.GetEnum().Equals(rhsEnum);
}
}