package model

import "time"

const (
	SkuCategoryNormal  = 0
	SkuCategorySpecial = 1
)

const (
	SpecUnitG  = 0
	SpecUnitKG = 1
	SpecUnitL  = 2
	SpecUnitML = 3
)

const (
	NoCatCatgoryID     = 291
	NOSkuNameImg       = "https://image.jxc4.com/noGoodsImg.jpg"
	SkuNameImgStandard = "?imageMogr2/thumbnail/!800x800r/gravity/Center/crop/800x800"
	SkuNameImgToPng    = "?imageView2/0/format/png/q/75"
)

const (
	SkuStatusDeleted  = -1 // 商品删除
	SkuStatusDontSale = 0  // 商品不可售
	SkuStatusNormal   = 1  // 商品正常
)

const (
	CategoryStatusDisabled = 0
	CategoryStatusEnable   = 1
)

var (
	SpecUnitNames = []string{
		"g",
		"kg",
		"L",
		"ml",
	}
)

var (
	UnitNames = []string{
		"份",
		"袋",
		"瓶",
		"只",
		"组",
		"个",
		"盒",
		"把",
		"半只",
		"包",
		"条",
		"根",
		"箱",
		"听",
		"套",
		"罐",
		"件",
		"块",
		"片",
		"支",
		"杯",
		"桶",
		"串",
		"提",
	}
	SkuNamePrefixNames = []string{
		"新鲜",
		"组合菜",
		"熟食",
		"鲜活现杀",
		"冰冻",
		"净菜",
		"非熟食",
	}

	SpecialUnit        = "份"
	SpecialSpecQuality = 500
	SpecialSpecUnit    = "g"
	SpecialSpecUnit2   = "ml"
)

var (
	CategoryTypeName = map[int]string{
		SkuCategoryNormal:  "普通类别",
		SkuCategorySpecial: "特殊类别",
	}
	SkuStatusName = map[int]string{
		SkuStatusDeleted:  "删除",
		SkuStatusDontSale: "下架",
		SkuStatusNormal:   "上架",
		2:                 "删除",
		3:                 "不可售",
		4:                 "可售",
	}
)

// 这个指的是厂商（比如京东到家，饿百）自已的商品分类，与商家自己的商品分类是两回事
type SkuVendorCategory struct {
	ModelIDCUL

	VendorCategoryID string `orm:"size(48);column(vendor_category_id)" json:"vendorCategoryID"`
	VendorID         int    `orm:"column(vendor_id)" json:"vendorID"`
	Name             string `orm:"size(255);index" json:"name"`
	IsLeaf           int8   `json:"isLeaf"`
	Level            int    `json:"level"`
	ParentID         string `orm:"column(parent_id);size(48);index" json:"parentID"` // 父ID，引用的是VendorCategoryID而不是ID
}

func (*SkuVendorCategory) TableUnique() [][]string {
	return [][]string{
		[]string{"VendorCategoryID", "VendorID"},
	}
}

// 基础数据，除了商家商品类别外，基本都以京东到家为准
type SkuCategory struct {
	ModelIDCULD

	Name     string `orm:"size(255)" json:"name"`
	ParentID int    `orm:"column(parent_id)" json:"parentID"`
	Level    int8   `json:"level"`
	Type     int8   `json:"type"` // 类别类型，即是普通类别还是特殊用于做活动的类别
	Seq      int    `json:"seq"`

	IsHidden        int   `orm:"column(is_hidden);default(1)" json:"isHidden"`      //分类是否隐藏
	JdCategoryID    int64 `orm:"column(jd_category_id)" json:"jdCategoryID"`        // 这个是指对应的京东商品类别
	EbaiCategoryID  int64 `orm:"column(ebai_category_id)" json:"ebaiCategoryID"`    // 这个是指对应的饿百商品类别
	MtwmCategoryID  int64 `orm:"column(mtwm_category_id)" json:"mtwmCategoryID"`    // 这个是指对应的美团外卖商品类别
	DdCategoryID    int64 `orm:"column(dd_category_id)" json:"ddCategoryID"`        // 这个是指对应的抖音外卖商品类别
	TaoCategoryID   int64 `orm:"column(tao_category_id)" json:"taoCategoryID"`      // 这个是指对应的淘宝商品类别
	YbCategoryID    int64 `orm:"column(yb_category_id)" json:"ybCategoryID"`        // 这个是指对应的银豹商品类别
	JdsCategoryID   int64 `orm:"column(jds_category_id)" json:"jdsCategoryID"`      // 这个是指对应的京东商城类别
	GoMeiCategoryID int64 `orm:"column(go_mei_category_id)" json:"goMeiCategoryID"` // 这个是指对应的国美商城类别

	Status int8   `orm:"default(1)" json:"status"` //分类状态，0表示禁用，1表示启用
	Img    string `orm:"size(512)" json:"img"`     //分类图片

	ExdName   string `json:"exdName"` //饿鲜达对应分类名
	ExdSeq    int    `json:"exdSeq"`
	IsExdSpec int    `json:"isExdSpec"` //是否是饿鲜达特有新建的分类
	IsExdSync int    `json:"isExdSync"` //饿鲜达分类是否同步到平台

	IsSync int `json:"isSync"` //是否同步到平台
}

