package validation

type DeliveryProduct struct {
	MarketingProductId  uint     `json:"marketing_product_id" validate:"required,gt=0"`
	Qty                 float64  `json:"qty" validate:"omitempty,gte=0"`
	UnitPrice           float64  `json:"unit_price" validate:"omitempty,gte=0"`
	AvgWeight           float64  `json:"avg_weight" validate:"omitempty,gte=0"`
	WeightPerConvertion *float64 `json:"weight_per_convertion" validate:"omitempty,gte=0"`
	TotalWeight         *float64 `json:"total_weight" validate:"omitempty,gte=0"`
	TotalPrice          *float64 `json:"total_price" validate:"omitempty,gte=0"`
	DeliveryDate        string   `json:"delivery_date" validate:"omitempty,datetime=2006-01-02"`
	VehicleNumber       string   `json:"vehicle_number" validate:"omitempty,max=50"`
}

type DeliveryOrderCreate struct {
	MarketingId      uint              `json:"marketing_id" validate:"required,gt=0"`
	DeliveryProducts []DeliveryProduct `json:"delivery_products" validate:"required,min=1,dive"`
}

type DeliveryOrderUpdate struct {
	DeliveryProducts []DeliveryProduct `json:"delivery_products" validate:"omitempty,min=1,dive"`
}

type DeliveryOrderQuery struct {
	Page                  int    `query:"page" validate:"omitempty,number,min=1,gt=0"`
	Limit                 int    `query:"limit" validate:"omitempty,number,min=1,max=100,gt=0"`
	Search                string `query:"search" validate:"omitempty,max=100"`
	ProductIDs            []uint `query:"product_ids" validate:"omitempty,dive,gt=0"`
	Status                string `query:"status" validate:"omitempty,max=50"`
	CustomerId            uint   `query:"customer_id" validate:"omitempty,gt=0"`
	MarketingId           uint   `query:"marketing_id" validate:"omitempty,gt=0"`
	ProjectFlockID        uint   `query:"project_flock_id" validate:"omitempty,gt=0"`
	ProjectFlockKandangID uint   `query:"project_flock_kandang_id" validate:"omitempty,gt=0"`
}

type DeliveryOrderApprove struct {
	Action        string  `json:"action" validate:"required_strict"`
	ApprovableIds []uint  `json:"approvable_ids" validate:"required_strict,min=1,dive,gt=0"`
	Notes         *string `json:"notes,omitempty" validate:"omitempty,max=500"`
}
