package yunzmall

import (
	"context"
	"github.com/gogf/gf/encoding/gjson"
	"github.com/gogf/gf/frame/g"
	"github.com/gogf/gf/util/gconv"
)

type goodsLogic struct {
}

type GoodsCursorListReq struct {
	Cursor   int `json:"cursor,omitempty"` //游标
	PageSize int `json:"pageSize"`         //每页个数
}

type GoodsCursorListRes struct {
	CommonRes
	Data struct {
		List []struct {
			Id                   int     `json:"id"`
			Title                string  `json:"title"`
			ImageUrl             string  `json:"image_url"`
			Source               int     `json:"source"`
			Category1Id          int     `json:"category_1_id"`
			Category2Id          int     `json:"category_2_id"`
			Category3Id          int     `json:"category_3_id"`
			BrandId              int     `json:"brand_id"`
			AgreementPrice       int     `json:"agreement_price"`
			GuidePrice           int     `json:"guide_price"`
			ActivityPrice        int     `json:"activity_price"`
			MarketPrice          int     `json:"market_price"`
			SalePrice            int     `json:"sale_price"`
			CostPrice            int     `json:"cost_price"`
			OriginRate           float64 `json:"origin_rate"`
			ActivityRate         float64 `json:"activity_rate"`
			MarketRate           int     `json:"market_rate"`
			Profit               int     `json:"profit"`
			ProfitRate           float64 `json:"profit_rate"`
			IsDisplay            int     `json:"is_display"`
			IsRecommend          int     `json:"is_recommend"`
			IsNew                int     `json:"is_new"`
			IsHot                int     `json:"is_hot"`
			Stock                int     `json:"stock"`
			Sales                int     `json:"sales"`
			Unit                 string  `json:"unit"`
			IsPromotion          int     `json:"is_promotion"`
			MinPrice             int     `json:"min_price"`
			MaxPrice             int     `json:"max_price"`
			CreatedAt            int     `json:"created_at"`
			SupplierId           int     `json:"supplier_id"`
			GatherSupplierId     int     `json:"gather_supplier_id"`
			FreightType          int     `json:"freight_type"`
			RecommendBrandStr    string  `json:"recommend_brand_str"`
			RecommendCategoryStr string  `json:"recommend_category_str"`
			SupplierName         string  `json:"supplier_name"`
			UpdatedAt            int     `json:"updated_at"`
			Sort                 int     `json:"sort"`
			IsPlugin             int     `json:"is_plugin"`
			Level1Price          int     `json:"level_1_price"`
			Level2Price          int     `json:"level_2_price"`
			Level3Price          int     `json:"level_3_price"`
			Level4Price          int     `json:"level_4_price"`
			Level5Price          int     `json:"level_5_price"`
			Level6Price          int     `json:"level_6_price"`
			Level7Price          int     `json:"level_7_price"`
			Level8Price          int     `json:"level_8_price"`
			Level9Price          int     `json:"level_9_price"`
			Level10Price         int     `json:"level_10_price"`
			Level1Profit         int     `json:"level_1_profit"`
			Level2Profit         int     `json:"level_2_profit"`
			Level3Profit         int     `json:"level_3_profit"`
			Level4Profit         int     `json:"level_4_profit"`
			Level5Profit         int     `json:"level_5_profit"`
			Level6Profit         int     `json:"level_6_profit"`
			Level7Profit         int     `json:"level_7_profit"`
			Level8Profit         int     `json:"level_8_profit"`
			Level9Profit         int     `json:"level_9_profit"`
			Level10Profit        int     `json:"level_10_profit"`
			Barcode              string  `json:"barcode"`
			ImportApps           string  `json:"import_apps"`
			IsBill               int     `json:"is_bill"`
			SingleOption         int     `json:"single_option"`
			SmallShopIdString    string  `json:"small_shop_id_string"`
			SupplyLine           string  `json:"supply_line"`
			IsVideoShop          int     `json:"is_video_shop"`
		} `json:"list"`
		Total    int `json:"total"`
		Cursor   int `json:"cursor"`
		PageSize int `json:"pageSize"`
	} `json:"data"`
}

