package schema

import (
	"github.guxuan/haibei/pkg/util"
)

// Defining the `Balance` struct.
type Balance struct {
	util.BaseModel
	CustomerID uint   `json:"customerId" gorm:"index;comment:客户id"`
	Before     int    `json:"before" gorm:"not null;comment:改变钱余额" `
	After      int    `json:"after" gorm:"not null;comment:改变后余额" `
	Change     int    `json:"change" gorm:"not null;comment:变化量" `
	Reason     string `json:"reason" gorm:"size:1024;comment:原因说明" `
	Typer      string `json:"type" gorm:"not null;comment:类型" `
	OperatorID uint   `json:"operatorId" gorm:"index;comment:关联id"`
	CreatorID  string `json:"creatorId" gorm:"index;comment:操作人id"`
}

// Defining the query parameters for the `Balance` struct.
type BalanceQueryParam struct {
	util.PaginationParam
	CustomerID uint   `form:"customerId" `
	Typer      string `form:"type" `
	CreatorID  string `form:"creatorId" `
}

// Defining the query options for the `Balance` struct.
type BalanceQueryOptions struct {
	util.QueryOptions
}

// Defining the query result for the `Balance` struct.
type BalanceQueryResult struct {
	Data       Balances
	PageResult *util.PaginationResult
}

// Defining the slice of `Balance` struct.
type Balances []*Balance

// Defining the data structure for creating a `Balance` struct.
type BalanceForm struct {
	CustomerID uint   `json:"customerId" `
	Before     int    `json:"before" `
	After      int    `json:"after"  `
	Change     int    `json:"change" `
	Reason     string `json:"reason" `
	Typer      string `json:"type" `
	OperatorID uint   `json:"operatorId" `
	CreatorID  string `json:"creatorId" `
}

// A validation function for the `BalanceForm` struct.
func (a *BalanceForm) Validate() error {
	return nil
}

// Convert `BalanceForm` to `Balance` object.
func (a *BalanceForm) FillTo(balance *Balance) error {
	balance.CustomerID = a.CustomerID
	balance.Before = a.Before
	balance.After = a.After
	balance.Change = a.Change
	balance.Reason = a.Reason
	balance.Typer = a.Typer
	balance.OperatorID = a.OperatorID
	balance.CreatorID = a.CreatorID
	return nil
}