func (*SkuCategory) TableUnique() [][]string {
	return [][]string{
		[]string{"Name", "Level", "DeletedAt"},
	}
}

type SkuName struct {
	ModelIDCULD
	Prefix           string     `orm:"size(255)" json:"prefix"`
	Name             string     `orm:"size(255)" json:"name"`
	ExPrefix         string     `orm:"size(255)" json:"exPrefix"`
	ExPrefixBegin    *time.Time `orm:"null" json:"exPrefixBegin"`
	ExPrefixEnd      *time.Time `orm:"null" json:"exPrefixEnd"`
	ExVendorID       int        `orm:"column(ex_vendor_id)" json:"exVendorID"`
	BrandID          int        `orm:"column(brand_id);default(0)" json:"brandID"`                   // todo，此属性暂时没有使用，且有问题，应该是不同平台都有一个brandid
	CategoryID       int        `orm:"column(category_id);index" json:"categoryID"`                  // 标准类别
	JdCategoryID     int64      `orm:"column(jd_category_id)" json:"jdCategoryID"`                   // 这个是指对应的京东商品类别
	IsGlobal         int8       `orm:"default(1)" json:"isGlobal"`                                   // 是否是全部（全国）可见，如果否的话，可见性由SkuPlace决定
	Unit             string     `orm:"size(8)" json:"unit"`                                          //
	SpecQuality      float32    `json:"-"`                                                           // 为份必然为500，这个主要作用只是用于确保SkuName的唯一性
	SpecUnit         string     `orm:"size(8)" json:"-"`                                             // 为份必然为克，这个主要作用只是用于确保SkuName的唯一性
	Price            int        `json:"price"`                                                       // 单位为分，标准价，不为份的就为实际标准价，为份的为每市斤价，实际还要乘质量。todo 为份的确定必须有质量
	Img              string     `orm:"size(512)" json:"img"`                                         //
	Img2             string     `orm:"size(512)" json:"img2"`                                        // 第二张图片
	Img3             string     `orm:"size(512)" json:"img3"`                                        //第三张图片
	Img4             string     `orm:"size(512)" json:"img4"`                                        //第三张图片
	Img5             string     `orm:"size(512)" json:"img5"`                                        //第三张图片
	ImgWatermark     string     `orm:"size(512)" json:"imgWatermark"`                                //图片水印
	ImgMix           string     `orm:"size(512)" json:"imgMix"`                                      //图片混合水印的图片
	DescImg          string     `orm:"size(255)" json:"descImg"`                                     // 商品详情图片描述
	Upc              *string    `orm:"size(20)"`                                                     // 标品upc码
	UpcBrandName     string     `orm:"column(upc_brand_name);size(16)" json:"upcBrandName"`          // upc标品的品牌名称
	UpcTiktokBrandId string     `orm:"column(upc_tiktok_brand_id);size(16)" json:"upcTiktokBrandId"` // 根据upc码获取到的抖音品牌id
	Status           int        `orm:"default(1)" json:"status"`                                     // skuname状态，取值同sku.Status
	IsSpu            int8       `orm:"column(is_spu)" json:"isSpu"`                                  // 用于指明是否SKUNAME当成SPU
	YbNameSuffix     string     `json:"ybNameSuffix"`                                                //银豹商品后缀
	JdsStockSwitch   int8       `orm:"default(1)" json:"jdsStockSwitch"`                             //京东商城总库存
	PreparationTime  int        `orm:"default(1)" json:"preparationTime"`                            //商品准备时长
	BestSeller       int        `json:"bestSeller"`                                                  //畅销品 0不是 1是
	Video            string     `json:"video"`                                                       //商品视频地址
	VideoID          string     `orm:"column(video_id)" json:"videoID"`                              //商品视频美团ID
	TiktokAttribute  string     `orm:"column(tiktok_attribute);size(1024)" json:"tiktokAttribute"`   //抖音分类属性的存储
	MtAttribute      string     `orm:"column(mt_attribute);size(1024)" json:"mtAttribute"`           //美团分类属性的存储
	EbaiAttribute    string     `orm:"column(ebai_attribute);size(1024)" json:"ebaiAttribute"`       //美团分类属性的存储
	SellPoint        string     `orm:"column(sell_point);size(128)" json:"sellPoint"`                // 商品卖点 :(1)限制长度最多不能超过15个字符。 (2)不允许上传emoji等表情符。 (3)更新时传递EMPTY_VALUE支持置空。
	SellPointTimes   string     `orm:"column(sell_point_times);size(256)" json:"sellPointTimes"`     // 商品卖点展示期，更新时传递EMPTY_VALUE支持置空。{"start_time":1,"end_time":2} 秒级时间戳
	QuaPictures      string     `orm:"column(qua_pictures);size(512)" json:"quaPictures"`            // 商品资质图片，非必填，医疗器械必须传，保健食品、特殊医学配方食品建议传
	QuaEffectiveDate int64      `orm:"column(qua_effective_date)" json:"quaEffectiveDate"`           // 商品资质有效期，传10位秒级的时间戳。-1：永久有效。
	QuaApprovalDate  int64      `orm:"column(qua_approval_date)" json:"quaApprovalDate"`             // 批准日期，格式为10位秒级的时间戳。
	SpecialPictures  string     `orm:"column(special_pictures);type(text)" json:"specialPictures"`   // 批准日期，格式为10位秒级的时间戳。
}

