package tiktok_api

import freightTemplate_create_request "git.rosy.net.cn/baseapi/platformapi/tiktok_shop/sdk-golang/api/freightTemplate_create/request"

const (
	//限购模型
	TradeLimitModelWeight   = 1 //重量
	TradeLimitModelQuantity = 2 //数量
	TradeLimitModelRegion   = 3 //地区
	TradeLimitModelMoney    = 4 //金额

	//限购资源类型
	TradeLimitResourceDouDian  = 1 //抖店
	TradeLimitResourceStore    = 2 //门店
	TradeLimitResourceSkuID    = 3 //商品ID
	TradeLimitResourceSku      = 4 //sku
	TradeLimitResourceCategory = 5 //类目
	TradeLimitResourceActivity = 6 //活动
	TradeLimitResourceSkuLabel = 7 //商品标

	//限购维度
	TradeLimitSubjectEndUser         = 1 //端用户
	TradeLimitSubjectUserGroup       = 2 //用户组用户
	TradeLimitSubjectDevice          = 3 //设备
	TradeLimitSubjectBuyMobile       = 4 //下单电话
	TradeLimitSubjectReceivingMobile = 5 //收件电话
	TradeLimitSubjectIDCard          = 6 //身份证号
	TradeLimitSubjectPayAccount      = 7 //支付账号

	//联系方式类型
	LinkTypePhone      = 0 //手机
	LinkTypeOrdinary   = 1 //普通座机
	LinkTypeEnterprise = 2 //企业座机

	//店铺状态
	StoreStatusOffline  = 0 // 暂停营业/下线
	StoreStatusOnline   = 1 // 营业中/上线
	StoreStatusChecking = 3 //审核通过后可上线（可能暂时用不上）

	//店铺绑定状态
	StoreStateBinding               = 1 //绑定中
	StoreStateSuccessBind           = 2 //绑定成功
	StoreStateQualificationChecking = 3 //资质验证中
	StoreStateAccountChecking       = 4 //账户认证中
	StoreStateNormalBusiness        = 5 //正常营业（c端可下单）
	StoreStateSuspendBusiness       = 6 //暂停营业

	//poi审核子状态 Store，PoiAudiInfo 同时使用
	PoiAuditStateChecking    = 1 //审核中
	PoiAuditStateSuccessBind = 2 //绑定成功
	PoiAuditStateReject      = 3 //驳回

	//资质审核状态
	QualStateUnsubmitted    = 0 //未提交
	QualStateChecking       = 1 //审核中
	QualStateCheckingPassed = 2 //审核通过
	QualStateReject         = 3 //驳回

	//账户验证状态
	RemitStateUnsubmitted    = 0 //未提交
	RemitStateChecking       = 1 //验证中
	RemitStateCheckingPassed = 2 //通过
	RemitStateDefeat         = 3 //失败

	//开户状态
	OpenAccountStateOpen    = 1 //已开户
	OpenAccountStateNotOpen = 0 //未开户

	//停业类型
	SuspendTypeInitiative      = 1 //商家主动操作
	SuspendTypePlatformPenalty = 2 //平台处罚

	//关联抖店信息 RelShopUser
	//1 营业状态
	OperateStatusNormalBusiness         = 0 //正常营业
	OperateStatusBusinessReorganization = 1 //停业整顿
	//2 业务类型
	BizTypeSecondClassEcommerce = 0 //二级电商
	BizTypeConfidenceBuy        = 1 //放心购
	//3 资质类型
	VTypeEnterprise = 0  //企业
	VTypePersonal   = 11 //个人
	VTypeIndividual = 41 //个体
	//4 店铺类型
	ShopTypeNormal    = 0 //普通
	ShopTypeFranchise = 1 //专营
	ShopTypeMonopoly  = 2 //专卖
	ShopTypeFlagShip  = 3 //旗舰

	//运费模板信息
	//计价方式
	CalculateTypeWeight = 1 //按重量
	CalculateTypeNum    = 2 //按数量，注：模板类型为1、2、3时，计价类型传2
	//模板类型
	RuleTypeLadderPricing  = 0 //阶梯计价
	RuleTypeFlatShipping   = 1 //固定运费
	RuleTypeFreeShipping   = 2 //卖家包邮
	RuleTypeCashOnDelivery = 3 //货到付款
	//模板规则信息
	IsDefaultYes = 1 //默认计价方式
	IsDefaultNo  = 0 //不是默认计价方式
	//直辖市名称
	MunicipalityBeiJin    = "北京市"
	MunicipalityShangHai  = "上海市"
	MunicipalityTianJin   = "天津市"
	MunicipalityChongQing = "重庆市"
	//直辖市城市代码

	MunicipalityBeiJinCode    = 110000
	MunicipalityShangHaiCode  = 310000
	MunicipalityTianJinCode   = 120000
	MunicipalityChongQingCode = 500000
	//快递方式
	TransferTypeExpress = 1 //目前仅支持快递

	//创建围栏信息
	//围栏形状
	ShapeCircular = 1 //圆
	ShapePolygon  = 2 //多边形，各点经纬度逆时针传递

)

