package model

// 章节类型
// 多人 多人主线 单人主线 PVP
const (
	LevelTypeCooperation = 1
	LevelTypeMainMulti   = 2
	LevelTypeMainSingle  = 3
	LevelTypePVP         = 4
)

func CombineLevelId(typ int64, chapter int64, level int64) int64 {
	id := typ*100000 + chapter*100 + level
	return id
}

// type LevelListItem struct {
// 关卡列表-LevelList exported from 关卡配置.xlsx
type LevelListItem struct {
	Uid          int64     `json:"Uid"`          // 关卡编号  每个关卡都有一个唯一编号
	Type         int64     `json:"Type"`         // 关卡类型  1：多人 2：多人主线 3：单人主线 4：PVP
	Name         string    `json:"Name"`         // 关卡名字
	Chapter      int64     `json:"Chapter"`      // 所属大章
	Level        int64     `json:"Level"`        // 本章排序 （小章节ID）
	Unlock       [][]int64 `json:"Unlock"`       // 解锁条件 [类型，数值]  1--玩家等级 2--通关前置章节
	WaveNum      int64     `json:"WaveNum"`      // 关卡总波数
	Cost         [][]int64 `json:"Cost"`         // 关卡消耗
	IconRes      string    `json:"IconRes"`      // 入口怪物资源
	Map          string    `json:"Map"`          // 调用场景
	MapGrid      []int64   `json:"MapGrid"`      // 地图网格 【横格子数，竖格子数】 服务端用来计算中心点，水晶系统相关
	CorePos      [][]int64 `json:"CorePos"`      // 要塞所在格子坐标 最左上角开始算 【【格子x坐标，格子y坐标】】
	RepelPos     [][]int64 `json:"RepelPos"`     // 水晶不能生成格子 最左上角开始算 【【格子x坐标，格子y坐标】】
	WavePlan     int64     `json:"WavePlan"`     // 每关波数组号
	ConnectUp    int64     `json:"ConnectUp"`    // 连接上限提升组
	Restore      float64   `json:"Restore"`      // 要塞恢复 基础治疗力比例 小数
	RestoreUse   []int64   `json:"RestoreUse"`   // 要塞恢复消耗 【基础消耗，每次增加】 消耗幸运币
	CrystalGroup []int64   `json:"CrystalGroup"` // 小水晶出现逻辑  【基础水晶数，水晶随机组】
	Time         int64     `json:"Time"`         // 准备时间 秒
	PosPlan      int64     `json:"PosPlan"`      // 坐标点组号
	RandomPlan   int64     `json:"RandomPlan"`   // 刷新规则策略  读取刷新策略表组号
	InitGold     int64     `json:"InitGold"`     // 初始银币数  整数
	InitUse      int64     `json:"InitUse"`      // 初始刷新消耗  整数
	UseUp        int64     `json:"UseUp"`        // 刷新消耗成长  整数
	ResetTime    int64     `json:"ResetTime"`    // 重置时间 /天 -1：不会重置
	CycleAward   int64     `json:"CycleAward"`   // 合作关卡周期奖励  重置时间达到时将重置该部分奖励
	FirstAward   int64     `json:"FirstAward"`   // 首通奖励 掉落组ID（0代表无）
	Award        int64     `json:"Award"`        // 掉落奖励组  波数掉落组合-RewardMix 中的ID
	Preview      [][]int64 `json:"Preview"`      // 奖励预览
	BossDet      []int64   `json:"BossDet"`      // 关卡BOSS详情
	MonsterDet   []int64   `json:"MonsterDet"`   // 关卡小怪详情
} // package model

// 关卡每波组合-LevelWavePlan exported from 关卡配置.xlsx
type LevelWavePlan struct {
	Uid            int64     `json:"Uid"`            // 唯一编号
	GroupId        int64     `json:"GroupId"`        // 所属组号
	Wave           int64     `json:"Wave"`           // 波数编号
	Time           int64     `json:"Time"`           // 单波总时间
	MonsterGroupId int64     `json:"MonsterGroupId"` // 每波出怪策略组号
	Level          float64   `json:"Level"`          // 怪物成长等级
	Pen            int64     `json:"Pen"`            // 每波全局穿透
	Countdown      int64     `json:"Countdown"`      // 结束倒计时  普通：3秒 结尾：0秒
	Award          [][]int64 `json:"Award"`          // 提前结束奖励
} // package model

