package Sp

import (
	log "github.com/sirupsen/logrus"
	"src/Common/DateTime"
	"src/Common/Unit"
	"src/Config"
	"time"
)

type SpModel struct {
	Config *Config.Config
	Spid string
	StartTime string
}

func (this *SpModel) Start() {
	START:
		log.Infoln("启动SP推送媒资检测:",this.Spid," offset:",this.StartTime)
		config,ok := this.Config.Sps.Get(this.Spid)
		n:=60
		if ok {
			conf,ok:=config.(map[string]interface{})
			if ok {
				push_check_seconds:=conf["push_check_seconds"].(string)
				if push_check_seconds !="" {
					n = Unit.Time2Seconds(push_check_seconds)
				}

				this.push();


			}

		}
		time.Sleep(time.Duration(n) * time.Second)
		goto START
}

func (this *SpModel) push() {
	cReqJson:=new(checkReqJson)
	cReqJson.Spid=this.Spid
	cReqJson.Start = this.StartTime
	cReqJson.End = DateTime.Format("YYYYMMDDhhmmss",time.Now())

	mediaListModel:=new(MediaListModel)
	mediaListModel.Config=this.Config
	cRespJson,err:=mediaListModel.check(cReqJson)

	if err==nil {
		if cRespJson.PageNum>0 {
			config,ok:=this.Config.Sps.Get(this.Spid)
			if ok {
				conf,ok:=config.(map[string]interface{})
				if ok {
					api_push:=conf["api_push"].(string)
					api_key:=conf["api_key"].(string)
					nOk:=0
					for page := 1; page <= cRespJson.PageNum; page++ {
						pReqJson := new(pushReqJson)
						pReqJson.Start=cReqJson.Start
						pReqJson.End = cReqJson.End
						pReqJson.Spid=cReqJson.Spid
						pReqJson.Page=page
						pReqJson.PageNum=cRespJson.PageNum
						pReqJson.Url=api_push
						pReqJson.Key=api_key

						pRespJson,err:=mediaListModel.push(pReqJson)
						if err==nil {
							if pRespJson.Code==0 {
								nOk++
							}else{
								log.Errorf("PUSH MEDIA ERROR : reqJson:%v ,respJson:%v\n",pReqJson,pRespJson)
							}
						}else {
							log.Errorf("PUSH MEDIA ERROR : reqJson:%v ,respJson:%v\n",pReqJson,pRespJson)
						}

					}

					if nOk < cRespJson.PageNum{
						log.Errorln("PUSH MEDIA ERROR : ok/total->",nOk,"/",cRespJson.PageNum)
					}else {
						log.Infoln("PUSH MEDIA SUCCESS : ",cReqJson," | ",cRespJson)
						this.StartTime=cReqJson.End
					}
				}else{
					log.Errorln("parse sp config err!")
				}
			}else {
				log.Errorln("Get sp config err!")
			}

		}
	}

}