var MunicipalityCode = map[string]int{
	MunicipalityBeiJin:    MunicipalityBeiJinCode,
	MunicipalityShangHai:  MunicipalityShangHaiCode,
	MunicipalityTianJin:   MunicipalityTianJinCode,
	MunicipalityChongQing: MunicipalityChongQingCode,
}

//门店信息
type Store struct {
	StoreID          int      `json:"id"`
	Name             string   `json:"name"`
	StoreCode        string   `json:"store_code"`  //门店编码
	RelShopID        int      `json:"rel_shop_id"` //关联抖店Id
	PoiID            int      `json:"poi_id"`
	Longitude        string   `json:"longitude"`          //经度
	Latitude         string   `json:"latitude"`           //纬度
	Province         string   `json:"province"`           //省份
	ProvinceCode     string   `json:"province_code"`      //省份code
	City             string   `json:"city"`               //市
	CityCode         string   `json:"city_code"`          //城市code
	District         string   `json:"district"`           //区
	DistrictCode     string   `json:"district_code"`      //区code
	Town             string   `json:"town"`               //街道/镇
	TownCode         string   `json:"town_code"`          //街道/镇code
	Address          string   `json:"address"`            //详细地址
	Contact          string   `json:"contact"`            //联系方式
	OpenTime         OpenTime `json:"open_time"`          //营业时间
	IsOpenNow        bool     `json:"is_open_now"`        //当前时间是否在营业时间中，如果不在则是打烊中
	State            int      `json:"state"`              //绑定状态 1绑定中;2绑定成功;3:资质验证中;4账户认证中;5正常营业(c端可下单);6暂停营业\
	PoiAuditState    int      `json:"poi_audit_state"`    //poi审核子状态：1审核中;2绑定成功;3驳回
	QualState        int      `json:"qual_state"`         //资质审核状态：0未提交；1审核中；2审核通过；3驳回
	RemitState       int      `json:"remit_state"`        //账户验证状态：0未提交；1验证中；2通过；3失败
	OpenAccountState int      `json:"open_account_state"` //开户状态：0未开户;1已开户
	SuspendType      int      `json:"suspend_type"`       //停业类型:1商家主动操作;2平台处罚
	BoundTime        int      `json:"bound_time"`         //绑定成功的时间
	CreateTime       int      `json:"create_time"`        // 创建时间
	UpdateTime       int      `json:"update_time"`        //更新时间
	QualPassTime     int      `json:"qual_pass_time"`     //资质验证通过时间
	RemitPassTime    int      `json:"remit_pass_time"`    //账户验证通过时间
	OpenAccountTime  int      `json:"open_account_time"`  //变成已开户的时间
}

