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

import com.airlock.iam.plugin.api.config.ConfigurationEnvironment;
import com.airlock.iam.plugin.configeditor.ConfigEditorApplication;
import com.airlock.iam.plugin.configeditor.data.EnvironmentSelectionBean;
import com.airlock.iam.plugin.configeditor.data.EnvironmentSelectionSortOrder;
import com.airlock.iam.plugin.configeditor.ui.dialog.NewEnvironmentDialog;
import com.vaadin.data.HasValue.ValueChangeEvent;
import com.vaadin.data.HasValue.ValueChangeListener;
import com.vaadin.ui.UI;
import java.util.Optional;

public class AddEnvironmentSelectionBeanItem implements EnvironmentSelectionBean, ValueChangeListener<EnvironmentSelectionBean> {
   private static final String LABEL = "- Add environment -";
   private final ConfigurationEnvironmentSelector environmentSelector;

   public AddEnvironmentSelectionBeanItem(ConfigurationEnvironmentSelector environmentSelector) {
      this.environmentSelector = environmentSelector;
   }

   public void valueChange(ValueChangeEvent<EnvironmentSelectionBean> event) {
      if (((EnvironmentSelectionBean)event.getValue()).equals(this)) {
         ConfigEditorApplication configEditorApplication = (ConfigEditorApplication)UI.getCurrent();
         NewEnvironmentDialog newEnvironmentDialog = new NewEnvironmentDialog(this.environmentSelector.getVisibleEnvironments());
         newEnvironmentDialog.addCloseListener(e -> {
            Optional<ConfigurationEnvironment> newEnvironment = newEnvironmentDialog.getConfigurationEnvironment();
            if (newEnvironment.isPresent()) {
               this.environmentSelector.select(newEnvironment.get());
            } else {
               this.environmentSelector.resetComboboxToSelectedEnvironment();
            }
         });
         configEditorApplication.addWindow(newEnvironmentDialog);
      }
   }

   @Override
   public String getCaption() {
      return "- Add environment -";
   }

   @Override
   public EnvironmentSelectionSortOrder getSortOrder() {
      return EnvironmentSelectionSortOrder.ADD_ENVIRONMENT;
   }

   @Override
   public String getStyle() {
      return "addenv";
   }
}
