package com.hgsoft.log

import android.content.Context
import android.util.Log
import com.safframework.log.LogLevel
import com.safframework.log.configL
import com.safframework.log.converter.gson.GsonConverter
import com.safframework.log.printer.FilePrinter
import com.safframework.log.printer.LogcatPrinter
import com.safframework.log.printer.file.FileBuilder
import com.safframework.log.printer.file.clean.FileLastModifiedCleanStrategy
import com.safframework.log.printer.file.name.DateWithHourFileNameGenerator
import java.io.File

/**
 *
 * <p>用途：</p>
 *
 * @author  yinxueqin@rd.hgits.cn
 * 创建时间: 2022/7/19 14:39
 * @author  更新者：
 * 更新时间:
 * 更新说明：
 * @since   1.0
 *
 */
object LogManager {

    //设置日志文件的前缀
    var prefix = "log"

    //日志是否控制台打印
    var consoleLogOpen = false

    // 设置是否是调试模式，调试模式会把所有日志写入文件，不是调试模式，只会写入大于INFO级别的日志
    var debugStatus = false

    //文件保存天数，这个保存天数根据文件创建属性决定。最小1天，默认10天
    var logFileSaveDays = 24 * 60 * 60 * 1000 * 10L

    //单个文件最大字节 0：表示不分割 单位字节
    var logFileMaxSize: Long = 0


    private fun filePrinter(context: Context): FilePrinter {
        val externalFileDir: File? = context.getExternalFilesDir("XLog")
        val logPath = if (externalFileDir != null) {
            externalFileDir.absolutePath
        } else {
             "${context.filesDir}/XLog"
        }
        return FileBuilder().folderPath(logPath).fileNameGenerator(MTAFileNameGenerator(prefix, logFileMaxSize)).cleanStrategy(
            FileLastModifiedCleanStrategy(logFileSaveDays)
        ).formatter(CustomFormatter).build()
    }

    @JvmStatic
    fun initLog(context: Context) {
        configL {
            logLevel = if (debugStatus) {
                LogLevel.DEBUG
            } else {
                LogLevel.INFO
            }
            converter = GsonConverter()
            displayThreadInfo = false
            displayClassInfo = false
        }.apply {
            printers().clear()
            addPrinter(filePrinter(context))
            if (consoleLogOpen) {
                addPrinter(LogcatPrinter())
            }
        }

    }
}