//关联抖店信息
type RelShopUser struct {
	ID             int    `json:"id"`               //关联店铺ID
	ShopName       string `json:"shop_name"`        //店铺名称
	ShopChargeName string `json:"shop_charge_name"` //商家负责人
	ToutiaoID      int    `json:"toutiao_id"`       //uid
	OceanID        int    `json:"ocean_id"`         //商业化id
	OperateStatus  int    `json:"operate_status"`   //营业状态，0正常营业 1停业整顿
	BizType        int    `json:"biz_type"`         //业务类型 0二类电商 1放心购
	VType          int    `json:"v_type"`           //资质类型 11个人 41 个体 0企业
	ShopType       int    `json:"shop_type"`        //店铺类型 0普通,1专营,2专卖,3旗舰
}

//poi审核信息
type PoiAudiInfo struct {
	PoiAuditID    string   `json:"poi_audit_id"`    //poi审核id
	PoiAuditState int      `json:"poi_audit_state"` //poi审核子状态：1审核中;2绑定成功;3驳回
	StoreID       int      `json:"store_id"`        //门店ID
	Name          string   `json:"name"`            //门店名称
	StoreCode     string   `json:"store_code"`      //门店编码
	Longitude     string   `json:"longitude"`       //经度
	Latitude      string   `json:"latitude"`        //纬度
	Province      string   `json:"province"`        //省份
	ProvinceCode  string   `json:"province_code"`   //省份code
	City          string   `json:"city"`            //市
	District      string   `json:"district"`        //区
	Address       string   `json:"address"`         //详细地址
	Contact       string   `json:"contact"`         //联系方式
	OpenTime      OpenTime `json:"open_time"`       //营业时间
}

//营业时间
type OpenTime struct {
	DayMap map[int]string `json:"day_map"`
	Custom string         `json:"custom"` //暂时不使用
}

//负责人信息
type StoreChargeInfo struct {
	ChargeName   string `json:"charge_name"`   //负责人姓名
	ChargeMoblie string `json:"charge_moblie"` //负责人电话
}

//单个获取门店信息
type StoreDetail struct {
	Store           Store           `json:"store"`             //门店信息
	RelShopUser     RelShopUser     `json:"rel_shop_user"`     //关联抖店信息
	PoiAudiInfo     PoiAudiInfo     `json:"poi_audi_info"`     //poi审核信息
	StoreChargeInfo StoreChargeInfo `json:"store_charge_info"` //负责人信息
}

//批量创建门店
type BatchCreateStoreReq struct {
	StoreList []*StoreList `json:"store_list"`
}
type StoreList struct {
	RowID     int64     `json:"row_id"`
	Name      string    `json:"name"`
	StoreCode string    `json:"store_code"` //门店编码
	Longitude string    `json:"longitude"`  //经度
	Latitude  string    `json:"latitude"`   //纬度
	Province  string    `json:"province"`   //省份
	City      string    `json:"city"`       //市
	District  string    `json:"district"`   //区
	Address   string    `json:"address"`    //详细地址
	Contact   string    `json:"contact"`    //联系方式
	OpenTime  *OpenTime `json:"open_time"`  //营业时间
	StoreID   int64     `json:"store_id"`   //创建成功的门店ID
}

//批量创建门店
type EditStoreReq struct {
	RowID     int      `json:"row_id"`
	Name      string   `json:"name"`
	StoreCode string   `json:"store_code"` //门店编码
	Longitude string   `json:"longitude"`  //经度
	Latitude  string   `json:"latitude"`   //纬度
	Province  string   `json:"province"`   //省份
	City      string   `json:"city"`       //市
	District  string   `json:"district"`   //区
	Address   string   `json:"address"`    //详细地址
	Contact   string   `json:"contact"`    //联系方式
	OpenTime  OpenTime `json:"open_time"`  //营业时间
	StoreID   int      `json:"store_id"`   //创建成功的门店ID
}

