package com.airlock.iam.plugin.configeditor.command;

import com.airlock.iam.plugin.configeditor.data.ConfigurableProperty;
import com.airlock.iam.plugin.framework.application.configuration.MutablePluginConfiguration;
import com.airlock.iam.plugin.framework.misc.config.PluginConfigurationDictionary;
import java.util.Objects;

public class CreateNewConnectedPluginConfigurationCommand implements ConfigEditorCommand {
   private final PluginConfigurationDictionary pluginConfigurationDictionary;
   private final MutablePluginConfiguration pluginConfiguration;
   private final ConfigurableProperty property;
   private final Object propertyValue;

   public CreateNewConnectedPluginConfigurationCommand(
      PluginConfigurationDictionary pluginConfigurationDictionary, MutablePluginConfiguration pluginConfiguration, ConfigurableProperty property
   ) {
      this(pluginConfigurationDictionary, pluginConfiguration, property, pluginConfiguration);
   }

   public CreateNewConnectedPluginConfigurationCommand(
      PluginConfigurationDictionary pluginConfigurationDictionary,
      MutablePluginConfiguration pluginConfiguration,
      ConfigurableProperty property,
      Object propertyValue
   ) {
      Objects.requireNonNull(pluginConfigurationDictionary, "pluginConfigurationDictionary must not be null");
      Objects.requireNonNull(pluginConfiguration, "pluginConfiguration must not be null");
      Objects.requireNonNull(property, "property must not be null");
      this.pluginConfigurationDictionary = pluginConfigurationDictionary;
      this.pluginConfiguration = pluginConfiguration;
      this.property = property;
      this.propertyValue = propertyValue;
   }

   @Override
   public final void execute() {
      this.pluginConfigurationDictionary.addPluginConfiguration(this.pluginConfiguration);
      this.property.setValue(this.propertyValue);
   }
}
