package Pull

import (
	"encoding/json"
	"fmt"
	"github.com/sirupsen/logrus"
	"src/Common/Request"
	"src/Config"
	"strings"
	"unsafe"
)

type Media struct {
	SiteId		string 	`json:"site_id"`
	Sps 		[]*Sp	`json:"sps"`
	JsonUrl 	string 	`json:"jsonUrl"`
	NewsId		string	`json:"newsId"`
	NewsName	string	`json:"newsName"`
	NodeId		string	`json:"nodeId"`
	NodeName	string	`json:"nodeName"`
	// Md5			string 	`json:"md5"`
	// PlayUrl		string	`json:"playUrl"`
}

type Sp struct {
	Spid 		string 	`json:"sp_id"`
	PushMode 	string 	`json:"push_mode"` //是否自动转推:0手动,1自动
}

type MediaList struct {
	CurrentPage int   `json:"currentPage"`
	PageNum     int   `json:"pageNum"`
	PageSize    int   `json:"pageSize"`
	Total       int   `json:"total"`
	List        []*Media `json:"list"`
}

type MediaListModel struct {
	Config *Config.Config
	Siteid string
}

func (this *MediaListModel) FetchList(date string, page int) *MediaList {
	wasu_api_incrementList := ""
	config,ok := this.Config.Sites.Get(this.Siteid)
	if ok {
		conf,ok:=config.(map[string]interface{})
		if ok {
			wasu_api_incrementList=conf["pull_api"].(string)
		}
	}

	if wasu_api_incrementList == "" {
		logrus.Error("PULL Site :",this.Siteid," 缺少配置项:pull_api")
	}

	mediaList := new(MediaList)
	if ok {
		url := fmt.Sprintf("%s?date=%s&page=%d", wasu_api_incrementList, date, page)

		data, err := Request.Get(url)
		if err == nil {
			json.Unmarshal([]byte(data), mediaList)
		}
	}
	return mediaList
}

func (this *MediaListModel) UpdateMediaList(mediaList *MediaList) bool {

	sps := []*Sp{}

	spids:=""
	config,ok := this.Config.Sites.Get(this.Siteid)
	if ok {
		conf,ok:=config.(map[string]interface{})
		if ok {
			spids=conf["spids"].(string)
		}
	}
	spids = ","+spids+","

	for _, tmp := range this.Config.Sps.Items() {
		sp := tmp.(map[string]interface{})
		spid := sp["id"].(string);

		idx := strings.Index(spids, ","+spid+",")
		if idx > -1 {
			sp1 := new(Sp)
			sp1.Spid = spid
			sp1.PushMode = sp["wasu_incrementList_push_mode"].(string);
			sps=append(sps,sp1)
		}
	}


	l := len(mediaList.List)
	nOk := 0
	for _, media := range mediaList.List {
		media.SiteId=this.Siteid
		media.Sps=sps
		if this.UpdateMedia(media) {
			nOk++
		}
	}
	b := false
	if nOk == l {
		b = true
	}
	logrus.Debugln("UpdateMediaList : ok/total :", nOk, "/", l)
	return b
}

func (this *MediaListModel) UpdateMedia(media *Media) bool {

	center_api_media_update, ok := this.Config.Sys.Get("center_api_media_update")
	b := false
	if ok {
		inData, _ := json.Marshal(media)
		//fmt.Printf("****** media_info : %v",media)
		data, err := Request.Post(center_api_media_update.(string), *(*string)(unsafe.Pointer(&inData)))
		//data, err := Request.Post(center_api_media_update.(string), string(inData))
		if err == nil {
			if data == "true" {
				b = true
			}
		}
	}

	return b
}