//暂停营业
type StoreSuspendReq struct {
	StoreID int    `json:"store_id"` //门店ID
	Reason  string `json:"reason"`   //停业原因
}

//门店恢复营业
type UnsuspendStoreReq struct {
	StoreID int    `json:"store_id"` //门店ID
	Reason  string `json:"reason"`   //停业原因
}

//创建限售规则模板
type CreateTradeLimitTemplateReq struct {
	StoreID                   int64                        `json:"store_id"`                      //门店ID
	TradeLimitRuleRequestList []*TradeLimitRuleRequestList `json:"trade_limit_rule_request_list"` //限购参数
	TradeLimitResourceObject  TradeLimitResourceObject     `json:"trade_limit_resource_object"`   //限购资源值
	TradeLimitPattern         TradeLimitPattern            `json:"trade_limit_pattern"`           //限购值，模型为重量则单位为毫克，模型为金额则单位为分
	TimePeriod                TimePeriod                   `json:"time_period"`                   //限购时间
}
type TradeLimitRuleRequestList struct {
	TradeLimitModel    int32 `json:"trade_limit_model"`    //限购模型 1-重量，2-数量，3-地区，4-金额
	TradeLimitResource int32 `json:"trade_limit_resource"` //限购资源类别1-抖店，2-门店，3-商品ID，4-sku,5-类目，6-活动，7-商品标
}
type TradeLimitResourceObject struct {
	TradeLimitResourceIDList []string `json:"trade_limit_resource_id_list"` //限购资源值列表
}
type TradeLimitPattern struct {
	Minimum       int64 `json:"minimum"`        //单次下限
	Maximum       int64 `json:"maximum"`        //单次上限
	CumulativeMax int64 `json:"cumulative_max"` //累计限购值
}
type TimePeriod struct {
	TradeLimitSubjectList []int64 `json:"trade_limit_subject_list"` //限购维度1 // 端用户（比如uid=122，aid=1128） 2 // 用户组用户（比如uid=122，group=aweme） 3 // 设备 4 // 下单电话 5 // 收件电话 6 // 身份证号 7 // 支付账号
}

//门店绑定限售模板
type BindBindStoreSaleLimitReq struct {
	StoreID     int64 `json:"store_id"`      //门店ID
	SaleLimitID int64 `json:"sale_limit_id"` //限售模板ID
}

//创建店铺地址库
type CreateAddressReq struct {
	Address *Address `json:"address"`  // 地址信息
	StoreId int64    `json:"store_id"` // 门店ID（新建地址绑定在该门店下，非门店场景无需填写）
}
type Address struct {
	UserName   string `json:"user_name"`   // 联系人姓名
	Mobile     string `json:"mobile"`      // 手机号码
	ProvinceId int64  `json:"province_id"` // 省份ID
	CityId     int64  `json:"city_id"`     // 城市ID
	TownId     int64  `json:"town_id"`     // 区ID
	Detail     string `json:"detail"`      // 详细地址
	StreetId   int64  `json:"street_id"`   // 街道ID
	LinkType   int32  `json:"link_type"`   // 联系方式类型(0-手机,1-普通座机,2-企业座机)
	FixedPhone string `json:"fixed_phone"` // 普通座机格式：区号-座机号-分机号(分机号选填)、区号3~4位、座机号7~8位、分机号不超过5位。企业座机：400/800开头不超过10位、95开头在5~8we
	Remark     string `json:"remark"`      // 售后备注
}

// 创建运费模板
type StoreTempalteReq struct {
	Template Template  `json:"template"` //运费模板信息
	Columns  []Columns `json:"columns"`  //运费模板规则

}

