package com.hgsoft.log;

import android.content.Context;
/**
 * 打印日志初始化设置
 *
 * @author  yinxueqin
 */
public final class MarsXLogInit {

    private static volatile MarsXLogInit INSTANCE;
    /**
     * 加密公钥
     */
    private String PUB_KEY = "";
    /**
     * 设置日志打开状态，如果日志需要写入不同的文件需要先设置关闭。
     */
    private boolean xlogOpenStatus = false;

    private MarsXLogInit(){
    }

    public static MarsXLogInit getInstance() {
        if (INSTANCE == null) {
            synchronized (MarsXLogInit.class) {
                if (INSTANCE == null) {
                    INSTANCE = new MarsXLogInit();
                }
            }
        }
        return INSTANCE;
    }

    /**
     * 设置日志打开状态，如果日志需要写入不同的文件需要先设置关闭。
     *
     * @param xlogOpenStatus true:已经打开，false:关闭
     */
    public void setXlogOpenStatus(final boolean xlogOpenStatus) {
        this.xlogOpenStatus = xlogOpenStatus;
    }

    /**
     * 设置日志文件加密的公钥
     *
     * @param pubkey 公钥字符串
     */
    public void setPUBKEY(final String pubkey) {
        PUB_KEY = pubkey;
    }

    /**
     * 设置日志文件的前缀
     *
     * @param prefix 日志文件前缀
     */
    public void setLogFileNamePrefix(final String prefix) {
        LogManager.INSTANCE.setPrefix(prefix);
    }

    /**
     * 获取日志文件前缀
     *
     * @return 日志文件前缀
     */
    public String getLogFileNamePrefix() {
        return LogManager.INSTANCE.getPrefix();
    }

    /**
     * 设置控制台是否打印
     *
     * @param consoleLogOpen true:打印，false:不打印
     */
    public void setConsoleLogOpen(final boolean consoleLogOpen) {
        LogManager.INSTANCE.setConsoleLogOpen(consoleLogOpen);
    }

    /**
     * 是否是调试模式
     * @return 是否是调试模式
     */
    public boolean isDebugStatus() {
        return LogManager.INSTANCE.getDebugStatus();
    }

    /**
     * 设置是否是调试模式，调试模式会把所有日志写入文件，不是调试模式，只会写入大于INFO级别的日志
     *
     * @param debugStatus true:是，false:否
     */
    public void setDebugStatus(final boolean debugStatus) {
        LogManager.INSTANCE.setDebugStatus(debugStatus);
    }

    /**
     * 设置文件保存天数
     * @param logFileSaveDays 0：表示默认10天，其它表示其它天数，最小不能小于1
     */
    public void setLogFileSaveDays(final long logFileSaveDays) {
        LogManager.INSTANCE.setLogFileSaveDays(logFileSaveDays * 24 * 60 * 60 * 1000);
    }

    /**
     * 获取文件缓存天数
     * @return 缓存天数
     */
    public int getLogFileSaveDays() {
        return (int) (LogManager.INSTANCE.getLogFileSaveDays() / 24 / 60 / 60 / 1000);
    }

    /**
     * 获取单个文件最大字节，0：表示不分割
     * @return 文件最大字节
     */
    public long getLogFileMaxSize() {
        return LogManager.INSTANCE.getLogFileMaxSize();
    }

    /**
     * 设置单个文件最大字节，设置后文件会分包。（log_20200710.xlog，log_20200710_1.xlog，log_20200710_2.xlog)
     * @param logFileMaxSize 最大字节数，单位是字节
     */
    public void setLogFileMaxSize(long logFileMaxSize) {
        LogManager.INSTANCE.setLogFileMaxSize(logFileMaxSize);
    }

    /**
     * 打开日志使日志数据能够写入文件和在控制台打印（内部根据 {@link #xlogOpenStatus} 的状态来判断调用是否有效）,
     * 文件默认保存在/sdcard/android/{packageName}/XLog如果前者不可以就保存在context.getFilesDir() + "/XLog"中
     *
     * @param context 上下文对象
     */
    public void openXlog(final Context context) {
        LogManager.initLog(context);
        LogUtil.xlogInitComplete = true;
    }
}
