package log

import (
	"fmt"
	"runtime"
	"strconv"
	"strings"
	"time"
)

var (
	DebugMode = true
)

const (
	colorReset  = "\033[0m"
	colorRed    = "\033[31m"
	colorGreen  = "\033[32m"
	colorYellow = "\033[33m"
	colorBlue   = "\033[34m"
)

func Debug(format string, args ...interface{}) {
	if DebugMode {
		log("DEBUG", colorBlue, format, args...)
	}
}

func Info(format string, args ...interface{}) {
	log("INFO", colorGreen, format, args...)
}

func Warning(format string, args ...interface{}) {
	log("WARNING", colorYellow, format, args...)
}

func Error(format string, args ...interface{}) {
	log("ERROR", colorRed, format, args...)
}

func log(level string, color string, format string, args ...interface{}) {
	// 获取调用者信息（跳过2层调用栈）
	_, file, line, _ := runtime.Caller(2)
	// fmt.Println("file is ", file)

	s := strings.Split(file, "WddSuperAgent")[1]
	callerInfo := strings.TrimLeft(s, "/") + " "
	callerInfo += strconv.FormatInt(int64(line), 10)

	timestamp := currentTimeString()
	message := fmt.Sprintf(format, args...)
	fmt.Printf("%s  %s%-7s%s [%s] %s\n",
		timestamp,
		color,
		level,
		colorReset,
		callerInfo,
		message)
}

func currentTimeString() string {

	// 加载东八区时区
	loc, _ := time.LoadLocation("Asia/Shanghai")

	// 获取当前时间并转换为东八区时间
	now := time.Now().In(loc)
	// 格式化为 "2006-01-02 15:04:05" 的布局
	formattedTime := now.Format(time.DateTime)
	return formattedTime
}
