package com.wang.okhttpparamsget.builder;

import com.intellij.ide.highlighter.JavaFileType;
import com.intellij.psi.PsiFile;
import com.wang.okhttpparamsget.Constant;
import org.jetbrains.kotlin.idea.KotlinFileType;

import javax.annotation.Nullable;

public class BuilderFactory {

    @Nullable
    public static IBuilder getParamsBuilder(int type, PsiFile psiFile) {
        if (psiFile == null) return null;
        if (psiFile.getFileType() instanceof JavaFileType) {
            return getJavaBuilder(type);
        } else if (psiFile.getFileType() instanceof KotlinFileType) {
            return getKotlinBuilder(type);
        }
        return null;
    }

    @Nullable
    private static IBuilder getJavaBuilder(int type) {
        switch (type) {
            case Constant.TYPE_MAP_STRING:
                return new JavaParamsStringBuilder();
            case Constant.TYPE_MAP_OBJECT:
                return new JavaParamsObjectBuilder();
            case Constant.TYPE_MAP_BODY:
                return new JavaParamsFileMapBuilder();
            case Constant.TYPE_LIST_PART:
                return new JavaParamsFilePartBuilder();
            case Constant.TYPE_BODY_BUILDER:
                return new JavaParamsFileBodyBuilder();
        }
        return null;
    }

    @Nullable
    private static IBuilder getKotlinBuilder(int type) {
        switch (type) {
            case Constant.TYPE_MAP_STRING:
                return new KotlinParamsStringBuilder();
            case Constant.TYPE_MAP_OBJECT:
                return new KotlinParamsObjectBuilder();
            case Constant.TYPE_MAP_BODY:
                return new KotlinParamsFileMapBuilder();
            case Constant.TYPE_LIST_PART:
                return new KotlinParamsFilePartBuilder();
            case Constant.TYPE_BODY_BUILDER:
                return new KotlinParamsFileBodyBuilder();
        }
        return null;
    }
}