//运费模板信息
type Template struct {
	TemplateName    string `json:"templateName"`    //模板名称
	ProductProvince int64  `json:"productProvince"` //发货省份id
	ProductCity     int64  `json:"productCity"`     //发货城市id
	CalculateType   int64  `json:"calculateType"`   //计价方式-1.按重量 2.按数量；模板类型为1、2、3时，计价类型传2
	TransferType    int64  `json:"transferType"`    //快递方式-1.快递 目前仅支持1
	RuleType        int64  `json:"ruleType"`        //模板类型-0:阶梯计价 1:固定运费 2:卖家包邮 3:货到付款
	FixedAmount     int64  `json:"fixedAmount"`     //固定运费金额(单位:分) 固定运费模板必填 1-9900之间的整数
}

//运费模板规则信息；
//每种类型模板可创建的规则类型: 阶梯计价模板-默认规则，普通计价规则，包邮规则，限运规则;
//固定运费模板-包邮规则，限运规则;
//固定运费模板-包邮规则，限运规则;
//包邮模板-限运规则;
//货到付款模板-限运规则
type Columns struct {
	FirstWeight      float64                                            `json:"firstWeight"`      //首重(单位:kg) 按重量计价必填 0.1-999.9之间的小数，小数点后一位
	FirstWeightPrice float64                                            `json:"firstWeightPrice"` //首重价格(单位:元) 按重量计价必填 0.00-30.00之间的小数，小数点后两位
	FirstNum         int64                                              `json:"firstNum"`         //首件数量(单位:个) 按数量计价必填 1-999的整数
	FirstNumPrice    float64                                            `json:"firstNumPrice"`    //首件价格(单位:元)按数量计价必填 0.00-30.00之间的小数，小数点后两位
	AddWeight        float64                                            `json:"addWeight"`        //续重(单位:kg) 按重量计价必填 0.1-999.9之间的小数，小数点后一位
	AddWeightPrice   float64                                            `json:"addWeightPrice"`   //续重价格(单位:元) 按重量计价必填 0.00-30.00之间的小数，小数点后两位
	AddNum           int64                                              `json:"addNum"`           //续件(单位:个) 按数量计价必填 1-999的整数
	AddNumPrice      float64                                            `json:"addNumPrice"`      //续件价格(单位:元) 按数量计价必填 0.00-30.00之间的小数，小数点后两位
	IsDefault        int64                                              `json:"isDefault"`        //是否默认计价方式(1:是；0:不是)
	IsLimited        bool                                               `json:"isLimited"`        //是否限运规则
	RuleAddress      string                                             `json:"ruleAddress"`      //当前规则生效的地址，非默认规则必填。map>>>的json格式，省->市->区->街道，填至选择到的层级即可，仅限售规则支持四级街道
	IsOverFree       bool                                               `json:"isOverFree"`       //是否包邮规则
	OverWeight       float64                                            `json:"overWeight"`       //满xx重量包邮(单位:kg)0.1-10.0之间的小数，小数点后一位
	OverAmount       int64                                              `json:"overAmount"`       //满xx金额包邮(单位:分)10-99900的整数
	OverNum          int64                                              `json:"overNum"`          //满xx件包邮 1-10之间的整数
	MinSkuAmount     int64                                              `json:"minSkuAmount"`     //最小金额限制，单位分，不限制填-1
	MaxSkuAmount     int64                                              `json:"maxSkuAmount"`     //最大金额限制，单位分，不限制填-1
	ProvinceInfos    []freightTemplate_create_request.ProvinceInfosItem `json:"province_infos"`   //当前规则生效的地址
}

//当前规则生效的地址，统一以List结构返回，该结构为嵌套结构。
//对应的json格式为
//[{"id":"32","children":[{"id":"320500","children":[{"id":"320508","children":[{"id":"320508014"},{"id":"320508004"}]}]}]}]
//注意：返回的为最新的四级地址版本（地址存储升级变更的可能，以最新的返回）
type ProvinceInfosItem struct {
	ID       int                 `json:"id"`       //地址id，第一级是省份、第二级是城市、第三级是区、第四级是街道
	Children []ProvinceInfosItem `json:"children"` //下一级地址id
}
