package com.airlock.iam.plugin.framework.misc.frompersistence;

import com.airlock.iam.plugin.framework.application.configuration.MutablePluginConfiguration;
import com.airlock.iam.plugin.framework.domain.model.Plugin;
import com.google.common.base.Preconditions;
import com.google.common.collect.Iterables;
import com.google.common.collect.Maps;
import java.util.Map;
import java.util.Optional;

final class TranslationState {
   private final Map<Plugin, MutablePluginConfiguration> pcFromPlugin = Maps.newLinkedHashMap();

   public void addConfigTranslation(Plugin plugin, MutablePluginConfiguration pc) {
      Preconditions.checkState(!this.pcFromPlugin.containsKey(plugin));
      this.pcFromPlugin.put(plugin, pc);
   }

   public Optional<MutablePluginConfiguration> getPluginConfigurationFor(Plugin plugin) {
      return Optional.ofNullable(this.pcFromPlugin.get(plugin));
   }

   public boolean isInConfig(Plugin plugin) {
      return this.pcFromPlugin.containsKey(plugin);
   }

   public void updateTranslation(Plugin plugin, MutablePluginConfiguration newPluginConfig) {
      Preconditions.checkState(this.pcFromPlugin.containsKey(plugin));
      this.pcFromPlugin.put(plugin, newPluginConfig);
   }

   public Iterable<Plugin> allPlugins() {
      return Iterables.unmodifiableIterable(this.pcFromPlugin.keySet());
   }
}
