package com.grkj.iscs_mc.util.log

import android.content.Context
import android.os.Handler
import android.os.HandlerThread
import com.orhanobut.logger.*

/**
 * 功能描述：打印日志到本地
 */
class LogHandle : ILog {
    override fun init(mContext: Context,logPath: String) {
        val ht = HandlerThread("AndroidFileLogger.$logPath")
        ht.start()
        try {
            //单个文件最大限制5M 超过则创建新文件记录日志
            val maxFileSize = 5 * 1024 * 1024
            //日志打印线程
            val cxHandle: Handler = LogWriteHandler(ht.looper, logPath, maxFileSize)
            //创建缓存策略
            val diskLogStrategy: LogStrategy = LogDiskStrategy(cxHandle)
            //构建格式策略
//            val strategy: FormatStrategy = CsvFormatStrategy.newBuilder().logStrategy(diskLogStrategy).build()
            val strategy: FormatStrategy =
                MyCsvFormatStrategy.newBuilder().logStrategy(diskLogStrategy).build(mContext)

//            val formatStrategy = PrettyFormatStrategy.newBuilder()
//                    .showThreadInfo(true)     // （可选）是否显示线程信息。 默认值为true
//                    .methodCount(5)            //（可选）要显示的方法行数。 默认2
//                    .methodOffset(0)           //（可选）设置调用堆栈的函数偏移值，0的话则从打印该Log的函数开始输出堆栈信息，默认是0
//                    .logStrategy(diskLogStrategy)  //（可选）更改要打印的日志策略。 默认LogCat
//                    .tag("Logger") //（可选）TAG内容. 默认是 PRETTY_LOGGER
//                    .build();

            //创建适配器
            val adapter = DiskLogAdapter(strategy)
            //设置日志适配器
            Logger.addLogAdapter(adapter)
        } catch (e: Exception) {
            e.printStackTrace()
            ht.quit() //退出
        }
    }

    override fun d(tag: String?, log: String?) {
        Logger.t(tag).d(log)
    }

    override fun i(tag: String?, log: String?) {
        Logger.t(tag).d(log)
    }

    override fun w(tag: String?, log: String?) {
        Logger.t(tag).d(log)
    }

    override fun e(tag: String?, log: String?) {
        Logger.t(tag).e(log!!)
    }

    override fun e(tag: String?, throwable: Throwable) {
        Logger.t(tag).e(throwable, "App crash")
    }
}