package com.yiistorm.completition.contributors;

import com.intellij.codeInsight.completion.CompletionContributor;
import com.intellij.codeInsight.completion.CompletionType;
import com.intellij.patterns.PlatformPatterns;
import com.intellij.patterns.PsiElementPattern;
import com.intellij.patterns.StandardPatterns;
import com.jetbrains.php.lang.PhpLanguage;
import com.jetbrains.php.lang.parser.PhpElementTypes;
import com.jetbrains.php.lang.patterns.PhpPatterns;
import com.yiistorm.completition.providers.YiiAppCompletionProvider;

public class YiiAppCompletionContributor extends CompletionContributor {
    public YiiAppCompletionContributor() {
        extend(CompletionType.BASIC, appFieldPattern(), new YiiAppCompletionProvider());
    }


    public static PsiElementPattern.Capture appFieldPattern() {
        return PlatformPatterns.psiElement()
                .withParent(PlatformPatterns.psiElement().withElementType(PhpElementTypes.FIELD_REFERENCE)
                        .withChild(
                                PlatformPatterns.psiElement().withElementType(PhpElementTypes.METHOD_REFERENCE)
                                        .referencing(
                                                PhpPatterns.psiElement().withElementType(PhpElementTypes.CLASS_METHOD)
                                                        .withName("app").withParent(
                                                        PhpPatterns.psiElement()
                                                                .withElementType(PhpElementTypes.CLASS)
                                                                .withName(StandardPatterns.string().oneOf("Yii", "YiiBase"))
                                                )
                                        )
                        )
                ).withLanguage(PhpLanguage.INSTANCE);

    }
}