package player

// Playurl is http://git.bilibili.co/video/playurl_doc/blob/master/PlayurlV2%E6%8E%A5%E5%8F%A3%E6%96%87%E6%A1%A3.md
type Playurl struct {
	From              string   `json:"from"`
	Result            string   `json:"result"`
	Quality           int64    `json:"quality"`
	Format            string   `json:"format"`
	Timelength        int64    `json:"timelength"`
	AcceptFormat      string   `json:"accept_format"`
	AcceptDescription []string `json:"accept_description,omitempty"`
	AcceptQuality     []int64  `json:"accept_quality"`
	VideoCodecid      int      `json:"video_codecid"`
	Fnver             int      `json:"fnver"`
	Fnval             int      `json:"fnval"`
	VideoProject      bool     `json:"video_project"`
	SeekParam         string   `json:"seek_param"`
	SeekType          string   `json:"seek_type"`
	Abtid             int      `json:"abtid,omitempty"`
	Durl              []*Durl  `json:"durl,omitempty"`
	Dash              *Dash    `json:"dash,omitempty"`
}

// FormatDash dash 驼峰 -> 下划线
func (p *Playurl) FormatDash() {
	if p.Dash != nil {
		var as, vs []*DashItem
		for _, a := range p.Dash.Audio {
			as = append(as, &DashItem{
				ID:        a.ID,
				BaseURL:   a.BaseURLRes,
				BackupURL: a.BackupURLRes,
				Bandwidth: a.Bandwidth,
				Codecid:   a.Codecid,
			})
		}
		for _, v := range p.Dash.Video {
			vs = append(vs, &DashItem{
				ID:        v.ID,
				BaseURL:   v.BaseURLRes,
				BackupURL: v.BackupURLRes,
				Bandwidth: v.Bandwidth,
				Codecid:   v.Codecid,
			})
		}
		p.Dash.Audio = as
		p.Dash.Video = vs
	}
}

// Durl is
type Durl struct {
	Order     int      `json:"order"`
	Length    int64    `json:"length"`
	Size      int64    `json:"size"`
	AHead     string   `json:"ahead,omitempty"`
	VHead     string   `json:"vhead,omitempty"`
	URL       string   `json:"url"`
	BackupURL []string `json:"backup_url,omitempty"`
}

//Param is
type Param struct {
	AID       int64  `form:"aid"`
	CID       int64  `form:"cid"`
	Qn        int64  `form:"qn"`
	Npcybs    int    `form:"npcybs"`
	Otype     string `form:"otype"`
	MobiApp   string `form:"mobi_app"`
	Fnver     int    `form:"fnver"`
	Fnval     int    `form:"fnval"`
	Session   string `form:"session"`
	Build     int    `form:"build"`
	Device    string `form:"device"`
	ForceHost int    `form:"force_host"`
}

// Dash is
type Dash struct {
	Video []*DashItem `json:"video"`
	Audio []*DashItem `json:"audio"`
}

// DashItem is
type DashItem struct {
	ID           int64    `json:"id"`
	BaseURL      string   `json:"base_url"`
	BackupURL    []string `json:"backup_url,omitempty"`
	BaseURLRes   string   `json:"baseUrl,omitempty"`
	BackupURLRes []string `json:"backupUrl,omitempty"`
	Bandwidth    int64    `json:"bandwidth"`
	Codecid      int64    `json:"codecid"`
}
