package domain

import "time"

const (
	OrderStatusReserve     = iota + 1 //预定中
	OrderStatusDeliverSome            //部分发货
	OrderStatusDeliverAll             //全部发货
)

const (
	OrderReal      = iota + 1 //实发订单
	OrderIntention            //意向订单
)

//买家
type Buyer struct {
	//买家姓名
	BuyerName string `json:"buyerName"`
	//联系方式
	ContactInfo string `json:"contactInfo"`
	//收获地址
	ShippingAddress string `json:"shippingAddress"`
}

type Order struct {
	Id int64 `json:"id"`
	//订单类型
	OrderType int `json:"orderType"`
	//订单编号
	OrderCode string `json:"orderCode"`
	//订单名称
	OrderName string `json:"oderName"`
	//订单状态
	OrderStatus int `json:"orderStatus"`
	//数量
	OrderCount int `json:"orderCount"`
	//实际数量
	OrderActualCount int `json:"orderActualCount"`
	//订单金额
	OrderAmount float64 `json:"orderAmount"`
	//实际订单金额
	OrderActualAmount float64 `json:"orderActualAmount"`
	//订单已支付分红金额(货款)
	OrderPaymentAmount float64 `json:"orderPaymentAmount"`
	//订单区域信息
	OrderRegionInfo *RegionInfo `json:"orderRegionInfo"`
	//买家
	Buyer *Buyer `json:"buyer"`
	//合伙人数据
	PartnerInfo *Partner `json:"partnerInfo"`
	//合伙人分红百分比
	PartnerBonusPercent float64 `json:"partnerBonusPercent"`
	//业务员分红百分比
	SalesmanBonusPercent float64 `json:"salesmanBonusPercent"`
	//最后查看得时间
	LastViewTime time.Time `json:"lastViewTime"`
	//更新时间
	UpdateAt time.Time `json:"updateAt"`
	CreateAt time.Time `json:"createAt"`
}

//TODO
func (order Order) Update(data map[string]interface{}) error {
	return nil
}

type OrderFindOneQuery struct {
	OrderId int64
}

type OrderFindQuery struct {
	PartnerId int64
	OrderCode string
	Offset    int
	Limit     int
}

type OrderRepository interface {
	Save(order *Order) error
	FindOne(qureyOptions OrderFindOneQuery) (*Order, error)
	Find(queryOptions OrderFindQuery) ([]Order, error)
	CountAll(queryOption OrderFindQuery) (int, error)
}