package msg

import (
	"leafstalk/covenant/model"
)

// FortLevelUp 要塞升级
type FortLevelUp struct {
	PlayerId int64 `json:"userId"`
}

type ResponseFortLevelUp struct {
	ErrCode int              `json:"errCode"`
	Msg     string           `json:"msg,omitempty"`
	Data    *FortLevelUpData `json:"data"`
}

type FortLevelUpData struct {
	Level int64           `json:"level"` //等级
	Cost  map[int64]int64 `json:"cost"`  // 消耗
}

// FortTalentUp 天赋升级
type FortTalentUp struct {
	PlayerId int64 `json:"userId"`
	Type     int64 `json:"type"`
}

type ResponseFortTalentUp struct {
	ErrCode int               `json:"errCode"`
	Msg     string            `json:"msg,omitempty"`
	Data    *FortTalentUpData `json:"data"`
}

type FortTalentUpData struct {
	Type  int64           `json:"type"`
	Level int64           `json:"level"` //新天赋等级
	Cost  map[int64]int64 `json:"cost"`  // 消耗
}

// ChangeFortSkin 更换时装
type ChangeFortSkin struct {
	PlayerId int64 `json:"userId"`
	SkinId   int64 `json:"skinId"` //皮肤ID
}

type ResponseChangeFortSkin struct {
	ErrCode int    `json:"errCode"`
	Msg     string `json:"msg,omitempty"`
	Data    int64  `json:"data"` //皮肤ID
}

// type ChangeFortSkinData struct {
// 	Level int64     `json:"level"` //等级
// 	Skin  *FortSkin `json:"skin"`  //皮肤
// }

// StarFortSkin 升星时装
type FortSkinStarUp struct {
	PlayerId int64 `json:"userId"`
	SkinId   int64 `json:"skinId"`
}

type ResponseFortSkinStarUp struct {
	ErrCode int                 `json:"errCode"`
	Msg     string              `json:"msg,omitempty"`
	Data    *FortSkinStarUpData `json:"data"`
}

type FortSkinStarUpData struct {
	SkinId int64           `json:"skinId"`
	Star   int64           `json:"star"`
	Cost   map[int64]int64 `json:"cost"`
}

// FortSkinActive
type FortSkinActive struct {
	PlayerId int64 `json:"userId"`
	SkinId   int64 `json:"skinId"` //皮肤模型ID
}

type ResponseFortSkinActive struct {
	ErrCode int                 `json:"errCode"`
	Msg     string              `json:"msg,omitempty"`
	Data    *FortSkinActiveData `json:"data"`
}

type FortSkinActiveData struct {
	SkinId int64           `json:"skinId"` //皮肤ID
	Level  int64           `json:"level"`
	Cost   map[int64]int64 `json:"cost"`
}

// 要塞技能选配
type FortSkillSelect struct {
	PlayerId int64 `json:"userId"`
	SkinId   int64 `json:"skillId"` //皮肤ID
	Pos      int64 `json:"pos"`     //技能位置 0,1,2
}

type ResponseFortSkillSelect struct {
	ErrCode int      `json:"errCode"`
	Msg     string   `json:"msg,omitempty"`
	Data    [3]int64 `json:"data"`
}

const (
	WearRune    = 1
	TakeOffRune = 2
)

// RuneWear 穿卸符文
// 镶嵌 卸下 替换： 1,2,3
type RuneWear struct {
	PlayerId int64 `json:"userId"`
	RuneGId  int64 `json:"runeGId,string"`
	Type     int64 `json:"type"`
}

type ResponseRuneWear struct {
	ErrCode int           `json:"errCode"`
	Msg     string        `json:"msg,omitempty"`
	Data    *RuneWearData `json:"data"`
}

type RuneWearData struct {
	Pos  int64           `json:"pos"`
	Part *model.FortPart `json:"part"`
}

// RuneLevelUp 符文部位升级
type RuneLevelUp struct {
	PlayerId int64 `json:"userId"`
	OptType  int64 `json:"optType"`            // 0:指定部位升一级 1:一键升级，所有部位升到尽量最高
	RuneType int   `json:"runeType,omitempty"` // 符文类型 1-6
}

