syntax = "v1"

info (
	title: // TODO: add title
	desc: // TODO: add description
	author: ""
	email: ""
)

import "basic.api"

service product {
	//获取分类产品列表
	@handler GetTagProductListHandler
	get /api/product/tag_product_list(GetTagProductListReq) returns (response);
	//获取产品阶梯价格信息
	@handler GetProductStepPriceHandler
	get /api/product/get_product_step_price(GetProductStepPriceReq) returns (response);
	//根据产品+配件搭配计算价格
	@handler CalculateProductPriceHandler
	post /api/product/calculate_product_price(CalculateProductPriceReq) returns (response);
	//获取详情页推荐产品列表
	@handler GetRecommendProductListHandler
	get /api/product/recommend(GetRecommendProductListReq) returns (response);
	//获取列表页推荐产品列表
	@handler HomePageRecommendProductListHandler
	get /api/product/home_page_recommend(HomePageRecommendProductListReq) returns (response);
	//获取产品详情
	@handler GetProductDetailHandler
	get /api/product/get_product_detail(GetProductDetailReq) returns (response);
}

//获取详情页推荐产品列表
type GetRecommendProductListReq {
	Num       int64 `form:"num,optional"`
	ProductId int64 `form:"product_id"`
}
type GetRecommandProductListRsp {
	Id                  int64              `json:"id"`
	Sn                  string             `json:"sn"`
	Title               string             `json:"title"`
	TitleCn             string             `json:"title_cn"`
	Cover               string             `json:"cover"`
	CoverMetadata       interface{}        `json:"cover_metadata"`
	CoverImg            string             `json:"cover_img"`
	CoverImgMetadata    interface{}        `json:"cover_img_metadata"`
	CoverDefault        []CoverDefaultItem `json:"cover_default"`
	Intro               string             `json:"intro"`
	Recommend           bool               `json:"recommend"`
	MinPrice            int64              `json:"min_price"`
	IsCustomization     int64              `json:"is_customization"`
	SizeCount           int64              `json:"size_count"`
	HaveOptionalFitting bool               `json:"have_optional_fitting"`
}
//获取分类产品列表
type GetTagProductListReq {
	BasicTagId   int64  `form:"basic_tag_id,optional"`  //传入则以该分类为最高层分类查询
	MerchantType int64  `form:"merchant_type,optional"` //商户类型
	TemplateTag  string `form:"template_tag,optional"`  //模板标签
	WithProduct  bool   `form:"with_product,optional"`  //是否携带分类下的产品
}
type GetTagProductListRsp {
	TotalCategoryProduct int         `json:"total_category_product"`
	TagMap               interface{} `json:"tag_map"`
}
type TagItem {
	TypeName       string        `json:"type_name"`
	TypeId         int64         `json:"type_id"`
	Icon           string        `json:"icon"`
	Sort           int64         `json:"sort"`
	LevelPrefix    string        `json:"level_prefix"`
	TagProductList []interface{} `json:"tag_product_list"` //分类下的产品
	ChildTagList   []*TagItem    `json:"child_tag_list"`
}
type TagProduct {
	Id            int64       `json:"id"`
	Sn            string      `json:"sn"`
	Title         string      `json:"title"`
	Cover         string      `json:"cover"`
	CoverMetadata interface{} `json:"cover_metadata"`
	SizeCount     uint32      `json:"size_count"`
	MinPrice      int64       `json:"min_price"`
	//彩膜列表
	CoverDefault        []CoverDefaultItem `json:"cover_default"`
	HaveOptionalFitting bool               `json:"have_optional_fitting"`
	Recommended         bool               `json:"recommended"`
	IsCustomization     int64              `json:"is_customization"`
}
type CoverDefaultItem {
	TemplateTag   string      `json:"template_tag"`
	Cover         string      `json:"cover"`
	CoverMetadata interface{} `json:"cover_metadata"`
}
//获取产品阶梯价格信息
type GetProductStepPriceReq {
	ProductId int64 `form:"product_id"`
}
//根据产品+配件搭配计算价格
type CalculateProductPriceReq {
	ProductId        int64 `json:"product_id"`
	SizeId           int64 `json:"size_id"`
	FittingId        int64 `json:"fitting_id,optional"`
	PurchaseQuantity int64 `json:"purchase_quantity"`
}
type CalculateProductPriceRsp {
	ItemPrice  string      `json:"item_price"`
	TotalPrice string      `json:"total_price"`
	StepRange  interface{} `json:"step_range"`
}

