package com.usenative;
import java.lang.*;
import java.lang.reflect.*;
import java.util.*;
import android.widget.*;
import com.facebook.react.bridge.*;
public class RJavaParamsHandler{
    private ReactApplicationContext ctx;
    private ArrayList<Class> paramsType=new ArrayList<Class>(); // 参数类型
    private ArrayList<Object> paramsValue=new ArrayList<Object>(); // 参数的值
    // 管理参数
    public RJavaParamsHandler(ReactApplicationContext ctx,ReadableArray params) throws ClassNotFoundException,NoSuchMethodException,IllegalAccessException,InvocationTargetException{
        this.ctx=ctx;
        //try{
            
            for(int i=0;i<params.size();i++){

                Dynamic now=params.getDynamic(i); // 装箱为Bridge种的Dynamic类型，数组中的一个元素，可以转换为多种类型
                ReadableType nowType=now.getType(); // 类型种类：ReadableType Null Number Boolean String Map Array

                if(nowType==ReadableType.String){
                   // 如果是字符串，或者字符串类型的数字，就当作字符串处理
                    String str=now.asString();
                    if(str.startsWith("$")){
                        // 特殊字符串
                        RJavaObject tmp=RJavaObjectManager.get(str);
                        paramsType.add(tmp.getType());
                        paramsValue.add(tmp.getObject());
                    }else{
                        // 普通常量字符串
                        if(str.contains(":")){
                            // 有类型注释转换为相应的类，带类型注释可能是数字
                            String[] tmp=str.split(":");
                            if(tmp[1].equals("string") || tmp[1].equals("String")){
                                paramsType.add(Class.forName("java.lang.String"));
                                paramsValue.add((Object)tmp[0]);
                            }else if(tmp[1].equals("float")){
                                paramsType.add(float.class);
                                paramsValue.add((float)Float.valueOf(tmp[0]));
                            }else if(tmp[1].equals("double")){
                                paramsType.add(float.class);
                                paramsValue.add((double)Double.valueOf(tmp[0]));
                            }else if(tmp[1].equals("int")){
                                paramsType.add(int.class);
                                paramsValue.add((int)Integer.valueOf(tmp[0]));
                            }else if(tmp[1].equals("long")){
                                paramsType.add(long.class);
                                paramsValue.add((long)Integer.valueOf(tmp[0]));
                            }else{
                                paramsType.add(Class.forName(tmp[1]));
                                paramsValue.add((Object)tmp[0]);
                            }
                        }else
                        {
                            // 没有类型注释时，默认转换为Java CharSequence类或者String类，先想一下
                            paramsType.add(Class.forName("java.lang.CharSequence"));
                            paramsValue.add((Object)str);
                        }
                    }
                }
            }
    }
    public Class[] getParamsType(){
        return this.paramsType.toArray(new Class[this.paramsType.size()]);
    }
    public Object[] getParamsValue(){
        return this.paramsValue.toArray(new Object[this.paramsValue.size()]);
    }
}