// package teen

// import (
// 	"sync"
// 	"time"
// )

// // TimerEvent 定时事件结构
// type TimerEvent struct {
// 	ID        string      // 事件ID
// 	Timestamp int64       // 触发时间
// 	Callback  func()      // 回调函数
// 	Timer     *time.Timer // 定时器
// }

// // TimerManager 定时管理器
// type TimerManager struct {
// 	events map[string]*TimerEvent
// 	mutex  sync.RWMutex
// }

// // NewTimerManager 创建定时管理器
// func NewTimerManager() *TimerManager {
// 	return &TimerManager{
// 		events: make(map[string]*TimerEvent),
// 	}
// }

// // AddEvent 添加定时事件
// func (tm *TimerManager) AddEvent(id string, delay time.Duration, callback func()) {
// 	tm.mutex.Lock()
// 	defer tm.mutex.Unlock()

// 	// 先移除已有事件
// 	if oldEvent, exists := tm.events[id]; exists {
// 		oldEvent.Timer.Stop()
// 		delete(tm.events, id)
// 	}

// 	// 创建新定时器
// 	timer := time.NewTimer(delay)
// 	event := &TimerEvent{
// 		ID:        id,
// 		Timestamp: time.Now().Add(delay).Unix(),
// 		Callback:  callback,
// 		Timer:     timer,
// 	}

// 	tm.events[id] = event

// 	// 启动协程等待触发
// 	go func() {
// 		<-timer.C
// 		tm.TriggerEvent(id)
// 	}()
// }

// // TriggerEvent 立即触发事件
// func (tm *TimerManager) TriggerEvent(id string) {
// 	tm.mutex.Lock()
// 	defer tm.mutex.Unlock()
// 	tm.triggerEvent(id)
// }

// // 内部触发事件方法（已加锁）
// func (tm *TimerManager) triggerEvent(id string) {
// 	if event, exists := tm.events[id]; exists {
// 		event.Timer.Stop()
// 		event.Callback()
// 		delete(tm.events, id)
// 	}
// }

// // RemoveEvent 移除事件
// func (tm *TimerManager) RemoveEvent(id string) {
// 	tm.mutex.Lock()
// 	defer tm.mutex.Unlock()

// 	if event, exists := tm.events[id]; exists {
// 		if !event.Timer.Stop() {
// 			select {
// 			case <-event.Timer.C:
// 			default:
// 			}
// 		}
// 		delete(tm.events, id)
// 	}
// }

// // ResetEvent 重新设置定时器
// func (tm *TimerManager) ResetEvent(id string, delay time.Duration) {
// 	tm.mutex.Lock()
// 	defer tm.mutex.Unlock()

// 	if event, exists := tm.events[id]; exists {
// 		if !event.Timer.Stop() {
// 			select {
// 			case <-event.Timer.C:
// 			default:
// 			}
// 		}
// 		event.Timer.Reset(delay)
// 		event.Timestamp = time.Now().Add(delay).Unix()
// 	}
// }

package teen

import (
	"sync"
	"time"
)

// TimerEvent 定时事件结构
type TimerEvent struct {
	ID        string      // 事件ID
	Timestamp int64       // 触发时间
	Callback  func()      // 回调函数
	Timer     *time.Timer // 定时器
}

// TimerManager 定时管理器
type TimerManager struct {
	events map[string]*TimerEvent
	mutex  sync.RWMutex
}

// NewTimerManager 创建定时管理器
func NewTimerManager() *TimerManager {
	return &TimerManager{
		events: make(map[string]*TimerEvent),
	}
}

// AddEvent 添加定时事件
func (tm *TimerManager) AddEvent(id string, delay time.Duration, callback func()) {
	tm.mutex.Lock()
	defer tm.mutex.Unlock()

	// 创建定时器
	timer := time.NewTimer(delay)
	event := &TimerEvent{
		ID:        id,
		Timestamp: time.Now().Add(delay).Unix(),
		Callback:  callback,
		Timer:     timer,
	}

	// 保存事件
	tm.events[id] = event

	// 启动协程等待触发
	go func() {
		<-timer.C
		tm.triggerEvent(id)
	}()
}

// TriggerEvent 立即触发事件
func (tm *TimerManager) TriggerEvent(id string) {
	tm.mutex.Lock()
	defer tm.mutex.Unlock()
	tm.triggerEvent(id)
}

// 内部触发事件方法
func (tm *TimerManager) triggerEvent(id string) {
	if event, exists := tm.events[id]; exists {
		// 停止定时器
		event.Timer.Stop()
		// 执行回调
		event.Callback()
		// 删除事件
		delete(tm.events, id)
	}
}

// RemoveEvent 移除事件
func (tm *TimerManager) RemoveEvent(id string) {
	tm.mutex.Lock()
	defer tm.mutex.Unlock()

	if event, exists := tm.events[id]; exists {
		event.Timer.Stop()
		delete(tm.events, id)
	}
}
