/*
 * Copyright 2016 The Bazel Authors. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.google.idea.blaze.java.ui;

import com.google.idea.blaze.base.scope.output.IssueOutput;
import com.google.idea.blaze.base.ui.BlazeProblemsView;
import com.intellij.compiler.CompilerMessageImpl;
import com.intellij.compiler.ProblemsView;
import com.intellij.openapi.compiler.CompilerMessageCategory;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;

import java.util.UUID;

public class BlazeIntelliJProblemsView implements BlazeProblemsView {
  private final Project project;

  private BlazeIntelliJProblemsView(Project project) {
    this.project = project;
  }

  @Override
  public void clearOldMessages(UUID sessionId) {
    ProblemsView.SERVICE.getInstance(project).clearOldMessages(null, sessionId);
  }

  @Override
  public void addMessage(IssueOutput issue, UUID sessionId) {
    VirtualFile virtualFile = issue.getFile() != null
                              ? VfsUtil.findFileByIoFile(issue.getFile(), true /* refresh */)
                              : null;
    CompilerMessageCategory category = issue.getCategory() == IssueOutput.Category.ERROR
                                       ? CompilerMessageCategory.ERROR
                                       : CompilerMessageCategory.WARNING;
    CompilerMessageImpl message = new CompilerMessageImpl(
      project,
      category,
      issue.getMessage(),
      virtualFile,
      issue.getLine(),
      issue.getColumn(),
      issue.getNavigatable()
    );
    ProblemsView.SERVICE.getInstance(project).addMessage(message, sessionId);
  }
}