func (*SkuName) TableUnique() [][]string {
	return [][]string{
		[]string{"Name", "Prefix", "SpecQuality", "SpecUnit", "Unit", "IsSpu", "Upc", "DeletedAt"},
		[]string{"Upc", "DeletedAt"},
	}
}

func (*SkuName) TableIndex() [][]string {
	return [][]string{
		[]string{"ExPrefix", "ExPrefixBegin", "ExPrefixEnd", "DeletedAt"},
	}
}

type Sku struct {
	ModelIDCULD
	CategoryID         int     `orm:"column(category_id)" json:"categoryID"` // 特殊类别，一般用于秒杀，特价之类的特殊类别
	NameID             int     `orm:"column(name_id)" json:"nameID"`         // todo 这个索引应该要求唯一
	SkuIndex           int     `json:"-"`
	Comment            string  `orm:"size(255)" json:"comment"`
	SpecQuality        float32 `json:"specQuality"`
	SpecUnit           string  `orm:"size(8)" json:"specUnit"` // 质量或容量
	Weight             int     `json:"weight"`                 // 重量/质量，单位为克，当相应的SkuName的SpecUnit为g或kg时，必须等于SpecQuality
	Status             int     `json:"status"`
	Seq                int     `json:"seq"`
	ExdSkuID           string  `orm:"column(exd_sku_id)" json:"exdSkuID"` //饿鲜达商品ID
	ExdCategoryThirdID int     `orm:"column(exd_category_third_id)" json:"exdCategoryThirdID"`
	EclpID             string  `orm:"column(eclp_id)" json:"eclpID"` //eclp物料商品ID
	MinOrderCount      int     `json:"minOrderCount"`                //最少起购份数，美团用
	LadderBoxNum       int     `json:"ladderBoxNum"`                 //包装费x件  ，美团用
	LadderBoxPrice     int     `json:"ladderBoxPrice"`               //包装费y元  ，美团用
}

