package com.demandware.studio.facet;

import com.demandware.studio.settings.DWSettingsProvider;
import com.intellij.facet.Facet;
import com.intellij.facet.FacetManager;
import com.intellij.facet.ModifiableFacetModel;
import com.intellij.ide.util.frameworkSupport.FrameworkSupportConfigurable;
import com.intellij.ide.util.frameworkSupport.FrameworkSupportModel;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleServiceManager;
import com.intellij.openapi.roots.ModifiableRootModel;
import com.intellij.openapi.roots.libraries.Library;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import javax.swing.*;
import java.util.UUID;

public class DWFrameworkSupportConfigurable extends FrameworkSupportConfigurable {
    DWFrameworkSupportConfigurablePanel dwFrameworkSupportConfigurablePanel;

    public DWFrameworkSupportConfigurable(FrameworkSupportModel model) {
        model.setFrameworkComponentEnabled("Demandware", true);
        dwFrameworkSupportConfigurablePanel = new DWFrameworkSupportConfigurablePanel();
    }

    @Nullable
    @Override
    public JComponent getComponent() {
        return dwFrameworkSupportConfigurablePanel.createPanel();
    }

    @Override
    public void addSupport(@NotNull Module module, @NotNull ModifiableRootModel modifiableRootModel, @Nullable Library library) {
        final FacetManager facetManager = FacetManager.getInstance(module);
        ModifiableFacetModel facetModel = facetManager.createModifiableModel();
        DWSettingsProvider dwSettingsProvider = ModuleServiceManager.getService(module, DWSettingsProvider.class);
        dwSettingsProvider.setPasswordKey(UUID.randomUUID().toString());
        dwSettingsProvider.setHostname(dwFrameworkSupportConfigurablePanel.getHostname());
        dwSettingsProvider.setUsername(dwFrameworkSupportConfigurablePanel.getUsername());
        dwSettingsProvider.setPassword(dwFrameworkSupportConfigurablePanel.getPassword());
        dwSettingsProvider.setVersion(dwFrameworkSupportConfigurablePanel.getVersion());
        dwSettingsProvider.setAutoUploadEnabled(dwFrameworkSupportConfigurablePanel.getAutoUploadEnabled());
        Facet facet = FacetManager.getInstance(modifiableRootModel.getModule()).addFacet(DWFacetType.INSTANCE, "Demandware", null);
        facetModel.addFacet(facet);
        facetModel.commit();
    }
}