type ResponseRuneLevelUp struct {
	ErrCode int              `json:"errCode"`
	Msg     string           `json:"msg,omitempty"`
	Data    *RuneLevelUpData `json:"data"`
}

type RuneLevelUpData struct {
	Cost      map[int64]int64 `json:"cost"`
	PartLevel map[int]int64   `json:"partLevel"`
}

// RuneRecast 符文重铸属性
type RuneRecast struct {
	PlayerId int64 `json:"userId"`
	RuneGId  int64 `json:"runeGId,string"`
	LockPos  []int `json:"lockPos"` // 需要锁定的位置 0,1,2
}

// 给客户端的参考
// type RuneAffix struct {
// 	Type  int64   `json:"typ"`
// 	Value float64 `json:"val"`
// }

// type RuneAffixAndPos struct {
// 	*RuneAffix
// 	Pos int
// }

type ResponseRuneRecast struct {
	ErrCode int             `json:"errCode"`
	Msg     string          `json:"msg,omitempty"`
	Data    *RuneRecastData `json:"data"`
}

type RuneRecastData struct {
	RuneAffix []*model.RuneAffixAndPos `json:"affix"`
	Cost      map[int64]int64          `json:"cost"`
}

// SaveRuneRecastAttrs 保存符文重铸属性
type SaveRuneRecastAttrs struct {
	PlayerId int64 `json:"userId"`
	RuneGId  int64 `json:"runeGId,string"`
}

type ResponseSaveRuneRecastAttrs struct {
	ErrCode int                       `json:"errCode"`
	Msg     string                    `json:"msg,omitempty"`
	Data    map[string]*model.BagRune `json:"data"`
}

// RuneDisintegration 符文分解
type RuneDisintegration struct {
	PlayerId int64 `json:"userId"`
	Quality  int64 `json:"quality"`
}

type ResponseRuneDisintegration struct {
	ErrCode int                     `json:"errCode"`
	Msg     string                  `json:"msg,omitempty"`
	Data    *RuneDisintegrationData `json:"data"`
}

type RuneDisintegrationData struct {
	Dels []int64         `json:"dels"`
	Adds map[int64]int64 `json:"adds"`
}

// // 英雄换皮肤
// type HeroChangeSkin struct {
// 	PlayerId int64 `json:"userId"`
// 	HeroId   int64 `json:"heroId"`
// 	SkinId   int64 `json:"skinId"`
// }

// type HeroChangeSkinData struct {
// }

// type ResponseHeroChangeSkin struct {
// 	ErrCode int                 `json:"errCode"`
// 	Msg     string              `json:"msg,omitempty"`
// 	Data    *HeroChangeSkinData `json:"data"`
// }

// // HeroActive 激活
// type HeroActive struct {
// 	PlayerId int64 `json:"userId"`
// 	HeroId   int32 `json:"heroId"`
// 	Type     int32 `json:"type"` // 1 碎片合成 2 钻石购买
// }

// type HeroActiveData struct {
// }

// type ResponseHeroActive struct {
// 	ErrCode int             `json:"errCode"`
// 	Msg     string          `json:"msg,omitempty"`
// 	Data    *HeroActiveData `json:"data"`
// }

// TreasuresLevelUp 宝物升级
// type TreasuresLevelUp struct {
// 	PlayerId int64 `json:"userId"`
// 	Id       int32 `json:"id"`
// }

// type TreasuresLevelUpData struct {
// }

// type ResponseTreasuresLevelUp struct {
// 	ErrCode int                   `json:"errCode"`
// 	Msg     string                `json:"msg,omitempty"`
// 	Data    *TreasuresLevelUpData `json:"data"`
// }

// // TreasureStarUp 宝物升星
// type TreasuresStarUp struct {
// 	PlayerId int64 `json:"userId"`
// 	Id       int32 `json:"id"`
// }

// type TreasuresStarUpData struct {
// }

// type ResponseTreasuresStarUp struct {
// 	ErrCode int                  `json:"errCode"`
// 	Msg     string               `json:"msg,omitempty"`
// 	Data    *TreasuresStarUpData `json:"data"`
// }
