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

import com.airlock.iam.plugin.api.config.ConfigurationEnvironment;
import com.airlock.iam.plugin.framework.application.configuration.MutablePluginConfiguration;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.stream.Stream;

public final class ConfigurationEnvironmentPropertiesWalkerScope implements SubtreeWalkerScope {
   private final ConfigurationEnvironment env;

   @Override
   public Stream<MutablePluginConfiguration> getNexts(MutablePluginConfiguration current) {
      return new PluginConfigurationPropertiesView(current, this.env)
         .inheritFromParent()
         .inheritFromCommonEnvironment()
         .getProperties()
         .allProperties()
         .flatMap(prop -> prop.getDirectlyReferenced().stream().map(MutablePluginConfiguration.class::cast));
   }

   @SuppressFBWarnings(justification = "generated code")
   public ConfigurationEnvironmentPropertiesWalkerScope(ConfigurationEnvironment env) {
      this.env = env;
   }
}
