package wxuser

import (
	"common/connection"
)

func init() {
	//注册数据库
	connection.RegisterDBModel(&WxUserInfo{})
	connection.RegisterDBModel(&RecordLoginOfWxUser{})
	connection.RegisterDBModel(&RecordWatchADOfWxUser{})
	connection.RegisterDBModel(&WxUserSeverInfo{})
	connection.RegisterDBModel(&WxUserSeverList{})
}

type WechatTokens struct {
	Errcode      int32  `json:"errcode"`
	Errmsg       string `json:"errmsg"`
	AccessToken  string `json:"access_token"`
	RefreshToken string `json:"refresh_token"`
	ExpiresIn    int64  `json:"expires_in"`
	OpenId       string `json:"openid"`
	UnionId      string `json:"unionid"`
}

type WxUserInfo struct {
	Nickname   string `gorm:"column:nickname;comment:昵称" json:"nickname"`
	Sex        string `gorm:"column:sex;comment:性别" json:"sex"`
	Language   int64  `gorm:"column:language;comment:语言" json:"language"`
	city       string `gorm:"column:city;comment:城市" json:"city"`
	province   string `gorm:"column:province;comment:省份" json:"province"`
	country    string `gorm:"column:country;comment:国籍" json:"country"`
	headimgurl string `gorm:"column:headimgurl;comment:头像" json:"headimgurl"`
	OpenId     string `gorm:"column:openId;comment:openId;primaryKey" json:"openid"`
	UnionId    string `gorm:"column:unionId;comment:unionId" json:"unionid"`
}

// 同一个玩家在不同的区服Uid是不同的
type WxUserSeverInfo struct {
	ID      int64  `gorm:"column:id;primary_key;comment:自增索引;autoIncrementIncrement" json:"id"`
	OpenId  string `gorm:"column:openId;comment:openId" json:"openId"`
	SeverId int32  `gorm:"column:severId;comment:区服Id" json:"severId"`
	Uid     int64  `gorm:"column:uid;comment:用户唯一Id" json:"uid"`
}

// 记录当前为止的开服数
type WxUserSeverList struct {
	ID      int64 `gorm:"column:id;primary_key;comment:自增索引;autoIncrementIncrement" json:"id"`
	SeverId int32 `gorm:"column:severId;comment:区服Id" json:"severId"`
}

// 登录相关的记录
type RecordLoginOfWxUser struct {
	ID           int64 `gorm:"column:id;primary_key;comment:自增索引;autoIncrementIncrement" json:"id"`
	Uid          int64 `gorm:"column:uid;comment:用户唯一Id" json:"uid"`
	SeverId      int32 `gorm:"column:severId;comment:区服Id" json:"severId"`
	RecordDate   int64 `gorm:"column:recorddate;comment:记录日期" json:"recorddate"` //只记录当天0点的时间戳，方便查询某一日的数据
	LoginInTime  int64 `gorm:"column:loginintime;comment:登录时间" json:"loginintime"`
	LoginOutTime int64 `gorm:"column:loginouttime;comment:登出时间" json:"loginouttime"`
	PlayTimes    int64 `gorm:"column:playtimes;comment:游玩时长" json:"playtimes"`
	//用于统计当日的总上线人数 0=否，1=是
	IsFirstLogin int32 `gorm:"column:isfirstlogin;comment:是否首次登录" json:"isfirstlogin"`
}

// 看广告相关记录
// 记录日期便于按天统计
type RecordWatchADOfWxUser struct {
	ID         int64 `gorm:"column:id;primary_key;comment:自增索引;autoIncrementIncrement" json:"id"`
	RecordDate int64 `gorm:"column:recorddate;comment:记录日期" json:"recorddate"` //只记录当天0点的时间戳，方便查询某一日的数据
	Uid        int64 `gorm:"column:uid;comment:用户唯一Id" json:"uid"`
	SeverId    int32 `gorm:"column:severId;comment:区服Id" json:"severId"`
	WatchADNum int32 `gorm:"column:watchadnum;comment:看广告次数" json:"watchadnum"`
}

func (WxUserInfo) TableName() string {
	return "wxuserinfo"
}

func (RecordLoginOfWxUser) TableName() string {
	return "recordloginofwxuser"
}

func (RecordWatchADOfWxUser) TableName() string {
	return "recordwatchadofwxuser"
}

func (WxUserSeverInfo) TableName() string {
	return "wxuserseverinfo"
}

func (WxUserSeverList) TableName() string {
	return "wxuserseverlist"
}
