using System.Collections.Generic;
using nadena.dev.ndmf;

namespace gay.lilyy.aaccore {
    public abstract class LayerGroup
    {
        public virtual bool enabled { get { return true; } }
        public virtual bool experimental { get { return false; } }
        private V5AACLayerGroupLogger _logger;

        
        protected V5AACLayerGroupLogger Logger => _logger ??= new V5AACLayerGroupLogger(SystemName);
        
        private static readonly List<LayerGroup> instances = new();

        protected LayerGroup() => instances.Add(this);

        public static IEnumerable<LayerGroup> Instances => instances;

        public virtual bool shouldWarnIfNotApplicable => true;
        public virtual BuildPhase buildPhase => BuildPhase.Generating;
        
        public virtual bool IsApplicable(AACAssets assets) {
            return true;
        }
        public abstract string DisplayName { get; }
        public abstract string SystemName { get; }

        public abstract void Run(AACAssets assets);
    }
}