/*
 * 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.base.lang.projectview.psi;

import com.google.idea.blaze.base.lang.buildfile.references.FileLookupData.PathFormat;
import com.google.idea.blaze.base.lang.projectview.language.ProjectViewKeywords;
import com.google.idea.blaze.base.lang.projectview.lexer.ProjectViewTokenType;
import com.google.idea.blaze.base.lang.projectview.references.ProjectViewLabelReference;
import com.google.idea.blaze.base.projectview.section.SectionParser.ItemType;
import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiReference;
import com.intellij.psi.impl.SharedPsiElementImplUtil;

import javax.annotation.Nullable;

/**
 * Psi element for a list or scalar item.
 */
public abstract class ProjectViewPsiSectionItem extends ProjectViewPsiElement {

  public ProjectViewPsiSectionItem(ASTNode node) {
    super(node);
  }

  @Override
  public PsiReference[] getReferences() {
    return SharedPsiElementImplUtil.getReferences(this);
  }

  @Override
  public PsiReference getReference() {
    ASTNode identifier = getNode().findChildByType(ProjectViewTokenType.IDENTIFIER);
    PathFormat pathFormat = getLabelType();
    if (identifier != null && pathFormat != null) {
      return new ProjectViewLabelReference(this, pathFormat);
    }
    return null;
  }

  @Nullable
  public PathFormat getLabelType() {
    ASTNode parent = getNode().getTreeParent();
    ASTNode identifier = parent != null ? parent.getFirstChildNode() : null;
    if (identifier == null) {
      return null;
    }
    ItemType itemType = ProjectViewKeywords.ITEM_TYPES.get(identifier.getText());
    if (itemType == null) {
      return null;
    }
    switch (itemType) {
      case Label: return PathFormat.NonLocal;
      case FileSystemItem: return PathFormat.NonLocalWithoutInitialBackslashes;
      default: return null;
    }
  }

}

