package redisdata

import (
	"encoding/json"
	"errors"
	"fmt"
	"oppmg/common/log"
	"oppmg/common/redis"
	"oppmg/protocol"
	"time"
)

func SetLoginToken(param protocol.LoginAuthToken, userid int64) error {
	client := redis.GetRedis()
	var (
		key     string
		value   []byte
		err     error
		exp     int64
		nowTime = time.Now().Unix()
	)
	exp = param.RefreshExpires - nowTime
	key = fmt.Sprintf("%s%s:%d", KEY_PREFIX, KEY_USER_TOKEN, userid)
	value, _ = json.Marshal(param)
	err = client.Set(key, string(value), time.Duration(exp)*time.Second).Err()
	return err
}

func GetLoginToken(userid int64) (protocol.LoginAuthToken, error) {
	client := redis.GetRedis()
	var (
		key    string
		value  string
		err    error
		result protocol.LoginAuthToken
	)
	key = fmt.Sprintf("%s%s:%d", KEY_PREFIX, KEY_USER_TOKEN, userid)
	value = client.Get(key).String()
	if len(value) == 0 {
		return result, errors.New("Token not found")
	}
	err = json.Unmarshal([]byte(value), &result)
	if err != nil {
		log.Error("Unmarshal redis value:%s err:%s", value, err)
		return result, err
	}
	return result, nil
}

func ExistLoginToken(userid int64) bool {
	client := redis.GetRedis()
	key := fmt.Sprintf("%s%s:%d", KEY_PREFIX, KEY_USER_TOKEN, userid)
	value := client.Exists(key).Val()
	if value > 0 {
		return true
	}
	return false
}

//消息发布订阅