package rateLimit

import (
	"errors"
	"sun-panel/global"
)

const (
	ERROR_RATE_EXCEED_MINUTE = "minute exceed" // 分钟速率超出限制
	ERROR_RATE_EXCEED_HOUR   = "minute hour"   // 小时速率超出限制
)

// 获取用户套餐的速率 此处正常根据用户套餐设定获取-暂时写死
func GetUserPackageRate(userId uint) (minuteRate, hourRate int) {
	return 10, 200
}

func CheckRateLimit(userId uint) error {
	minuteRate, hourRate := GetUserPackageRate(userId)
	if minuteRate != 0 && minuteRate <= global.RateLimit.MinuteGet(userId) {
		return errors.New(ERROR_RATE_EXCEED_MINUTE)
	}

	if hourRate != 0 && hourRate <= global.RateLimit.HourGet(userId) {
		return errors.New(ERROR_RATE_EXCEED_HOUR)
	}

	return nil
}

// 速率+1次 同时增加小时和分钟的次数
func AddOnceRate(userId uint) error {
	global.RateLimit.MinuteAddOnce(userId)
	global.RateLimit.HourAddOnce(userId)
	return nil
}