package com.airlock.iam.plugin.configeditor.ui.plugintrees;

import com.airlock.iam.configeditor.shared.domain.IamModuleConfigRoot;
import com.airlock.iam.elog.api.ELogger;
import com.airlock.iam.elog.api.ELoggerFactory;
import com.airlock.iam.plugin.framework.application.configuration.MutablePluginConfiguration;
import com.google.common.annotations.VisibleForTesting;
import java.nio.file.Path;

public class ModulesTree extends CompositionTree {
   private static final ELogger LOG = ELoggerFactory.getLogger(ModulesTree.class);

   public ModulesTree(String displayName) {
      super(displayName);
   }

   @VisibleForTesting
   ModulesTree(String displayName, ValidationStatusHandler handler, Path rootDirectory) {
      super(displayName, handler, rootDirectory);
   }

   @Override
   protected void updateTreeImpl() {
      long time = System.currentTimeMillis();

      for (IamModuleConfigRoot medusaConfigRoot : IamModuleConfigRoot.values()) {
         for (MutablePluginConfiguration pc : this.getPluginConfigDict().getConfigTreeRoots()) {
            if (medusaConfigRoot.getPluginDisplayName().equals(pc.getPluginDisplayName())) {
               this.addPluginConfigurationItem(
                  null,
                  pc,
                  medusaConfigRoot.getConfigEditorCaption(),
                  this.getApplication().getSelectedConfigurationEnvironment(),
                  null,
                  this.createValidationMap(this.getApplication().getGlobalErrors())
               );
            }
         }
      }

      LOG.debug("Updated ModulesTree with " + this.size() + " nodes in " + (System.currentTimeMillis() - time) + " ms.");
   }
}