// GoodsCursorList 选品列表API(全量,cursor)
func (s *Client) GoodsCursorList(ctx context.Context, req GoodsCursorListReq) (res *GoodsCursorListRes, err error) {
	var method = "/app/product/storage/cursorList"
	result, err := s.post(ctx, method, gconv.Map(req))
	if err != nil {
		return
	}
	err = gjson.New(result).Scan(&res)
	return
}

type GoodsDetailItem struct {
	Id             int    `json:"id"`
	CreatedAt      int    `json:"created_at"`
	UpdatedAt      int    `json:"updated_at"`
	Title          string `json:"title"`
	OriginPrice    int    `json:"origin_price"`
	GuidePrice     int    `json:"guide_price"`
	Price          int    `json:"price"`
	CostPrice      int    `json:"cost_price"`
	ActivityPrice  int    `json:"activity_price"`
	MinBuyQty      int    `json:"min_buy_qty"`
	Stock          int    `json:"stock"`
	Sales          int    `json:"sales"`
	FeedbackRate   int    `json:"feedback_rate"`
	Sn             string `json:"sn"`
	Code           string `json:"code"`
	IsNew          int    `json:"is_new"`
	IsRecommend    int    `json:"is_recommend"`
	IsHot          int    `json:"is_hot"`
	IsPromotion    int    `json:"is_promotion"`
	IsDisplay      int    `json:"is_display"`
	IsDisplayMsg   string `json:"is_display_msg"`
	StatusLock     int    `json:"status_lock"`
	SingleOption   int    `json:"single_option"`
	Desc           string `json:"desc"`
	ImageUrl       string `json:"image_url"`
	VideoUrl       string `json:"video_url"`
	Unit           string `json:"unit"`
	Barcode        string `json:"barcode"`
	Long           int    `json:"long"`
	Wide           int    `json:"wide"`
	High           int    `json:"high"`
	Volume         int    `json:"volume"`
	Freight        int    `json:"freight"`
	FreightType    int    `json:"freight_type"`
	MaxPrice       int    `json:"maxPrice"`
	MinPrice       int    `json:"minPrice"`
	MaxCostPrice   int    `json:"maxCostPrice"`
	MinCostPrice   int    `json:"minCostPrice"`
	MaxOriginPrice int    `json:"maxOriginPrice"`
	MinOriginPrice int    `json:"minOriginPrice"`
	Gallery        []struct {
		Type int    `json:"type"`
		Src  string `json:"src"`
	} `json:"gallery"`
	Qualifications interface{} `json:"qualifications"`
	DetailImages   string      `json:"detail_images"`
	Attrs          []struct {
		Name  string `json:"name"`
		Value string `json:"value"`
	} `json:"attrs"`
	BrandId                          int    `json:"brand_id"`
	SupplierId                       int    `json:"supplier_id"`
	GatherSupplyId                   int    `json:"gather_supply_id"`
	Category1Id                      int    `json:"category1_id"`
	Category2Id                      int    `json:"category2_id"`
	Category3Id                      int    `json:"category3_id"`
	FreightTemplateId                int    `json:"freight_template_id"`
	Source                           int    `json:"source"`
	Sort                             int    `json:"sort"`
	SourceGoodsId                    int    `json:"source_goods_id"`
	SourceGoodsIdString              string `json:"source_goods_id_string"`
	LocationId                       int    `json:"location_id"`
	Freeze                           int    `json:"freeze"`
	ShopLevel                        int    `json:"shop_level"`
	DesLevel                         int    `json:"des_level"`
	ExpressLevel                     int    `json:"express_level"`
	Level                            int    `json:"level"`
	ChildTitle                       string `json:"child_title"`
	BillPosition                     int    `json:"bill_position"`
	IsBill                           int    `json:"is_bill"`
	Md5                              string `json:"md5"`
	TaxCode                          string `json:"tax_code"`
	TaxProductName                   string `json:"tax_product_name"`
	TaxShortName                     string `json:"tax_short_name"`
	TaxOption                        string `json:"tax_option"`
	TaxUnit                          string `json:"tax_unit"`
	FavorablePolicy                  string `json:"favorable_policy"`
	IsFavorablePolicy                int    `json:"is_favorable_policy"`
	FreeOfTax                        int    `json:"free_of_tax"`
	ShortCode                        string `json:"short_code"`
	TaxMeasurePrice                  int    `json:"tax_measure_price"`
	TaxRate                          int    `json:"tax_rate"`
	IsTaxLogo                        int    `json:"is_tax_logo"`
	IsPlugin                         int    `json:"is_plugin"`
	PluginId                         int    `json:"plugin_id"`
	IsSingleOrder                    int    `json:"is_single_order"`
	SupplierSourceId                 int    `json:"supplier_source_id"`
	SupplierSourceCategoryId         int    `json:"supplier_source_category_id"`
	ProfitRate                       int    `json:"profit_rate"`
	JushuitanBind                    int    `json:"jushuitan_bind"`
	JushuitanDistributorSupplierName string `json:"jushuitan_distributor_supplier_name"`
	JushuitanDistributorCoId         string `json:"jushuitan_distributor_co_id"`
	JushuitanUploadStatus            int    `json:"jushuitan_upload_status"`
	SupplyLine                       string `json:"supply_line"`
	IsSupplyLine                     int    `json:"is_supply_line"`
	IsVideoShop                      int    `json:"is_video_shop"`
	ShopName                         string `json:"shop_name"`
	Skus                             []struct {
		Id            int    `json:"id"`
		CreatedAt     int    `json:"created_at"`
		UpdatedAt     int    `json:"updated_at"`
		Title         string `json:"title"`
		Price         int    `json:"price"`
		CostPrice     int    `json:"cost_price"`
		OriginPrice   int    `json:"origin_price"`
		GuidePrice    int    `json:"guide_price"`
		ActivityPrice int    `json:"activity_price"`
		Stock         int    `json:"stock"`
		Weight        int    `json:"weight"`
		IsDisplay     int    `json:"is_display"`
		ProductId     int    `json:"product_id"`
		SupplierId    int    `json:"supplier_id"`
		Code          string `json:"code"`
		Sn            string `json:"sn"`
		Barcode       string `json:"barcode"`
		ImageUrl      string `json:"image_url"`
		Options       []struct {
			SpecName     string `json:"spec_name"`
			SpecItemName string `json:"spec_item_name"`
		} `json:"options"`
		OriginalSkuId         int    `json:"original_sku_id"`
		SpecId                string `json:"specId"`
		Describe              string `json:"describe"`
		TaxCode               string `json:"tax_code"`
		TaxProductName        string `json:"tax_product_name"`
		TaxShortName          string `json:"tax_short_name"`
		TaxOption             string `json:"tax_option"`
		TaxUnit               string `json:"tax_unit"`
		FavorablePolicy       string `json:"favorable_policy"`
		IsFavorablePolicy     int    `json:"is_favorable_policy"`
		FreeOfTax             int    `json:"free_of_tax"`
		ShortCode             string `json:"short_code"`
		TaxMeasurePrice       int    `json:"tax_measure_price"`
		TaxRate               int    `json:"tax_rate"`
		IsTaxLogo             int    `json:"is_tax_logo"`
		ProfitRate            int    `json:"profit_rate"`
		JushuitanBind         int    `json:"jushuitan_bind"`
		JushuitanUploadStatus int    `json:"jushuitan_upload_status"`
		Number                int    `json:"number"`
	} `json:"skus"`
	Supplier struct {
		Id            int    `json:"id"`
		Name          string `json:"name"`
		IsSelfSupport int    `json:"is_self_support"`
	} `json:"supplier"`
	GatherSupply struct {
		Id         int    `json:"id"`
		Name       string `json:"name"`
		Key        string `json:"key"`
		CategoryId int    `json:"category_id"`
	} `json:"gather_supply"`
	AliProduct struct {
		Id           int         `json:"id"`
		CreatedAt    interface{} `json:"created_at"`
		UpdatedAt    interface{} `json:"updated_at"`
		ProductId    int         `json:"product_id"`
		SkuId        int         `json:"sku_id"`
		AliSkuId     string      `json:"ali_sku_id"`
		AliProductId int         `json:"ali_product_id"`
		AutoPay      int         `json:"auto_pay"`
		ShopId       string      `json:"shop_id"`
	} `json:"ali_product"`
	ProductVerify struct {
		Id         int         `json:"id"`
		CreatedAt  interface{} `json:"created_at"`
		UpdatedAt  interface{} `json:"updated_at"`
		ProductId  int         `json:"product_id"`
		SupplierId int         `json:"supplier_id"`
		Status     int         `json:"status"`
		IsDisplay  int         `json:"is_display"`
	} `json:"product_verify"`
	Brand struct {
		Id   int    `json:"id"`
		Name string `json:"name"`
	} `json:"brand"`
	Category1 struct {
		Id       int    `json:"id"`
		Name     string `json:"name"`
		Image    string `json:"image"`
		Level    int    `json:"level"`
		ParentId int    `json:"parent_id"`
	} `json:"category_1"`
	Category2 struct {
		Id       int    `json:"id"`
		Name     string `json:"name"`
		Image    string `json:"image"`
		Level    int    `json:"level"`
		ParentId int    `json:"parent_id"`
	} `json:"category_2"`
	Category3 struct {
		Id       int    `json:"id"`
		Name     string `json:"name"`
		Image    string `json:"image"`
		Level    int    `json:"level"`
		ParentId int    `json:"parent_id"`
	} `json:"category_3"`
	AgreementPrice int `json:"agreement_price"`
	MarketPrice    int `json:"market_price"`
	SalePrice      int `json:"sale_price"`
}