type SkuAndName struct {
	Sku
	Name           string     `json:"name"`
	Unit           string     `json:"unit"`
	Prefix         string     `json:"prefix"`
	IsSpu          int        `json:"isSpu"`
	Upc            string     `json:"upc"`
	ExPrefix       string     `json:"exPrefix"`
	ExPrefixBegin  *time.Time `json:"exPrefixBegin"`
	ExPrefixEnd    *time.Time `json:"eExPrefixEndxPrefixEnd"`
	Price          int        `json:"price"`
	StoreSkuStatus int        `json:"storeSkuStatus"`
	ActPrice       int        `json:"actPrice"`
	ActID          int        `orm:"column(act_id)" json:"actID"`
	ActType        int        `orm:"column(act_type)" json:"actType"`

	EarningPrice int `json:"earningPrice"`
	EarningActID int `orm:"column(earning_act_id)" json:"earningActID"`
}

func (*Sku) TableUnique() [][]string {
	return [][]string{
		[]string{"NameID", "SpecQuality", "SpecUnit", "DeletedAt"},
	}
}

type SkuNamePlaceBind struct {
	ModelIDCUL

	NameID    int `orm:"column(name_id)"`
	PlaceCode int
}

func (*SkuNamePlaceBind) TableUnique() [][]string {
	return [][]string{
		[]string{"NameID", "PlaceCode"},
	}
}

type SkuWithVendor struct {
	*Sku
	MapList []*ThingMap `json:"mapList"`
}

type SkuNameExt struct {
	SkuName
	Skus         []*SkuWithVendor `orm:"-" json:"skus"`
	SkusStr      string           `json:"-"`
	FullName     string           `json:"fullName"`
	Places       []int            `orm:"-" json:"places"`
	PlacesStr    string           `json:"-"`
	MidUnitPrice int              `json:"midUnitPrice"`

	SkuID          int    `orm:"column(sku_id)" json:"skuID"`
	JdCategoryID   string `json:"jdCategoryID"`
	JdsCategoryID  string `json:"jdsCategoryID"`
	EbaiCategoryID string `json:"ebaiCategoryID"`
	MtwmCategoryID string `json:"mtwmCategoryID"`
	TaoCategoryID  string `json:"TaoCategoryID"`
	DdCategoryID   string `json:"ddCategoryID"`
}

type SkuExinfoMap struct {
	ModelIDCULD

	NameID          int       `orm:"column(name_id)" json:"nameID"`
	VendorID        int       `orm:"column(vendor_id)" json:"vendorID"`
	BeginAt         time.Time `orm:"type(datetime);index" json:"beginAt"`        //设置起始时间
	EndAt           time.Time `orm:"type(datetime);index" json:"endAt"`          //设置结束时间
	ExPrefix        string    `orm:"size(255)" json:"exPrefix"`                  //额外前缀
	ImgWatermark    string    `orm:"size(512)" json:"imgWatermark"`              //图片水印
	ImgWatermarkMix string    `orm:"size(512)" json:"ImgWatermarkMix"`           //合成水印图
	BrandID         int       `orm:"column(brand_id);default(0)" json:"brandID"` //品牌ID
}

func (*SkuExinfoMap) TableIndex() [][]string {
	return [][]string{
		[]string{"NameID", "VendorID", "BeginAt", "EndAt"},
	}
}

type SkuVendorCategoryMap struct {
	ModelIDCULD

	NameID           int    `orm:"column(name_id)" json:"nameID"`
	VendorID         int    `orm:"column(vendor_id)" json:"vendorID"`
	VendorCategoryID string `orm:"column(vendor_category_id)" json:"vendorCategoryID"`
}

func (*SkuVendorCategoryMap) TableIndex() [][]string {
	return [][]string{
		[]string{"NameID", "VendorID"},
	}
}

type VendorCategoryMap struct {
	ModelIDCULD

	VendorID           int    `orm:"column(vendor_id)" json:"vendorID"`
	VendorOrgCode      string `json:"vendorOrgCode"`
	CategoryID         int    `orm:"column(category_id)" json:"categoryID"` // 这个是指对应的sku_category
	VendorCategoryName string `orm:"size(255)" json:"vendorCategoryName"`   // 平台类别单独的名字
	VendorCategorySeq  int    `orm:"default(0)" json:"vendorCategorySeq"`   // 平台类别单独的序号
	Level              int    `json:"level"`                                // 平台类别单独的等级
	ParentID           int    `orm:"column(parent_id)" json:"parentID"`     //门店类别父ID，和sku_category一致
}

func (*VendorCategoryMap) TableUnique() [][]string {
	return [][]string{
		[]string{"VendorID", "VendorOrgCode", "CategoryID", "DeletedAt"},
	}
}
