package globals

import (
	"time"
)

type SongInfo struct {
	Id         string  `json:"id"`
	CanPlay    bool    `json:"canPlay"`
	ArtistId   string  `json:"albumArtistId"`
	ArtistName string  `json:"albumArtistName"`
	AlbumId    string  `json:"albumId"`
	AlbumName  string  `json:"albumName"`
	SongType   int8    `json:"tag"` // 0 NORMAL  1 TOP3_RCMD
	Duration   uint32  `json:"duration"`
	Gain       float32 `json:"gain"`
	BGId       string  `json:"backgroundSoundId"` // 背景音id

	MusicSrc    MusicSrcType `json:"-"` // 歌曲来源信息类型
	MusicListId string       `json:"-"` // 歌单ID
	TagName     string       `json:"-"` // 歌单分类词

	Single  bool `json:"-"` // 是否是单曲，如果是，对应的歌单id为nil
	IsLiked bool `json:"-"` // 是否收藏

	Tts   *string `json:"-"`
	BGUrl *string `json:"-"`

	SourceOs int8 `json:"-"` // 0: server     1: app   2 : local

	PlayedTime time.Time `json:"-"` // 歌曲播放时间，用于历史播放列表
}

type SongInfoDetail struct {
	SongInfo

	Url     string `json:"mediaUrl"`
	IsLiked bool   `json:"liked"`
	Name    string `json:"name"`
	Code    int    `json:"code"`
}

type SongPlayInfo struct {
	Url  string `json:"url"`
	Br   int    `json:"br"`
	Size int    `json:"size"`
	Md5  string
}

type MusicListInfo struct {
	Id         string       `json:"id"` // 歌单id
	ArtistId   string       `json:"artistId"`
	Name       string       `json:"name"`
	UpdateTime uint64       `json:"updatetime"` // ms
	SongList   []SongInfo   `json:"songList"`
	Total      MusicLenType `json:"total"` //有些歌单没有该字段，因此不要依赖该字段
	Index      MusicLenType `json:"index"`
	Url        string       `json:"mediaUrl"`
	Gain       float32      `json:"gain"`
	Type       MusicSrcType `json:"type"`
	HasMore    bool         `json:"hasMore,omitempy"` // 是否还有更多歌曲
	Source     MusicSrcType `json:"source"`           //歌单来自哪里，1：创建的 2：收藏的

	ArtistName string       `json:"artistName"`
	BizType    BizTypeDef   `json:"bizType"`
	PageSize   MusicLenType `json:"pageSize"`
	Offset     MusicLenType `json:"offset"`
	Order      MusicLenType `json:"order"`

	CopyrightTts CopyrightPullTts `json:"copyrightTts"`
}

type ServerRet struct {
	Code      int    `json:"code"`
	Desc      string `json:"desc"`
	Detail    string `json:"detail"`
	Cmd       int    `json:"cmd"`
	RspId     string `json:"responseid"`
	TimeStamp int64  `json:"ts"`
}

type ServerDetailBase struct {
	Cmd         int    `json:"cmd"`
	Tts         string `json:"tts"`
	Tts2        string `json:"tts2"`
	VoiceEffect string `json:"voice"`
	Keep        bool   `json:"keep"`
	Interrupt   int    `json:"interrupt"` //for 闲聊暂停用，如果为1，就暂停音乐
}

type ModeInfo struct {
	NewModeId int64 `json:"newModeId"`
	OldModeId int64 `json:"oldModeId"`
}
type VboxChangeInfo struct {
	SongId    string        `json:"songId"`
	Page      MusicLenType  `json:"page"`
	PageSize  MusicLenType  `json:"pageSize"`
	ListId    string        `json:"listId"`
	Type      MusicSrcType  `json:"type"`
	Oftag     string        `json:"oftag"`
	ArtistId  string        `json:"artistId"`
	Pos       int           `json:"pos"`
	Duration  int           `json:"duration"`
	HasMore   bool          `json:"hasMore"`
	PlayMode  MusicPlayMode `json:"playmode"`
	CloudId   string        `json:"cloudId"`
	ModeId    int64         `json:"modeId"`
	ExtraData string        `json:"extraData"`
	BizType   BizTypeDef    `json:"bizType"`
	Order     MusicLenType  `json:"order"`
}
type DenyInfo struct {
	Data     []string `json:"data"`
	NameData []string `json:"nameData"`
	Type     int8     `json:"type"`
}

type MscWakeUp struct {
	Wakeupwords string  `json:"wakeupwords"`
	Angle       int     `json:"angle"`
	Beam        int     `json:"beam"`
	Power       float32 `json:"power"`
}

type MscErrcode struct {
	Errorcode int `json:"errorcode"`
}

type ControllerInitArgs struct {
	Uuid     string `json:"uuid"`
	AesKey   string `json:"aes_key"`
	YxToken  string `json:"yx_token"`
	BindUser string `json:"bind_user"`
}
