package redisdata

import (
	"encoding/json"
	"oppmg/common/log"
	"oppmg/common/redis"
	"oppmg/protocol"
	"strings"
)

func SetLoginToken(param protocol.LoginAuthToken, userid int64, companyid int64) error {
	client := redis.GetRedis()
	var (
		key   string
		value []byte
		err   error
	)
	data := RedisLoginToken{
		AccessToken:    param.AccessToken,
		CurrentCompany: companyid,
	}
	value, _ = json.Marshal(data)

	key = GetKeyLoginToken(userid, companyid)
	err = client.Set(key, string(value), LOGIN_TOKEN_EXP).Err()
	return err
}

func GetLoginToken(userid int64, companyid int64) (RedisLoginToken, error) {
	client := redis.GetRedis()
	var (
		key    string
		value  string
		err    error
		result RedisLoginToken
	)
	key = GetKeyLoginToken(userid, companyid)
	value, err = client.Get(key).Result()
	if err != nil {
		return result, err
	}
	value = strings.TrimSpace(value)
	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, companyid int64) bool {
	client := redis.GetRedis()
	key := GetKeyLoginToken(userid, companyid)
	value := client.Exists(key).Val()
	if value > 0 {
		return true
	}
	return false
}

func DeleteLoginToken(userid int64, companyid int64) error {
	client := redis.GetRedis()
	key := GetKeyLoginToken(userid, companyid)
	err := client.Del(key).Err()
	return err
}

//   刷新token 的有效期
func RefreshLoginTokenExpires(userid int64, companyid int64) error {
	client := redis.GetRedis()
	key := GetKeyLoginToken(userid, companyid)
	result, err := client.Exists(key).Result()
	if err != nil {
		return err
	}
	if result == 0 {
		return nil
	}
	_, err = client.Expire(key, LOGIN_TOKEN_EXP).Result()
	if err != nil {
		return err
	}
	return nil
}

func SetCaptchAuth(phone string, captchAuth string) error {
	key := GetKeyCaptchAuth(phone)
	client := redis.GetRedis()
	err := client.Set(key, captchAuth, CAPTCHA_AUTH_EXP).Err()
	return err
}

func GetCaptchAuth(phone string) (string, error) {
	key := GetKeyCaptchAuth(phone)
	client := redis.GetRedis()
	r, err := client.Get(key).Result()
	return r, err
}