package models

import (
	"fmt"
	orm "go-admin/common/global"
	"gorm.io/gorm"
	"time"
)

const monthlyLimit = 1000 // 每月的短信限额为 1000

type SmsSummary struct {
	Model

	Year  int `json:"year"`  // 年
	Month int `json:"month"` // 月
	Used  int `json:"used"`  // 短信已发送数量
}

// GetSmsNumberRemaining 查询本月短信剩余数量
func GetSmsNumberRemaining() int {
	// 获取当前时间的年份和月份
	now := time.Now()
	year, month, _ := now.Date()

	nTotalUsed := struct {
		TotalUsed int `json:"total_used"`
	}{}

	// 查询当前年份和月份的短信发送总数
	if err := orm.Eloquent.Debug().Model(&SmsSummary{}).
		Where("year = ? AND month = ?", year, int(month)).
		Select("SUM(used) as total_used").
		Scan(&nTotalUsed).Error; err != nil {
		fmt.Println("SQL Error:", err) // 打印 SQL 错误信息
		return 0
	}

	// 获取每月短信限额
	nMonthlyLimit, err := GetSystemSmsConfig()
	if err != nil {
		nMonthlyLimit = monthlyLimit
	}

	remaining := nMonthlyLimit - nTotalUsed.TotalUsed

	return remaining
}

// UpdateSmsUsedCount 更新本月已使用短信数量
func UpdateSmsUsedCount(count int) error {
	// 获取当前时间的年份和月份
	now := time.Now()
	year, month, _ := now.Date()

	// 查询当前年份和月份的短信发送记录
	var smsSummary SmsSummary
	if err := orm.Eloquent.Where("year = ? AND month = ?", year, int(month)).First(&smsSummary).Error; err != nil {
		if err == gorm.ErrRecordNotFound {
			// 如果记录不存在，则创建新记录
			smsSummary = SmsSummary{
				Year:  year,
				Month: int(month),
				Used:  count, // 使用传入的 count 初始化已使用数量
			}
			if err := orm.Eloquent.Create(&smsSummary).Error; err != nil {
				return err
			}
		} else {
			return err
		}
	} else {
		// 如果记录存在，则更新已使用的短信数量
		smsSummary.Used += count
		if err := orm.Eloquent.Model(&smsSummary).Updates(&SmsSummary{Used: smsSummary.Used}).Error; err != nil {
			return err
		}
	}

	return nil
}
