package mod

import (
	"../nt"
	"../utils"
	"strconv"
)

////////////////////////////////////// 7 天签到
func UpdateCheckinStatus(guid uint64, status string) error {
	_, err := nt.Rdb.HSet(KHCheckin7, strconv.FormatUint(guid, 10), status).Result()
	return err
}

func GetUserCheckinStatus(guid uint64) (string, error) {
	s, err := SHGet(KHCheckin7, strconv.FormatUint(guid, 10))
	return s, err
}

// ////////////////////////////////////// 30 d checkin
func UpdateCheckin30Status(guid uint64, status string) error {
	_, err := nt.Rdb.HSet(KHCheckin30, strconv.FormatUint(guid, 10), status).Result()
	return err
}

func GetUserCheckin30Status(guid uint64) (string, error) {
	return SHGet(KHCheckin30, strconv.FormatUint(guid, 10))
}

/////////////////////////////////////// 救济金
// 增加 guid 的领取次数
func UpdateUserAlms(guid uint64) error {
	_, err := nt.Rdb.HIncrBy(KHAlms, strconv.FormatUint(guid, 10), 1).Result()
	return err
}

// 获取 guid 领取次数
func GetUserAlms(guid uint64) (int64, error) {
	val, err := SHGet(KHAlms, strconv.FormatUint(guid, 10))
	if err != nil {
		return 0, err
	}
	return utils.StrToInt64(val)
}

// 删除 alms 记录
func RemAlms() error {
	_, err := nt.Rdb.Del(KHAlms).Result()
	return err
}

///////////////////////////  未读消息
func UpdateUnreadCS(fields map[string]interface{}) error {
	_, err := nt.Rdb.HMSet(KHUnreadCS, fields).Result()
	return err
}

func GetUnreadCS(guid uint64) (int32, error) {
	s, err := SHGet(KHUnreadCS, strconv.FormatUint(guid, 10))
	if err != nil {
		return 0, err
	}
	v, err := utils.StrToInt64(s)
	if nil != err {
		return 0, err
	}
	return int32(v), nil
}

func RemUnreadCS(guid uint64) error {
	_, err := nt.Rdb.HDel(KHUnreadCS, strconv.FormatUint(guid, 10)).Result()
	return err
}

//////////////////////////// 转运转盘
func UpdateTurntable(guid uint64, jn string) error {
	_, err := nt.Rdb.HSet(KHTurntable, strconv.FormatUint(guid, 10), jn).Result()
	return err
}

func GetTurntable(guid uint64) (string, error) {
	return SHGet(KHTurntable, strconv.FormatUint(guid, 10))
}

///////////////////////////// 用户活跃
// 用户玩过至少一局游戏就被称为活跃用户,日统计
// 判断标准为用户进入/离开游戏。并产生金额变动。(也有进入了游戏金额不变动的情况)
// 否则需要拉取游戏记录，又有10min 延迟。
// 机制：必须进出过游戏，金币产生变动 或 在游戏中时间至少5min
/**
json: 格式 {
	"ts": 19284932,		// 最后一次进入或离开游戏时间
	"gameId": 10014,	// 如果不为0 表示目前在游戏中。
	"balance": 10000, 	// 在游戏中表示带入金币, 在大厅中表示带出金币
	"times": 5, 		// 当日进入游戏次数
	"history":[
		{
			"gameId": 10048,
			"delta": -20
		}
	], 		// 当日游戏历史
}
 */
func UpdateUserActive(guid uint64, js string) error {
	_, err := nt.Rdb.HSet(KHUserActive, strconv.FormatUint(guid, 10), js).Result()
	return err
}

func GetUserActive(guid uint64) (string, error) {
	return SHGet(KHUserActive, strconv.FormatUint(guid, 10))
}
///////////////////////////// alipay -- guid
func IfAlipayInUse(alipay string) bool {
	sguid, err := SHGet(KHMapAlipayGuid, alipay)
	return err == nil && len(sguid) > 0
}

func UpdateAlipayGuid(alipay string, guid uint64) error {
	_, err := nt.Rdb.HSet(KHMapAlipayGuid, alipay, guid).Result()
	return err
}

func RemAlipayBind(alipay string) error {
	_, err := nt.Rdb.HDel(KHMapAlipayGuid, alipay).Result()
	return err
}