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

import android.util.Log;

import com.dbs.mplus.fatima.framework.MPlusFrameworkConstants;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

/**
 * Created by aple on 2015. 7. 27..
 */
public class MPlusLogUtil {
	private static final SimpleDateFormat format = new SimpleDateFormat("HH:mm:ss.SSS", Locale.getDefault()); 
	
    /**
     * debug 메시지
     * @param clazz 로그를 찍는 클래스
     * @param msg 메시지
     */
    public static void DEBUG(Class<?> clazz, String msg) {
        if(MPlusFrameworkConstants.DEBUG_MODE) {
            printDebug(clazz, msg);
            //Log.d(MPlusFrameworkConstants.LOG_TAG, buildMessage(clazz, msg));
        }
    }


    /**
     * debug 메시지
     * @param clazz 로그를 찍는 클래스
     * @param msg 메시지
     * @param t 예외/에러
     */
    public static void DEBUG(Class<?> clazz, String msg, Throwable t) {
        if(MPlusFrameworkConstants.DEBUG_MODE) {
            Log.d(MPlusFrameworkConstants.LOG_TAG, buildMessage(clazz, msg), t);
        }
    }

    private static void printDebug(Class<?> clazz, String msg) {
        byte[] msgByte = msg.getBytes();
        int startIndex = 0;
        int bufferSize = 3500;
        while(msgByte.length > bufferSize) {
            Log.d(MPlusFrameworkConstants.LOG_TAG, buildMessage(clazz, new String(msgByte, startIndex, bufferSize-startIndex)));
            startIndex = bufferSize;
            bufferSize = bufferSize + 3500;
        }
        Log.d(MPlusFrameworkConstants.LOG_TAG, buildMessage(clazz, new String(msgByte, startIndex, msgByte.length-startIndex)));
    }

    /**
     * info 메시지
     * @param clazz 로그를 찍는 클래스
     * @param msg 메시지
     */
    public static void INFO(Class<?> clazz, String msg) {
        if(MPlusFrameworkConstants.DEBUG_MODE) {
             Log.i(MPlusFrameworkConstants.LOG_TAG, buildMessage(clazz, msg));
        }
    }

    /**
     * error 메시지
     * @param clazz 로그를 찍는 클래스
     * @param msg 메시지
     * @param t 에러/예외
     */
    public static void ERROR(Class<?> clazz, String msg, Throwable t) {
        if(MPlusFrameworkConstants.DEBUG_MODE) {
            Log.e(MPlusFrameworkConstants.LOG_TAG, buildMessage(clazz, msg), t);
        }
    }

    /**
     * error 메시지
     * @param clazz 로그를 찍는 클래스
     * @param msg 메시지
     */
    public static void ERROR(Class<?> clazz, String msg) {
        if(MPlusFrameworkConstants.DEBUG_MODE) {
            Log.e(MPlusFrameworkConstants.LOG_TAG, buildMessage(clazz, msg));
        }
    }

    /**
     * 메시지 만들기
     * @param clazz 로그를 찍는 클래스
     * @param msg 메시지
     * @return 출력할 형태의 메시지
     */
    private static String buildMessage(Class<?> clazz, String msg) {
        final StringBuilder builder = new StringBuilder();
        
        // 시간 
        builder.append(format.format(new Date())).append(" "); 
        // 클래스명 
        builder.append("[").append(clazz.getSimpleName()).append("] ");
        if(msg != null) {
            builder.append(msg);
        }

        return builder.toString();
    }
}
