using System;
using System.Collections.Generic;
using TweetDuck.Plugins;
using TweetDuck.Plugins.Events;

namespace TweetDuck.Configuration{
    sealed class PluginConfig : ConfigManager.BaseConfig, IPluginConfig{
        private static readonly string[] DefaultDisabled = {
            "official/clear-columns",
            "official/reply-account"
        };

        // CONFIGURATION

        public IEnumerable<string> DisabledPlugins => disabled;
        
        public event EventHandler<PluginChangedStateEventArgs> PluginChangedState;

        public void SetEnabled(Plugin plugin, bool enabled){
            if ((enabled && disabled.Remove(plugin.Identifier)) || (!enabled && disabled.Add(plugin.Identifier))){
                PluginChangedState?.Invoke(this, new PluginChangedStateEventArgs(plugin, enabled));
                Save();
            }
        }

        public bool IsEnabled(Plugin plugin){
            return !disabled.Contains(plugin.Identifier);
        }

        public void ReloadSilently(IEnumerable<string> newDisabled){
            disabled.Clear();
            disabled.UnionWith(newDisabled);
        }

        private readonly HashSet<string> disabled = new HashSet<string>(DefaultDisabled);
        
        // END OF CONFIG

        public PluginConfig(ConfigManager configManager) : base(configManager){}

        protected override ConfigManager.BaseConfig ConstructWithDefaults(ConfigManager configManager){
            return new PluginConfig(configManager);
        }
    }
}