// 出怪策略组-LevelMonsterPlan exported from 关卡配置.xlsx
type LevelMonsterPlan struct {
	Uid        int64     `json:"Uid"`        // 唯一编号
	GroupId    int64     `json:"GroupId"`    // 策略组号
	Id         int64     `json:"Id"`         // 小编号
	MonsterUid int64     `json:"MonsterUid"` // 怪物ID
	Interval   int64     `json:"Interval"`   // 生成间隔时间  秒 可以小数值 生成下一个的间隔
	Delay      int64     `json:"Delay"`      // 延迟生成时间  秒 每波开头时的只针对第一只怪的延迟
	PosList    []int64   `json:"PosList"`    // 生成坐标点编号列表  对应出怪坐标点配置中的坐标点编号
	Award      [][]int64 `json:"Award"`      // 怪物死亡奖励货币  [[道具id，数量]]
} // package model

// 出怪坐标点-LevelPosPlan exported from 关卡配置.xlsx
type LevelPosPlan struct {
	Uid     int64 `json:"Uid"`     // 唯一ID
	GroupId int64 `json:"GroupId"` // 组号
	PosId   int64 `json:"PosId"`   // 坐标点编号
	Angle   int64 `json:"Angle"`   // 角度
	Range   int64 `json:"Range"`   // 离中心距离 像素数
} // package model

// 刷新策略组-LevelEnhancePlan exported from 关卡配置.xlsx
type LevelEnhancePlan struct {
	Uid     int64 `json:"Uid"`     // 唯一编号
	GroupId int64 `json:"GroupId"` // 组编号
	Level   int64 `json:"Level"`   // 等级
	Quality int64 `json:"Quality"` // 品质  1：1 2：2 3：3 4：4
	Weight  int64 `json:"Weight"`  // 出现权重
} // package model

// 连接上限提升-LevelConnectUp exported from 关卡配置.xlsx
type LevelConnectUp struct {
	Uid     int64 `json:"Uid"`     // 唯一编号
	GroupId int64 `json:"GroupId"` // 组编号
	Level   int64 `json:"Level"`   // 等级
	UpNum   int64 `json:"UpNum"`   // 提升数量
	Use     int64 `json:"Use"`     // 消耗幸运币
}

// 关卡进度奖励-ProgressReward exported from 关卡进度奖励.xlsx
// type ProgressReward struct {
// 	Uid         int64     `json:"Uid"`         // 关卡编号  每个关卡都有一个唯一编号
// 	WaveNum     int64     `json:"WaveNum"`     // 波数
// 	FirstReward [][]int64 `json:"FirstReward"` // 首通奖励列表 【【道具ID，数量】】
// 	CycleReward [][]int64 `json:"CycleReward"` // 循环奖励列表 【【道具ID，数量】】
// }

// 波数掉落组合-RewardMix exported from 掉落相关配置.xlsx
type RewardMix struct {
	Uid        int64     `json:"Uid"`        // 唯一ID
	GroupID    int64     `json:"GroupID"`    // 组号
	Inning     int64     `json:"Inning"`     // 波数
	FixedForm  int64     `json:"FixedForm"`  // 固定掉落组 固定掉落组号
	RandomForm [][]int64 `json:"RandomForm"` // 随机掉落组 【【随机掉落组号，随机次数】】
	SelectForm int64     `json:"SelectForm"` // 自选掉落组 自选掉落组号
}

// 固定掉落组-RewardFixed exported from 掉落相关配置.xlsx
type RewardFixed struct {
	GroupID int64 `json:"GroupID"` // 掉落组号
	Type    int64 `json:"Type"`    // 道具类型 1：普通道具 2：装备类 3；铭文类型 4；道具宝箱
	ItemID  int64 `json:"ItemID"`  // 道具ID
	Num     int64 `json:"Num"`     // 道具数量
} // package model

// 随机掉落组-RewardRandom exported from 掉落相关配置.xlsx
type RewardRandom struct {
	GroupID int64 `json:"GroupID"` // 掉落组号
	Type    int64 `json:"Type"`    // 道具类型 1：普通道具 2：装备类 3；铭文类型 4；道具宝箱
	ItemID  int64 `json:"ItemID"`  // 道具ID
	Num     int64 `json:"Num"`     // 道具数量
	Weight  int64 `json:"Weight"`  // 权重
} // package model

// 自选掉落组-SelectRandom exported from 掉落相关配置.xlsx
type SelectRandom struct {
	GroupID int64 `json:"GroupID"` // 掉落组号
	Type    int64 `json:"Type"`    // 道具类型 1：普通道具 2：装备类 3；铭文类型 4；道具宝箱
	ItemID  int64 `json:"ItemID"`  // 道具ID
	Num     int64 `json:"Num"`     // 道具数量
}
