// 
// Decompiled by Procyon v0.6.0
// 

package com.hypixel.hytale.server.core.plugin;

import com.hypixel.hytale.component.ComponentType;
import com.hypixel.hytale.server.core.universe.world.storage.EntityStore;
import com.hypixel.hytale.component.Component;
import com.hypixel.hytale.common.plugin.PluginIdentifier;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import javax.annotation.Nonnull;
import com.hypixel.hytale.server.core.plugin.pages.PluginListPage;
import java.util.List;

public class PluginListPageManager
{
    public static PluginListPageManager instance;
    @Nonnull
    private final List<PluginListPage> activePages;
    
    public PluginListPageManager() {
        this.activePages = new CopyOnWriteArrayList<PluginListPage>();
        PluginListPageManager.instance = this;
    }
    
    @Nonnull
    public static PluginListPageManager get() {
        return PluginListPageManager.instance;
    }
    
    public void registerPluginListPage(@Nonnull final PluginListPage page) {
        if (this.activePages.contains(page)) {
            return;
        }
        this.activePages.add(page);
    }
    
    public void deregisterPluginListPage(@Nonnull final PluginListPage page) {
        if (!this.activePages.contains(page)) {
            return;
        }
        this.activePages.remove(page);
    }
    
    public void notifyPluginChange(@Nonnull final Map<PluginIdentifier, PluginBase> plugins, @Nonnull final PluginIdentifier pluginIdentifier) {
        final PluginBase plugin = plugins.get(pluginIdentifier);
        this.activePages.forEach(page -> page.handlePluginChangeEvent(pluginIdentifier, plugin != null && plugin.isEnabled()));
    }
    
    public static class SessionSettings implements Component<EntityStore>
    {
        public boolean descriptiveOnly;
        
        public SessionSettings() {
            this.descriptiveOnly = true;
        }
        
        public SessionSettings(final boolean descriptiveOnly) {
            this.descriptiveOnly = descriptiveOnly;
        }
        
        @Nonnull
        public static ComponentType<EntityStore, SessionSettings> getComponentType() {
            return PluginManager.get().getSessionSettingsComponentType();
        }
        
        @Nonnull
        @Override
        public Component<EntityStore> clone() {
            return new SessionSettings(this.descriptiveOnly);
        }
    }
}
