package initialize

import (
	"fmt"

	"kra/internal/task"
	"kra/pkg/timer"

	"github.com/robfig/cron/v3"
	"gorm.io/gorm"
)

// TimerManager 定时任务管理器
type TimerManager struct {
	timer timer.Timer
	db    *gorm.DB
}

// NewTimerManager 创建定时任务管理器
func NewTimerManager(db *gorm.DB) *TimerManager {
	return &TimerManager{
		timer: timer.NewTimerTask(),
		db:    db,
	}
}

// Timer 获取定时器实例
func (m *TimerManager) Timer() timer.Timer {
	return m.timer
}

// Start 启动定时任务
func (m *TimerManager) Start() {
	go func() {
		var option []cron.Option
		option = append(option, cron.WithSeconds())

		// 清理DB定时任务
		_, err := m.timer.AddTaskByFunc("ClearDB", "@daily", func() {
			err := task.ClearTable(m.db)
			if err != nil {
				fmt.Println("timer error:", err)
			}
		}, "定时清理数据库【日志，黑名单】内容", option...)
		if err != nil {
			fmt.Println("add timer error:", err)
		}

		// 其他定时任务可以在这里添加
	}()
}

// Stop 停止定时任务
func (m *TimerManager) Stop() {
	if m.timer != nil {
		m.timer.Close()
	}
}

// AddTask 添加定时任务
func (m *TimerManager) AddTask(name, spec string, fn func(), desc string, options ...cron.Option) (cron.EntryID, error) {
	return m.timer.AddTaskByFunc(name, spec, fn, desc, options...)
}

// RemoveTask 移除定时任务
func (m *TimerManager) RemoveTask(name string) {
	m.timer.Clear(name)
}
