package logger

import (
	rotatelogs "github.com/lestrrat-go/file-rotatelogs"
	"os"
	"path/filepath"
	"time"

	log "github.com/sirupsen/logrus"
)

var globalLogger *log.Logger

// Initialize 初始化全局 Logger 实例。
func Initialize(logPath string) error {
	// 创建日志目录
	if err := os.MkdirAll(filepath.Dir(logPath), os.ModePerm); err != nil {
		return err
	}

	// 使用 rotatelogs 进行日志轮转
	writer, err := rotatelogs.New(
		logPath+".%Y%m%d.log",                     // 文件名模式
		rotatelogs.WithMaxAge(15*24*time.Hour),    // 最大保留时间3天
		rotatelogs.WithRotationTime(24*time.Hour), // 每天轮转一次
		rotatelogs.WithLinkName(logPath),          // 符号链接指向最新日志文件
		rotatelogs.WithClock(rotatelogs.Local),    // 使用本地时区
	)
	if err != nil {
		return err
	}

	// 设置日志格式为JSON
	formatter := &log.JSONFormatter{
		TimestampFormat: time.RFC3339,
	}

	// 创建一个新的 Logger 实例
	logger := log.New()
	logger.SetFormatter(formatter)
	logger.SetLevel(log.InfoLevel)
	logger.SetOutput(writer) // 设置输出到 rotatelogs 的 writer

	// 将全局变量设置为新创建的 Logger 实例
	globalLogger = logger

	return nil
}

// Get 获取全局 Logger 实例。
func Get() *log.Logger {
	if globalLogger == nil {
		panic("Logger not initialized")
	}
	return globalLogger
}