type GoodsDetailRes struct {
	CommonRes
	Data struct {
		List []GoodsDetailItem `json:"list"`
	} `json:"data"`
}

// GoodsDetail 商品详情
func (s *Client) GoodsDetail(ctx context.Context, req interface{}) (res *GoodsDetailRes, err error) {
	var method = "/app/product/storage/detailList"
	result, err := s.post(ctx, method, g.Map{
		"ids": gconv.Ints(req),
	})
	if err != nil {
		return
	}
	err = gjson.New(result).Scan(&res)
	return
}

type GoodsListReq struct {
	Title         string `json:"title,omitempty"`           //商品名称
	IsDisplay     int    `json:"is_display,omitempty"`      //0下架1上架
	RangeType     string `json:"range_type,omitempty"`      //筛选类型:agreement_price 协议价格	origin_rate常规利润率	activity_price 营销价格	guide_price  指导价格	activity_rate 营销利润率
	RangeTypeFrom int    `json:"range_type.from,omitempty"` //区间开始
	RangeTo       int    `json:"range.to,omitempty"`        //区间结束
	CategoryID1   int    `json:"category_1_id,omitempty"`   //一级分类id
	CategoryID2   int    `json:"category_2_id,omitempty"`   //二级分类id
	CategoryID3   int    `json:"category_3_id,omitempty"`   //三级分类id
	FreightType   int    `json:"freight_type,omitempty"`    //运费类型1包邮2不包邮
	Source        int    `json:"source,omitempty"`          // 0中台自营	1云仓(云仓)	2京东	6阿里	7天猫	8苏宁	11华南一仓	98中台云仓	99永源	100YZH	101中台供应链	102跨境	103DWD	108YHZ新版
	SupplierName  string `json:"supplier_name,omitempty"`   //供应商名称
	SupplierID    int    `json:"supplier_id,omitempty"`     //供应商ID
	Type          int    `json:"type,omitempty"`            // created_at:最新上架agreement_price:协议价格,	guide_price指导价	activity_price营销价格	origin_rate常规利率	activity_rate营销利率
	Sort          bool   `json:"sort,omitempty"`            // false 倒叙 true正序
	Page          int    `json:"page"`                      // 请求页数
	PageSize      int    `json:"pageSize"`                  // 每页个数(最大值50)
	IsNew         int    `json:"is_new,omitempty"`          // 新品:1是0否
	IsHot         int    `json:"is_hot,omitempty"`          // 热卖:1是0否
	IsPromotion   int    `json:"is_promotion,omitempty"`    // 促销:1是0否
	IsImport      int    `json:"is_import,omitempty"`       // 是否导入(当前配置是否导入过):1是2否
}
type GoodsListRes struct {
	CommonRes
	Data struct {
		List []struct {
			Id                   int     `json:"id"`
			Title                string  `json:"title"`
			ImageUrl             string  `json:"image_url"`
			Source               int     `json:"source"`
			Category1Id          int     `json:"category_1_id"`
			Category2Id          int     `json:"category_2_id"`
			Category3Id          int     `json:"category_3_id"`
			BrandId              int     `json:"brand_id"`
			AgreementPrice       int     `json:"agreement_price"`
			GuidePrice           int     `json:"guide_price"`
			ActivityPrice        int     `json:"activity_price"`
			MarketPrice          int     `json:"market_price"`
			SalePrice            int     `json:"sale_price"`
			CostPrice            int     `json:"cost_price"`
			OriginRate           int     `json:"origin_rate"`
			ActivityRate         int     `json:"activity_rate"`
			MarketRate           int     `json:"market_rate"`
			Profit               int     `json:"profit"`
			ProfitRate           float64 `json:"profit_rate"`
			IsDisplay            int     `json:"is_display"`
			IsRecommend          int     `json:"is_recommend"`
			IsNew                int     `json:"is_new"`
			IsHot                int     `json:"is_hot"`
			Stock                int     `json:"stock"`
			Sales                int     `json:"sales"`
			Unit                 string  `json:"unit"`
			IsPromotion          int     `json:"is_promotion"`
			MinPrice             int     `json:"min_price"`
			MaxPrice             int     `json:"max_price"`
			CreatedAt            int     `json:"created_at"`
			SupplierId           int     `json:"supplier_id"`
			GatherSupplierId     int     `json:"gather_supplier_id"`
			FreightType          int     `json:"freight_type"`
			RecommendBrandStr    string  `json:"recommend_brand_str"`
			RecommendCategoryStr string  `json:"recommend_category_str"`
			SupplierName         string  `json:"supplier_name"`
			UpdatedAt            int     `json:"updated_at"`
			Sort                 int     `json:"sort"`
			IsPlugin             int     `json:"is_plugin"`
			Level1Price          int     `json:"level_1_price"`
			Level2Price          int     `json:"level_2_price"`
			Level3Price          int     `json:"level_3_price"`
			Level4Price          int     `json:"level_4_price"`
			Level5Price          int     `json:"level_5_price"`
			Level6Price          int     `json:"level_6_price"`
			Level7Price          int     `json:"level_7_price"`
			Level8Price          int     `json:"level_8_price"`
			Level9Price          int     `json:"level_9_price"`
			Level10Price         int     `json:"level_10_price"`
			Level1Profit         int     `json:"level_1_profit"`
			Level2Profit         int     `json:"level_2_profit"`
			Level3Profit         int     `json:"level_3_profit"`
			Level4Profit         int     `json:"level_4_profit"`
			Level5Profit         int     `json:"level_5_profit"`
			Level6Profit         int     `json:"level_6_profit"`
			Level7Profit         int     `json:"level_7_profit"`
			Level8Profit         int     `json:"level_8_profit"`
			Level9Profit         int     `json:"level_9_profit"`
			Level10Profit        int     `json:"level_10_profit"`
			Barcode              string  `json:"barcode"`
			ImportApps           string  `json:"import_apps"`
			IsBill               int     `json:"is_bill"`
			SingleOption         int     `json:"single_option"`
			SmallShopIdString    string  `json:"small_shop_id_string"`
			SupplyLine           string  `json:"supply_line"`
			IsVideoShop          int     `json:"is_video_shop"`
		} `json:"list"`
		Total      int    `json:"total"`
		Page       int    `json:"page"`
		PageSize   int    `json:"pageSize"`
		NextUrl    string `json:"next_url"`
		SeverRatio int    `json:"sever_ratio"`
	} `json:"data"`
}

// GoodsList 商品列表
func (s *Client) GoodsList(ctx context.Context, req GoodsListReq) (res *GoodsListRes, err error) {
	var method = "/app/product/storage/list"
	result, err := s.post(ctx, method, gconv.Map(req))
	if err != nil {
		return
	}
	err = gjson.New(result).Scan(&res)
	return
}