package org.intellij.plugins.xsltDebugger;

import com.intellij.icons.AllIcons;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.fileEditor.FileDocumentManager;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.StdFileTypes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiDocumentManager;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiManager;
import com.intellij.xdebugger.XSourcePosition;
import com.intellij.xdebugger.breakpoints.XBreakpointProperties;
import com.intellij.xdebugger.breakpoints.XLineBreakpoint;
import com.intellij.xdebugger.breakpoints.XLineBreakpointType;
import com.intellij.xdebugger.evaluation.XDebuggerEditorsProvider;
import org.intellij.lang.xpath.xslt.XsltSupport;
import org.intellij.lang.xpath.xslt.impl.XsltChecker;
import org.intellij.plugins.xsltDebugger.impl.XsltDebuggerEditorsProvider;
import org.jetbrains.annotations.NotNull;

import javax.swing.*;

public class XsltBreakpointType extends XLineBreakpointType<XBreakpointProperties> {

  private final XsltDebuggerEditorsProvider myMyEditorsProvider1 = new XsltDebuggerEditorsProvider(XsltChecker.LanguageLevel.V1);
  private final XsltDebuggerEditorsProvider myMyEditorsProvider2 = new XsltDebuggerEditorsProvider(XsltChecker.LanguageLevel.V2);

  public XsltBreakpointType() {
    super("xslt", "XSLT Breakpoints");
  }

  @Override
  public boolean canPutAt(@NotNull VirtualFile file, int line, @NotNull Project project) {
    final Document document = FileDocumentManager.getInstance().getDocument(file);
    if (document == null) return false;

    final PsiFile psiFile = PsiDocumentManager.getInstance(project).getPsiFile(document);
    if (psiFile == null) {
      return false;
    }
    final FileType fileType = psiFile.getFileType();
    if (fileType != StdFileTypes.XML || !XsltSupport.isXsltFile(psiFile)) {
      return false;
    }
    return true;
  }

  @Override
  public XDebuggerEditorsProvider getEditorsProvider(@NotNull XLineBreakpoint<XBreakpointProperties> breakpoint, @NotNull Project project) {
    final XSourcePosition position = breakpoint.getSourcePosition();
    if (position == null) {
      return null;
    }

    final PsiFile file = PsiManager.getInstance(project).findFile(position.getFile());
    if (file == null) {
      return null;
    }

    final XsltChecker.LanguageLevel level = XsltSupport.getXsltLanguageLevel(file);
    if (level == XsltChecker.LanguageLevel.V1) {
      return myMyEditorsProvider1;
    } else if (level == XsltChecker.LanguageLevel.V2) {
      return myMyEditorsProvider2;
    }

    return null;
  }

  @NotNull
  @Override
  public Icon getEnabledIcon() {
    return XsltSupport.createXsltIcon(AllIcons.Debugger.Db_set_breakpoint);
  }

  @NotNull
  @Override
  public Icon getDisabledIcon() {
    return XsltSupport.createXsltIcon(AllIcons.Debugger.Db_disabled_breakpoint);
  }

  @Override
  public XBreakpointProperties createBreakpointProperties(@NotNull VirtualFile file, int line) {
    return null;
  }
}

@@ -41,44 +41,8 @@
 r;%0A%0A
-import com.intellij.icons.AllIcons;%0A
 impo
@@ -971,31 +971,8 @@
 l;%0A%0A
-import javax.swing.*;%0A%0A
 publ
@@ -2642,288 +2642,8 @@
  %7D%0A%0A
-  @NotNull%0A  @Override%0A  public Icon getEnabledIcon() %7B%0A    return XsltSupport.createXsltIcon(AllIcons.Debugger.Db_set_breakpoint);%0A  %7D%0A%0A  @NotNull%0A  @Override%0A  public Icon getDisabledIcon() %7B%0A    return XsltSupport.createXsltIcon(AllIcons.Debugger.Db_disabled_breakpoint);%0A  %7D%0A%0A
   @O

use platform icons for xslt debugger