package svc

import (
	"applet/app/db"
	"applet/app/db/model"
	md2 "applet/app/es/md"
	"applet/app/task/md"
	"applet/app/utils"
	"code.fnuoos.com/go_rely_warehouse/zyos_go_es.git/es"
	"code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/tik_tok"
	zhios_third_party_utils "code.fnuoos.com/go_rely_warehouse/zyos_go_third_party_api.git/utils"
	"context"
	"encoding/json"
	"fmt"
	"github.com/olivere/elastic/v7"
	"github.com/syyongx/php2go"
	"github.com/tidwall/gjson"
	"strings"
	"time"
)

func TikTokTaskMoney(types string) {
	endTime := time.Now().Unix()
	startTime := endTime - 89*86400
	now := zhios_third_party_utils.GetTimeRange("today")
	if types == "yestday" {
		now["start"] = now["start"] - 10
	}
	if types == "now" {
		now["start"] = now["start"] - 10 - 86400
	}
	date := time.Unix(now["start"], 0).Format("2006-01-02")
	p := 1
	for {
		param := map[string]interface{}{
			"page_no":                  p,
			"page_size":                100,
			"video_publish_start_time": startTime,
			"billing_date":             date,
			"video_publish_end_time":   endTime,
		}
		api, _ := tik_tok.TaskApi("query_agency_video_daily_data/", TikTokTaskToken(), zhios_third_party_utils.SerializeStr(param))
		fmt.Println(api)
		orderStr := gjson.Get(api, "data.results").String()
		if orderStr == "" {
			break
		}
		var order = make([]md.TikTokTaskOrder, 0)
		json.Unmarshal([]byte(orderStr), &order)
		for _, v := range order {
			if v.BillingGMV1D <= 0 {
				continue
			}
			var TalentProfit1D float64 = 0
			var result *elastic.SearchResult
			boolQuery := elastic.NewBoolQuery() // 创建bool查询
			rangeQuery := elastic.NewMatchQuery("task_id", v.TaskId)
			boolQuery.Must(rangeQuery)
			rangeQuery1 := elastic.NewRangeQuery("task_end_time").Gt(time.Now().Unix())
			boolQuery.Must(rangeQuery1)
			key := md2.ZhiosTikTokTaskDetailEsIndex
			esWhere := es.EsClient.Search().
				Index(key).
				TrackTotalHits(true).
				Query(boolQuery)
			var err error
			result, err = esWhere. // 设置查询条件
						Size(1). // 设置分页参数 - 每页大小,设置为0,代表不返回搜索结果,仅返回聚合分析结果
						From(0).
						Pretty(true). // 返回可读的json格式
						Do(context.Background())
			fmt.Println(result)
			fmt.Println(err)
			appId := ""
			if result != nil && len(result.Hits.Hits) > 0 {
				for _, hit := range result.Hits.Hits {
					if hit == nil {
						continue
					}
					jsonByte, marErr := hit.Source.MarshalJSON()
					var tmps md.TikTokTaskDetailSecond
					if marErr == nil {
						err := json.Unmarshal(jsonByte, &tmps)
						if err == nil {
							appId = tmps.Appid
							bili := float64(tmps.PaymentAllocateRatio) / 10000 * (10.0 / 11.0) * 1000
							TalentProfit1D = float64(int(bili)) / 10
						}
					}
				}
			}
			if appId == "" {
				continue
			}
			discount := float64(v.BillingGMV1D)/100 - float64(v.BillingRefundGMV1D)/100
			if discount < 0 {
				discount = 0
			}
			talentBili := float64(int(discount*(TalentProfit1D/100)*100)) / 100
			//每个平台不一样的比例
			sourceBili, ok := md.SourceBili[appId]
			if ok == false {
				sourceBili = "20"
			}
			platformBili := php2go.Round(discount*(utils.StrToFloat64(sourceBili)/100), 2)
			commission := discount - talentBili - platformBili
			fee := discount - commission
			oid := "douyin" + zhios_third_party_utils.Int64ToStr(v.VideoId) + v.AgentID + v.DouyinID + date
			oid = strings.ReplaceAll(oid, "_", "")
			oid = strings.ReplaceAll(oid, "-", "")
			oid = strings.ReplaceAll(oid, " ", "")
			oid = strings.ReplaceAll(oid, ":", "")
			var tikTokData model.TikTokPlanTeam
			db.ZhimengDb.Where("team_id=? and tik_tok_id=?", v.AgentID, v.DouyinID).Get(&tikTokData)
			if tikTokData.Id == 0 || tikTokData.Ext == "" {
				continue
			}
			if commission < 0 {
				commission = 0
			}
			split := strings.Split(tikTokData.Ext, "_")
			var tmp = model.PlayletSaleOrder{
				Uid:          split[0],
				SubUid:       utils.StrToInt(split[1]),
				Data:         utils.SerializeStr(v),
				Oid:          php2go.Md5(oid),
				Amount:       utils.Float64ToStr(discount),
				Commission:   utils.Float64ToStr(commission),
				CreateTime:   utils.TimeParseStd(date + " 00:00:00"),
				UpdateTime:   time.Now(),
				Title:        v.TaskName,
				VideoType:    "douyin",
				PlatformType: md.SourceCate[appId],
				GoodsType:    "playlet",
				OrdType:      "video",
				ExtendUid:    v.DouyinID + "_" + v.AgentID,
				PlatformFee:  utils.Float64ToStr(fee),
				TikFee:       utils.Float64ToStr(talentBili),
			}
			if utils.InArr(appId, []string{"ttd02aa6974f166cca01", "tt8a93fc2e15affaaa01", "tt87bdf1001882dd4b01"}) {
				tmp.OrdType = "story"
			}
			playletSaleOrderDb := db.PlayletSaleOrderDb{}
			playletSaleOrderDb.Set()
			ord := playletSaleOrderDb.GetPlayletVideoOrderByOid(tmp.Oid, tmp.OrdType)
			tmp.Status = "订单付款"
			if ord != nil {
				tmp.CustomOid = ord.CustomOid
				if ord.CustomOid == "" || ord.CustomOid == "0" {
					tmp.CustomOid = utils.OrderUUID(tmp.SubUid)
				}
				playletSaleOrderDb.PlayletVideoOrderUpdate(ord.Id, &tmp)
			} else {
				tmp.CustomOid = utils.OrderUUID(tmp.SubUid)
				playletSaleOrderDb.PlayletVideoOrderInsert(&tmp)
			}
		}
		p++
	}
	return
}