package net.king2500.plugins.PhpAdvancedAutoComplete.utils;

import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiElement;
import com.intellij.util.ObjectUtils;
import com.jetbrains.php.codeInsight.controlFlow.instructions.PhpCallInstruction;
import com.jetbrains.php.lang.PhpLangUtil;
import com.jetbrains.php.lang.psi.elements.FunctionReference;
import org.jetbrains.annotations.NotNull;

/**
 * @author Thomas Schulz <[email protected]>
 */
public class PhpMetaUtil {
    private static final String META_FILENAME = ".phpstorm.meta.php";
    private static final String META_NAMESPACE_PREFIX = "\\PHPSTORM_META\\";

    public static boolean isMetaFilename(CharSequence fileName) {
        return StringUtil.equals(fileName, META_FILENAME);
    }

    public static @NotNull String getMemberFQN(@NotNull String memberName) {
        return META_NAMESPACE_PREFIX + memberName;
    }

    public static FunctionReference getMetaFunctionReferenceWithName(PhpCallInstruction instruction, String name) {
        FunctionReference reference = instruction.getFunctionReference();
        if (!metaFunctionWithName(reference, name)) {
            return null;
        } else {
            PsiElement[] parameters = reference.getParameters();
            return parameters.length < 1 ? null : ObjectUtils.tryCast(parameters[0], FunctionReference.class);
        }
    }

    private static boolean metaFunctionWithName(FunctionReference reference, String name) {
        return PhpLangUtil.equalsClassNames(reference.getName(), name) && META_NAMESPACE_PREFIX.equals(reference.getNamespaceName());
    }
}