package org.reflection_no_reflection.generator.introspector;

import com.squareup.javapoet.ArrayTypeName;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.TypeName;
import org.reflection_no_reflection.*;

public class IntrospectorUtil {

    public TypeName getClassName(org.reflection_no_reflection.Class<?> clazz) {
        return getClassName(clazz.getName());
    }

    public TypeName getClassName(String className) {
        if (className.endsWith("[]")) {
            final String componentName = className.substring(0, className.lastIndexOf('['));
            return ArrayTypeName.of(getClassName(componentName));
        } else if (className.contains(".")) {
            final String packageName = className.substring(0, className.lastIndexOf('.'));
            final String simpleName = className.substring(className.lastIndexOf('.')+1);
            return ClassName.get(packageName, simpleName);
        } else {
            //for primitives
            switch (className) {
                case "short" :
                    return TypeName.get(short.class);
                case "byte" :
                    return TypeName.get(byte.class);
                case "int" :
                    return TypeName.get(int.class);
                case "long" :
                    return TypeName.get(long.class);
                case "float" :
                    return TypeName.get(float.class);
                case "double" :
                    return TypeName.get(double.class);
                case "boolean" :
                    return TypeName.get(boolean.class);
                case "char" :
                    return TypeName.get(char.class);
            }
            throw new RuntimeException("Impossible to get typename for " + className);
        }
    }

    public String createCapitalizedName(String fieldName) {
        return Character.toUpperCase(fieldName.charAt(0)) + fieldName.substring(1);
    }
}