// Copyright 2006-2012 AdvancedTools. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.advancedtools.cpp.sdk;

import com.advancedtools.cpp.CppBundle;
import com.advancedtools.cpp.CppSupportLoader;
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
import com.intellij.ide.util.projectWizard.ProjectWizardStepFactory;
import com.intellij.ide.util.projectWizard.WizardContext;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ApplicationComponent;
import com.intellij.openapi.module.ModuleType;
import com.intellij.openapi.module.ModuleTypeManager;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;

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

/**
 * @author maxim
 */
public class CppModuleType extends ModuleType<CppModuleBuilder> implements ApplicationComponent {
  public CppModuleType() {
    super("C++");
  }

  public CppModuleBuilder createModuleBuilder() {
    return new CppModuleBuilder();
  }

  public String getName() {
    return CppBundle.message("c.cpp.module");
  }

  public ModuleWizardStep[] createWizardSteps(WizardContext wizardContext, CppModuleBuilder cppModuleBuilder, ModulesProvider modulesProvider) {
    final List<Sdk> list = CppSdkType.getInstance().getCppSdks();
    final ModuleWizardStep sourceModuleWizardStep = ProjectWizardStepFactory.getInstance().createSourcePathsStep(wizardContext, cppModuleBuilder, null, null);
    final ModuleWizardStep createSampleCode = new CreateEntryCodeStep(cppModuleBuilder);

    if (list.size() == 0) {
      return new ModuleWizardStep[] { new ChooseCppSdkStep(cppModuleBuilder, wizardContext),sourceModuleWizardStep, createSampleCode };
    }
    return new ModuleWizardStep[] { sourceModuleWizardStep, createSampleCode };
  }

  public String getDescription() {
    return CppBundle.message("c.cpp.module.description");
  }

  public Icon getBigIcon() {
    return CppSupportLoader.ourBigModuleIcon;
  }

  public Icon getNodeIcon(boolean isOpened) {
    return CppSupportLoader.ourModuleIcon;
  }

  @NonNls
  @NotNull
  public String getComponentName() {
    return "CppTools.ModuleType";
  }

  public void initComponent() {
    ModuleTypeManager.getInstance().registerModuleType(this);
  }

  public void disposeComponent() {
  }

  public static CppModuleType getInstance() {
    return ApplicationManager.getApplication().getComponent(CppModuleType.class);
  }

}