package com.airlock.iam.plugin.framework.application.configuration;

import com.airlock.iam.plugin.api.config.ConfigurationContext;
import com.airlock.iam.plugin.api.config.ConfigurationEnvironment;
import com.airlock.iam.plugin.api.config.PluginConfiguration;
import com.airlock.iam.plugin.api.exception.ConfigurationException;
import com.airlock.iam.plugin.api.exception.PropertyTypeMismatchException;
import com.airlock.iam.plugin.api.property.PropertyConfiguration;
import com.airlock.iam.plugin.framework.misc.config.GlobalConfigurationAccessor;
import com.airlock.iam.plugin.framework.misc.config.PluginConfigurationOwner;
import com.airlock.iam.plugin.framework.misc.config.properties.PropertyConfigurationVisitor;
import jakarta.annotation.Nullable;
import java.util.Set;

public interface MutablePluginConfiguration extends PluginConfiguration {
   void visitInAllEnvironmentsAndContexts(PropertyConfigurationVisitor var1);

   void visitLocallyInContext(PropertyConfigurationVisitor var1, ConfigurationEnvironment var2, ConfigurationContext var3);

   void setPluginClassName(String var1);

   void setParentConfiguration(MutablePluginConfiguration var1) throws ConfigurationException;

   void removeParent();

   boolean removeProperty(String var1, ConfigurationEnvironment var2, ConfigurationContext var3);

   boolean removeProperty(String var1);

   MutablePluginConfiguration setProperty(PropertyConfiguration var1);

   MutablePluginConfiguration setProperty(PropertyConfiguration var1, ConfigurationEnvironment var2, ConfigurationContext var3);

   void setPluginDisplayName(String var1);

   @Deprecated(since = "8.5")
   default void setIdentifier(String displayName) {
      this.setPluginDisplayName(displayName);
   }

   void setComment(String var1);

   void addLocallyUsedConfigurationContextsInAllEnvironments(Set<ConfigurationContext> var1);

   void removeAllPropertiesForContext(ConfigurationContext var1);

   MutablePluginConfiguration setSynthetic(boolean var1);

   void setGlobalConfiguration(GlobalConfigurationAccessor var1);

   void setUuid(String var1);

   void setOwner(PluginConfigurationOwner var1);

   @Nullable
   MutablePluginConfiguration getPluginPropertyConfigurationValue(String var1, ConfigurationEnvironment var2, ConfigurationContext var3) throws PropertyTypeMismatchException;

   MutablePluginConfiguration getParentConfiguration();
}
