package models

import (
	"bsm/full/module/ec/mall/internal/impl"
	"git.apinb.com/bsm-sdk/core/database"
	"git.apinb.com/bsm-sdk/core/types"
	"gorm.io/gorm"
)

// StoreProductSpec 商品规格
type MallProductSpec struct {
	gorm.Model
	types.Std_Identity
	SupplyId        int64  `gorm:"column:supply_id;default:0;supply_id;"`                             // 供应商ID
	SerialNumber    string `gorm:"column:serial_number;type:varchar(36);Index;" json:"serial_number"` // 产品编号
	Title           string `gorm:"column:title;type:varchar(255);not null;" json:"title"`             // 类别名称
	StockType       int32  `gorm:"column:stock_type;default:2;" json:"stock_type"`                    // 库存设置：1-设置库存限制，2-不设置库存限制
	Stock           int64  `gorm:"column:stock;default:0;" json:"stock"`                              // 库存数量
	Price           int64  `gorm:"column:price;default:0;" json:"price"`                              // 销售价格,单位：分
	DirectSales     int64  `gorm:"column:direct_sales;default:0;" json:"direct_sales"`                // 直营价格,单位:分
	PurchasingPrice int64  `gorm:"column:purchasing_price" json:"purchasing_price"`                   // 进货价 单位：分
	Wholesale       int64  `gorm:"column:wholesale" json:"wholesale"`                                 // 代理价 单位：分
	TpType          int32  `gorm:"column:tp_type;default:2;" json:"tp_type"`                          // 阶梯价设置:1-启用,2-不启用
	DsTpType        int32  `gorm:"column:ds_tp_type;default:2;" json:"ds_tp_type"`                    // 直营阶梯价设置:1-启用,2-不启用
	Img             string `gorm:"column:img;type:varchar(255);default:'';" json:"img"`               // 预览图
	StoreIdentity   string `gorm:"column:store_identity;type:varchar(36);" json:"store_identity"`     // 店铺唯一标识
	SpecNo          string `gorm:"column:spec_no;type:varchar(36);" json:"spec_no"`                   // 规格编号
	Keyword         string `gorm:"column:keyword;type:varchar(255);default:'';" json:"keyword"`       // 关键词
}

func init() {
	database.AppendMigrate(&MallProductSpec{})
}

// TableName .
func (table *MallProductSpec) TableName() string {
	return "mall_product_spec" //对应数据库表名
}

// DetailSpec 规格详情
func DetailSpec(identity string) (*MallProductSpec, error) {
	var data = &MallProductSpec{}
	tx := impl.DBService.Model(&MallProductSpec{}).Where("identity = ?", identity).Find(&data)
	return data, tx.Error
}

// SpecList 规格列表
func SpecList(page, size int64, identity string) ([]*MallProductSpec, int64, error) {
	tx := impl.DBService.Model(&MallProductSpec{}).Where("product_identity = ?", identity)
	posts := make([]*MallProductSpec, 0)
	var cnt int64 = 0
	tx.Order("created_at desc").Limit(int(size)).Offset(int((page - 1) * size)).Find(&posts).Count(&cnt)
	err := tx.Error
	return posts, cnt, err
}

// DelSpec 删除规格
func DelSpec(identity string) (int64, error) {
	result := impl.DBService.Where("identity = ?", identity).Delete(&MallProductSpec{})
	return result.RowsAffected, result.Error
}
