package config

import (
	"encoding/json"
	"gadmin/internal/gorm/model"
	"gadmin/internal/gorm/query"
	"github.com/sirupsen/logrus"
	"gorm.io/gorm/clause"
	"time"
)

func GetCache(key string) string {
	var models *model.Cache
	DB.Where("`key` = ?", key).First(&models)
	if models == nil {
		return ""
	}

	if models.ExpiAt > 0 && models.ExpiAt < time.Now().Unix() {
		return ""
	}
	return models.Value
}

func GetCacheScan(key string, v any) (err error) {
	data := GetCache(key)
	if data == "" {
		return
	}
	return json.Unmarshal([]byte(data), v)
}

func SetCache(key string, value interface{}, ttl ...int64) {
	marshal, err := json.Marshal(value)
	if err != nil {
		logrus.Warnf("SetCache Marshal err:%+v, value:%+v", err, value)
		return
	}

	var models = new(model.Cache)
	models.Key = key
	models.Value = string(marshal)
	if len(ttl) > 0 && ttl[0] > 0 {
		models.ExpiAt = ttl[0]
	}
	if err = query.Use(DB).Cache.Clauses(clause.OnConflict{UpdateAll: true}).Create(models); err != nil {
		logrus.Errorf("SetCache err: %v", err)
	}
}
