package param

import (
	"github.com/mhaya/game/game_cluster/internal/data"
)

type LoginReq struct {
	Pid        int    `json:"pid"`
	OpenID     string `json:"openid"`
	Platform   string `json:"platform"`
	Channel    string `json:"channel"`
	parentName string `json:"parentName"`
	NickName   string `json:"nickName"`
	Sign       string `json:"sign"`
	IP         string `json:"ip"`
}

type PageReq struct {
	Page int `json:"Page"`
}

type LoginResp struct {
	UserName   string `json:"userName" bson:"userName"`
	OpenId     string `json:"openId" bson:"openId"`
	TargetPath string `json:"targetPath" bson:"-"`
}

type GuideReq struct {
	Close       int   `json:"close"`
	CloseReward int   `json:"closeReward"`
	Status      int32 `json:"status"`
	IsVip       int32 `json:"isVip"`
}

type GuideResp struct {
	Guide         int                      `json:"guide"`
	FirstReward   int                      `json:"firstReward"`
	Rolled        int                      `json:"rolled"`
	FollowChannel int32                    `json:"followChannel"`
	AddItem       map[int]*data.ItemReward `json:"addItem"`
	SubItem       map[int]*data.ItemReward `json:"subItem"`
}

type RollReq struct {
	Multi int `json:"multi"`
}

type RollResp struct {
	ChangeData
	Multi int    `json:"multi"`
	Xcode string `json:"xcode"`
	Rolls []Roll `json:"rolls"`
}

type DrawResp struct {
	ChangeData
	Multi int           `json:"multi"`
	Draws []*DrawConfig `json:"draws"`
}

type GetRankReq struct {
	Id int `json:"id"` //排行榜ID
	Tp int `json:"tp"` //是否是上一期榜单1是0否
}

type GetRankResp struct {
	Ranks  map[int]*PlayerBase `json:"ranks"`
	Self   *PlayerBase         `json:"self"`
	Reward []data.ItemReward   `json:"reward"`
}

type GetCountryRankResp struct {
	Ranks map[int]*CountryBase `json:"ranks"`
	Self  *CountryBase         `json:"self"`
}

type DrawConfig struct {
	ID     int `json:"id"`
	ItemID int `json:"itemId"`
	Num    int `json:"num"`
}

type WeeklyRankConfigResp struct {
	WeeklyTotalReward    []data.ItemReward `json:"weeklyTotalReward"`
	StartTime            string            `json:"startTime"`
	EndTime              string            `json:"endTime"`
	InviteReward         []data.ItemReward `json:"inviteReward"`
	VipInviteReward      []data.ItemReward `json:"vipInviteReward"`
	InviteNum            int               `json:"inviteNum"`
	InviteTotalReward    []data.ItemReward `json:"inviteTotalReward"`
	VipInviteNum         int               `json:"vipInviteNum"`
	VipInviteTotalReward []data.ItemReward `json:"vipInviteTotalReward"`
}

type GetRankRewardReq struct {
	Id int `json:"id"` //排行榜ID
}

type DrawReq struct {
	Tp int `json:"tp"` //1单抽2 10连抽
}

type ShareReq struct {
	Tp int `json:"tp"` //1 每日抽奖分享
}

type JumpReq struct {
	Tp int `json:"tp"` //1	关注推特 2	加入TG频道 3	关注Yutube账号 4	加入DC频道
}

type JumpResp struct {
	Dirty bool `json:"dirty"`
}

type SaveXReq struct {
	Twitter string `json:"twitter"`
}

type SaveTonWallReq struct {
	TonWall  string `json:"tonWall"`
	PassWord string `json:"password"`
}

type InviteReq struct {
	ParentName string `json:"parentName"`
	Sign       string `json:"sign"`
}

type GetLevelResp struct {
	NowLevel   int `json:"nowLevel"`
	NextLevel  int `json:"nextLevel"`
	NextRoll   int `json:"nextRoll"`
	NextInvite int `json:"nextInvite"`
	NowRoll    int `json:"nowRoll"`
	NowInvite  int `json:"nowInvite"`
}

type ClaimReq struct {
	Tp       int    `json:"tp"`       //类型 1榜单奖励 2邀请裂变奖励 3首次奖励 4 邀请节点奖励
	Id       int    `json:"id"`       //奖励类型ID  邀请奖励传0
	UserName string `json:"userName"` // 邀请裂变贡献人
}

type CashOutReq struct {
	Tp       int     `json:"tp"`
	Amount   float64 `json:"amount"`
	PassWord string  `json:"passWord"`
}

type PlayerBase struct {
	UserName      string            `json:"userName"`
	OpenId        string            `json:"openId"`
	UserNameMaybe string            `json:"userNameMaybe"`
	NickName      string            `json:"nickName"`
	IsLeader      int               `json:"-"`
	Rank          int               `json:"rank"`
	Score         int               `json:"score"`
	Avatar        string            `json:"avatar"`
	IsClaim       int               `json:"isClaim"`
	Reward        []data.ItemReward `json:"reward"`
}

type CountryBase struct {
	Country string `json:"country"`
	Score   int64  `json:"score"`
	Rank    int    `json:"rank"`
	Icon    string `json:"icon"`
}

type RollOnce struct {
	IsLevelUp   bool `json:"isLevelUp"`
	IsDailyTask bool `json:"isDaily"`
	Roll
}

type ChangeData struct {
	IsLevelUp     bool                     `json:"isLevelUp"`
	IsDailyTask   bool                     `json:"isDaily"`
	IsAchieveTask bool                     `json:"isAchieveTask"`
	AddItem       map[int]*data.ItemReward `json:"addItem"`
	SubItem       map[int]*data.ItemReward `json:"subItem"`
	CurGold       int                      `json:"curGold"`
	NodeAddItem   map[int]*data.ItemReward `json:"nodeAddItem"`
}

type Draw struct {
	ID     int               `json:"id"`
	CurID  int               `json:"-"`
	Reward []data.ItemReward `json:"reward"`
}

type Roll struct {
	Score    int           `json:"score"`
	RollType int           `json:"rollType"`
	Rand     map[int]int32 `json:"rand"`
}

type SetPwdReq struct {
	Mail            string `json:"email"  validate:"required"`
	PassWord        string `json:"password" validate:"required"`
	ConfirmPassWord string `json:"confirmPassword" validate:"required"`
}

type InviteRatioClaim struct {
	UserName string `json:"userName"`
	Avatar   string `json:"avatar"`
	ClaimNum int64  `json:"claimNum"`
	IsClaim  int    `json:"isClaim"`
	NickName string `json:"nickName"`
}

type InviteRatioResp struct {
	Ratio       float64            `json:"ratio"`
	ClaimSlice  []InviteRatioClaim `json:"claimSlice"`
	TotalAmount int64              `json:"totalAmount"`
}

type UnitTestData struct {
	Param1 string `json:"param1"`
	Param2 string `json:"param2"`
	Param3 string `json:"param3"`
}

type ItemRecordReq struct {
	ItemBaseType int `json:"itemBaseType"`
	ItemId       int `json:"itemId"`
}

type ItemRecord struct {
	DataTime int64
	ItemNum  int64
}

type ItemRecordResp struct {
	TotalIncome int64        `json:"totalIncome"`
	ItemRecords []ItemRecord `json:"itemRecords"`
}
