package com.dbs.mplus.fatima.framework.util;

import android.content.Context;

import java.lang.reflect.Field;

/**
 * Created by aple on 2016. 2. 19..
 */
public class MPlusResourceUtil {

    public static String getStringById(Context context, int id) {
        return context.getApplicationContext().getString(id);
    }

    /**
     * id에 대한 string 구하기
     * @param context
     * @param name
     * @return
     */
    public static String getStringByName(Context context, String name) {
        int id = MPlusResourceUtil.getResourceIdByName(context, "string", name);
        return context.getString(id);
    }

    /**
     * name에 대한 string id 구하기
     * @param context
     * @param name
     * @return
     */
    public static int getStringIdByName(Context context, String name) {
        return MPlusResourceUtil.getResourceIdByName(context, "string", name);
    }

    /**
     * name 에 대한 id의 id 구하기
     * @param context
     * @param name
     */
    public static int getIdByName(Context context, String name) {
        return MPlusResourceUtil.getResourceIdByName(context, "id", name);
    }

    /**
     * name에 대한 layout id 구하기
     * @param context
     * @param name
     * @return
     */
    public static int getLayoutIdByName(Context context, String name) {
        return MPlusResourceUtil.getResourceIdByName(context, "layout", name);
    }

    /**
     * 이미지를 사용하기 위해서 이름으로 이미지 Id를 찾기
     * @param context
     * @param name
     * @return
     */
    public static int getDrawableIdByName(Context context, String name) {
        return MPlusResourceUtil.getResourceIdByName(context, "drawable", name);
    }

    /**
     * 다른 모듈의 리소스 가져오기
     *
     * @param context
     * @param resourceTypeName
     * @param name
     * @return
     */
    private static int getResourceIdByName(Context context, String resourceTypeName, String name) {
        if(context == null) {
            MPlusLogUtil.ERROR(MPlusResourceUtil.class, "context = " + context + ", resourceTypeName = " + resourceTypeName + ", name = " + name);
            return Integer.MAX_VALUE;
        }


        StringBuilder builder = new StringBuilder();
        String packageName = context.getPackageName();


        if(MPlusStringUtil.isEmpty(packageName)) {
            builder.append("R$").append(resourceTypeName);
        }
        else {
            builder.append(packageName).append(".R$").append(resourceTypeName);
        }

        Class clazz = null;

        try {
            clazz = Class.forName(builder.toString());
            final Field field = clazz.getField(name);
            return field.getInt(clazz);
        }
        catch(Exception ex) {
            MPlusLogUtil.ERROR(MPlusResourceUtil.class, "리소스 찾기 실패", ex);
            return Integer.MAX_VALUE;
        }
    }
}

