using System.Globalization;
using System.Linq;

namespace InABox.Core
{
    public abstract class EnabledSecurityDescriptor<TLicense> : BaseSecurityDescriptor<TLicense> where TLicense : LicenseToken
    {
        public override bool Value => Visible;
    }

    public abstract class EnabledSecurityDescriptor<TLicense, TEntity> : EnabledSecurityDescriptor<TLicense>
        where TLicense : LicenseToken where TEntity : Entity, new()
    {
        public override string Category => new Inflector.Inflector(new CultureInfo("en"))
            .Pluralize(
                typeof(TEntity).EntityName().Split('.').Last().SplitCamelCase()
            );
    }

    public abstract class EnabledSecurityDescriptor<TLicense, TEntity1, TEntity2> : EnabledSecurityDescriptor<TLicense, TEntity1>
        where TLicense : LicenseToken where TEntity1 : Entity, new() where TEntity2 : Entity, new()
    {
    }

    public abstract class EnabledSecurityDescriptor<TLicense, TEntity1, TEntity2, TEntity3> : EnabledSecurityDescriptor<TLicense, TEntity1, TEntity2>
        where TLicense : LicenseToken where TEntity1 : Entity, new() where TEntity2 : Entity, new() where TEntity3 : Entity, new()
    {
    }
}