package osmedile.intellij.stringmanip.utils;

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import com.intellij.application.options.colors.ColorAndFontOptions;
import com.intellij.openapi.editor.CaretState;
import com.intellij.openapi.editor.Document;
import com.intellij.openapi.editor.EditorFactory;
import com.intellij.openapi.editor.EditorSettings;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.ex.EditorEx;
import com.intellij.openapi.editor.impl.EditorImpl;

public class IdeUtils {
	public static void sort(List<CaretState> caretsAndSelections) {
		Collections.sort(caretsAndSelections, new Comparator<CaretState>() {
			@Override
			public int compare(CaretState o1, CaretState o2) {
				return o1.getCaretPosition().compareTo(o2.getCaretPosition());
			}
		});
	}

	public static EditorImpl createEditorPreview(String text, boolean editable) {
		EditorColorsScheme scheme = EditorColorsManager.getInstance().getGlobalScheme();
		ColorAndFontOptions options = new ColorAndFontOptions();
		options.reset();
		options.selectScheme(scheme.getName());

		EditorFactory editorFactory = EditorFactory.getInstance();
		Document editorDocument = editorFactory.createDocument(text);
		EditorEx editor = (EditorEx) (editable ? editorFactory.createEditor(editorDocument) : editorFactory.createViewer(editorDocument));
		editor.setColorsScheme(scheme);
		EditorSettings settings = editor.getSettings();
		settings.setLineNumbersShown(true);
		settings.setWhitespacesShown(false);
		settings.setLineMarkerAreaShown(false);
		settings.setIndentGuidesShown(false);
		settings.setFoldingOutlineShown(false);
		settings.setAdditionalColumnsCount(0);
		settings.setAdditionalLinesCount(0);
		settings.setRightMarginShown(false);

		return (EditorImpl) editor;
	}

}