package com.reason.ide.hints;

import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.editor.EditorLinePainter;
import com.intellij.openapi.editor.LineExtensionInfo;
import com.intellij.openapi.editor.colors.EditorColorsManager;
import com.intellij.openapi.editor.colors.EditorColorsScheme;
import com.intellij.openapi.editor.markup.TextAttributes;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VirtualFile;
import com.reason.ide.annotations.ErrorsManager;
import com.reason.ide.highlight.ORSyntaxHighlighter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.Collection;
import java.util.Collections;

public class OREditorLinePainter extends EditorLinePainter {

    @Nullable
    @Override
    public Collection<LineExtensionInfo> getLineExtensions(@NotNull Project project, @NotNull VirtualFile file, int lineNumber) {
        //long start = System.currentTimeMillis();

        CodeLensView.CodeLensInfo data = project.getUserData(CodeLensView.CODE_LENS);
        if (data == null) {
            return null;
        }

        if (ServiceManager.getService(project, ErrorsManager.class).hasErrors(file.getName(), lineNumber + 1)) {
            return null;
        }

        Collection<LineExtensionInfo> info = null;

        String signature = data.get(file, lineNumber);
        if (signature != null) {
            EditorColorsScheme globalScheme = EditorColorsManager.getInstance().getGlobalScheme();
            TextAttributes codeLens = globalScheme.getAttributes(ORSyntaxHighlighter.CODE_LENS_);
            info = Collections.singletonList(new LineExtensionInfo("  " + signature, codeLens));
        }

        //long end = System.currentTimeMillis();
        //System.out.println("line extensions in " + (end - start) + "ms");
        return info;
    }
}