package model

import (
	"database/sql/driver"
	"encoding/json"
	"github.com/shopspring/decimal"
)

/*
	订单模块
*/

const (
	REGISTER_STATUS_SUCCESS = "0" // 成功
	REGISTER_STATUS_FIAL    = "1" // 失败
	REGISTER_STATUS_WAITPAY = "2" // 待支付
)

type Order struct {

	/*
		代收,代扣
		充值:
			status:
				0 - 成功
				1 - 失败
				2 - 待支付
		提现:
			status:
				0 - 成功
				1 - 失败
				2 - 待审核
				3 - 审核成功
				4 - 审核拒绝
		转账
		type:
			0 - 充值
			1 - 提现
			2 - 转账
			3 - 虚拟转账(电子户)
	*/

	Id              int64           `gorm:"primary_key;column:id" json:"id"`                 //
	OrderId         string          `gorm:"column:order_id" json:"orderId"`                  // 订单号
	MerchantOrderId string          `gorm:"column:merchant_order_id" json:"merchantOrderId"` // 商户订单号
	ChannelOrderId  string          `gorm:"column:channel_order_id" json:"channelOrderId"`   // 渠道订单号
	MerchantId      int64           `gorm:"column:merchant_id" json:"merchantId"`            // 商户ID
	ChannelId       int64           `gorm:"column:channel_id" json:"channelId"`              // 渠道ID
	Amount          decimal.Decimal `gorm:"column:amount" json:"amount"`                     // 金额
	ActAmount       decimal.Decimal `gorm:"column:act_amount" json:"actAmount"`              // 实际到账金额
	Fee             decimal.Decimal `gorm:"column:fee" json:"fee"`                           // 手续费
	Type            string          `gorm:"column:type" json:"type"`                         // 0-代收 1-代扣
	SuccessTime     int64           `gorm:"column:success_time" json:"successTime"`          // 成功时间
	CreateTime      int64           `gorm:"column:create_time" json:"createTime"`            // 创建时间
	Status          string          `gorm:"column:status" json:"status"`                     // 订单状态
	ErrMsg          string          `gorm:"column:err_msg" json:"errMsg"`                    // 失败原因
	CallbackStatus  bool            `gorm:"column:callback_status" json:"callbackStatus"`    // 回调状态
	CallbackErrMsg  string          `gorm:"column:callback_err_msg" json:"callbackErrMsg"`   // 回调失败原因
	CallbackTime    int64           `gorm:"column:callback_time" json:"callbackTime"`        // 回调时间
	Uid             int64           `gorm:"column:uid" json:"uid"`                           // 操作人UID
	From            OrderAccount    `gorm:"column:from" json:"from"`                         // from
	To              OrderAccount    `gorm:"column:to" json:"to"`                             // to
	Customer        JSON            `gorm:"column:customer" json:"customer"`                 // 自定义字段 回调时返回
}

func (Order) TableName() string {
	return "order"
}

type OrderAccount struct {
	/*
		账户信息
	*/
	Account string `json:"account,omitempty"` // 账号
	Name    string `json:"name,omitempty"`    // 名称
}

func (j *OrderAccount) Scan(value interface{}) error {
	return json.Unmarshal(value.([]byte), &j)
}

func (j OrderAccount) Value() (driver.Value, error) {
	return json.Marshal(j)
}