//获取列表页推荐产品(返回是这个维度数组)
type HomePageRecommendProductListReq {
	MerchantType int64 `form:"merchant_type"`
}
type HomePageRecommendProductListRsp {
	Id                  int64              `json:"id"`
	Sn                  string             `json:"sn"`
	Title               string             `json:"title"`
	Cover               string             `json:"cover"`
	CoverMetadata       interface{}        `json:"cover_metadata"`
	SizeCount           uint32             `json:"size_count"`
	MinPrice            int64              `json:"min_price"`
	CoverDefault        []CoverDefaultItem `json:"cover_default"`
	HaveOptionalFitting bool               `json:"have_optional_fitting"`
	IsCustomization     int64              `json:"is_customization"`
}

//获取产品详情(重构版)
type GetProductDetailReq {
	ProductId          int64  `form:"product_id"`           //产品id
	TemplateTag        string `form:"template_tag"`         //模板标签
	SelectedColorIndex int    `form:"selected_color_index"` //模板标签颜色索引
	Logo               string `form:"logo,optional"`        //logo地址
}
type GetProductDetailRsp {
	Logo                 string               `json:"logo"`                    //logo
	TemplateTagColorInfo TemplateTagColorInfo `json:"template_tag_color_info"` //标签颜色信息
	ProductInfo          ProductInfo          `json:"product_info"`            //产品基本信息
	BaseColors           interface{}          `json:"base_colors"`             //一些返回写死的颜色
	SizeList             []SizeInfo           `json:"size_list"`               //尺寸相关信息
}
type SizeInfo {
	Id              int64         `json:"id"`                //尺寸id
	IsDefault       int64         `json:"is_default"`        //是否默认显示
	Title           interface{}   `json:"title"`             //尺寸标题信息
	Capacity        string        `json:"capacity"`          //尺寸名称
	PartsCanDeleted int64         `json:"parts_can_deleted"` //配件是否可删除
	IsHot           int64         `json:"is_hot"`            //是否热门
	MinPrice        string        `json:"min_price"`         //最低价
	TemplateInfo    interface{}   `json:"template_info"`     //模板相关信息
	ModelInfo       ModelInfo     `json:"model_info"`        //模型相关信息
	FittingList     []FittingInfo `json:"fitting_list"`      //配件相关信息
}
type FittingInfo {
	Id            int64       `json:"id"`             //配件id
	IsHot         int64       `json:"is_hot"`         //是否热门
	MaterialImage string      `json:"material_image"` //配件材质图
	DesignInfo    interface{} `json:"design_info"`    //配件设计信息
	Price         string      `json:"price"`          //配件价格
	Name          string      `json:"name"`           //配件名
	IsDefault     int64       `json:"is_default"`     //是否默认的配件
}
type ModelInfo {
	Id              int64       `json:"id"`          //模型id
	ModelDesignInfo interface{} `json:"design_info"` //模型设计信息
	LightInfo       LightInfo   `json:"light_info"`  //灯光信息
}
type LightInfo {
	Id              int64       `json:"id"`                //灯光id
	LightName       string      `json:"light_name"`        //灯光组名称
	LightDesignInfo interface{} `json:"light_design_info"` //灯光设计信息
}
type ProductInfo {
	Id              int64       `json:"id"`                //产品id
	Description     string      `json:"description"`       //产品描述
	ProductType     int64       `json:"product_type"`      //产品类型id
	ProductTypeName string      `json:"product_type_name"` //产品类型名称
	Title           string      `json:"title"`             //产品标题
	IsEnv           int64       `json:"is_env"`            //是否环保
	IsMicro         int64       `json:"is_micro"`          //是否可微波炉
	IsCustomization int64       `json:"is_customization"`  //是否可定制产品
	WebsiteUnit     interface{} `json:"website_unit"`      //产品前台网站单位
}
type TemplateTagColorInfo {
	Colors             [][]string  `json:"colors"`               //传入logo对应的算法颜色组
	SelectedColorIndex int         `json:"selected_color_index"` //选择的模板标签的颜色索引值
	TemplateTagGroups  interface{} `json:"template_tag_groups"`  //模板标签分组信息
}