package com.hclogger;

import android.content.pm.ApplicationInfo;
import android.util.Log;

import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReadableArray;
import com.facebook.react.module.annotations.ReactModule;

/**
 * Created by zhaozhao on 2018/4/26.
 */
@ReactModule(name = "HCReactNativeLoggerBridge")
public class LogModule extends ReactContextBaseJavaModule {
    private static final String HCLoggerManager = "HCReactNativeLoggerBridge";
    private ReactApplicationContext mContext;

    public LogModule(ReactApplicationContext reactContext) {
        super(reactContext);
        mContext = reactContext;
    }

    @Override
    public String getName() {
        return HCLoggerManager;
    }

    //格式化log
    private String formatLog(ReadableArray message) {
        String msg = message.toString();
        if (msg.length() >= 2) {
            String messages = msg.substring(1, msg.length() - 1)
                    .replace(",", ", ")
                    .replace("[", "[ ")
                    .replace("]", " ]")
                    .replace("{", "{ ")
                    .replace("}", " }")
                    .replace("\"", "\'");
            return messages;
        } else {
            return msg;
        }

    }
//判断app是否是debug模式
    private boolean isApkDebug() {
        try {
            ApplicationInfo info = mContext.getApplicationInfo();
            return (info.flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return false;
    }

    @ReactMethod
    public void file(ReadableArray message) {
        LogManager.getInstance(mContext).debug(formatLog(message), LogManager.FILE);
    }

    @ReactMethod
    public void error(ReadableArray message) {
        LogManager.getInstance(mContext).debug(formatLog(message), LogManager.ERROR);
    }

    @ReactMethod
    public void debug(ReadableArray message) {
        if (isApkDebug())
            LogManager.getInstance(mContext).debug(formatLog(message), LogManager.DEBUG);
    }

    @ReactMethod
    public void warn(ReadableArray message) {
        if (isApkDebug())
            LogManager.getInstance(mContext).debug(formatLog(message), LogManager.WARN);
    }

    @ReactMethod
    public void info(ReadableArray message) {
        if (isApkDebug())
            LogManager.getInstance(mContext).debug(formatLog(message), LogManager.INFO);
    }
    @ReactMethod
    public void rollLogFile() {
        LogManager.getInstance(mContext).rollLogFile();
    }

    @ReactMethod
    public void configLogger() {
        LogManager.getInstance(mContext).startLog();
    }

}

