package service

import (
	"github.com/gin-gonic/gin"
	"github.com/iancoleman/orderedmap"
	"github.com/tidwall/gjson"
	"gopkg.in/olivere/elastic.v5"
	"search_server/model"
	"search_server/pkg/common"
	"search_server/pkg/config"
	"search_server/pkg/es"
	"search_server/service/query"
	"strconv"
	"strings"
)

type AlikeService struct {}

/*
返回供应商详情
 */
func (qs *AlikeService) AlikeSearchInfo(ctx *gin.Context) (results model.LyResponse) {

	target := ctx.Request.FormValue("target") //搜索目标: 1 国产 2 所有sku
	index := "zhuanmai"  //搜索国产替代 索引
	if target == "2" { //搜索所有
		index = config.Get("es.index_name").String()
	}
	//索引字典
	queryString, err := query.GetDemeQuery(ctx,target)
	if err != nil {
		results.ErrorCode = 1001;
		results.ErrorMsg = err.Error()
		return
	}

	esResult, err := es.CurlES(index, queryString)
	if err != nil {
		results.ErrorCode = 0;
		results.ErrorMsg = err.Error()
		return
	}
	common.PrintDebugHtml(ctx,"查询索引:"+index)
	common.PrintDebugHtml(ctx,esResult)

	//判断返回总条数
	total := gjson.Get(esResult, "hits.total").Int()
	if total == 0 {
		results.ErrorCode = 0;
		results.ErrorMsg = "查询没有数据"
		return
	}

	goodsIds := make([]string,0)  //goods_id
	gjArray := gjson.Get(esResult, "hits.hits.#._source").Array()
	for _, item := range gjArray {
		goodsIds = append(goodsIds, item.Get("goods_id").String())
	}


	//拼接返回数据
	A := orderedmap.New()  //初始化有序map,拼接data 数据
	results.ErrorCode = 0;
	results.ErrorMsg = "查询成功";
	page := PageClear(ctx,total);
	page["took"] = gjson.Get(esResult, "took").Int()
	A.Set("page",page)  //分页信息

	common.PrintDebugHtml(ctx,goodsIds)
	//组装商品详情
	endArr := make([]model.DullGoodsData,0)
	goodsList, _ := GetGoodsInfo(ctx,goodsIds)
	for _,v := range goodsList{

	  	GoodsUrl := ""
		BrandUrl := ""
		referer := ctx.GetHeader("Referer")
		if referer != ""{
			dome := strings.Split(referer,".com")
			if len(dome) > 0{
				if v.SupplierName == "猎芯自营" {
					GoodsUrl = dome[0]+".com/item/"+v.GoodsId+".html"
					BrandUrl = dome[0]+".com/v3/brand/list/"+strconv.Itoa(v.BrandId)+".html"
				}else{
					GoodsUrl = dome[0]+".com/goods_"+v.GoodsId+".html"
					BrandUrl = dome[0]+".com/v3/brand/list/"+strconv.Itoa(v.BrandId)+".html"
				}
			}
		}

		endArr = append(endArr,model.DullGoodsData{
			ApiGoods:v,
			GoodsUrl: GoodsUrl,
			BrandUrl: BrandUrl,
		})
	}

	A.Set("goods_lists",endArr)
	results.Data = A;
	return
}

/*
联想词
*/
func (qs *AlikeService) ThinkGoods(ctx *gin.Context) (results model.LyResponse) {

	goodsName := ctx.Request.FormValue("k");
	if goodsName == "" {
		results.ErrorCode = 0;
		results.ErrorMsg = ""
		return
	}
	//字符过滤
	goodsName = common.DrawLetterNum(goodsName)
	//查询es
	query := elastic.NewBoolQuery()
	query.Filter(elastic.NewTermQuery("auto_goods_name", goodsName))
	source := elastic.NewSearchSource().Query(query)
	source = source.From(0).Size(10)
	searchRequestStr, _ := elastic.NewSearchRequest().Source(source).Body()

	common.PrintDebugHtml(ctx,searchRequestStr)
	result, err := es.CurlES("digikey", searchRequestStr)
	if err != nil {
		results.ErrorCode = 0;
		results.ErrorMsg = err.Error()
		return
	}


	goodsNameList := make([]string, 0)
	goodsList := gjson.Get(result, "hits.hits.#._source").Array()
	for _, goods := range goodsList {
		goodsName := gjson.Get(goods.String(), "auto_goods_name").String()
		goodsNameList = append(goodsNameList, goodsName)
	}
	results.ErrorCode = 0;
	results.ErrorMsg = "查询成功"
	results.Data = goodsNameList

	return
}