package model

import (
	model2 "cold-delivery/common/model"
	"database/sql/driver"
	"encoding/json"
)

// // 1未确定订单  2待审核订单  3已审核订单 4待配送 5已配送 6已签收 7已拒收
var (
	WaybillStatusWaitDelivery = 1 // 未确定订单
	WaybillStatusAudits       = 2 // 待审核订单
	WaybillStatusPacking      = 9 // 新增的状态，表示待取药装箱 2——9——3
	WaybillStatusInDeliverys  = 3 // 待配送
	WaybillStatusInShippeds   = 4 // 配送中
	WaybillStatusReceipts     = 5 // 已签收
	WaybillStatusRejections   = 6 // 已拒收
	WaybillStatusoverrule     = 7 // 已驳回
	WaybillStatusCancel       = 8 // 取消订单
	WaybillStatusMap          = map[int]string{
		WaybillStatusWaitDelivery: "未确定订单",
		WaybillStatusAudits:       "待审核订单",
		WaybillStatusPacking:      "待取药装箱",
		WaybillStatusInDeliverys:  "待配送",
		WaybillStatusInShippeds:   "配送中",
		WaybillStatusReceipts:     "已签收",
		WaybillStatusRejections:   "已拒收",
		WaybillStatusoverrule:     "已驳回",
		WaybillStatusCancel:       "取消订单",
	}
)

//var (
//	WaybillStatusWaitDelivery = 1 // 已下单
//	WaybillStatusInDelivery   = 2 // 配送中
//
//	WaybillStatusReceipt   = 3 // 已签收
//	WaybillStatusRejection = 4 // 已拒收
//	WaybillStatusMap       = map[int]string{
//		WaybillStatusWaitDelivery: "已下单",
//		WaybillStatusInDelivery:   "配送中",
//		WaybillStatusReceipt:      "已签收",
//		WaybillStatusRejection:    "已拒收",
//	}
//)

// 运单短信发送日志
type WaybillSendLog struct {
	Phone   string `json:"phone"`
	Content string `json:"content"`
}

func (e WaybillSendLog) Value() (driver.Value, error) {
	d, err := json.Marshal(e)
	return string(d), err
}
func (e *WaybillSendLog) Scan(src interface{}) error {
	return json.Unmarshal(src.([]byte), e)
}

type IceRaftCode []string

func (e IceRaftCode) Value() (driver.Value, error) {
	d, err := json.Marshal(e)
	return string(d), err
}

func (e *IceRaftCode) Scan(src interface{}) error {
	return json.Unmarshal(src.([]byte), e)
}

// 运单
type Waybill struct {
	model2.Model
	WaybillNo                  string            `json:"waybillNo"  gorm:"size:128"`                    // 单号
	OrderNo                    string            `json:"orderNo"  gorm:"size:128"`                      // 订单号
	Status                     int               `json:"status"  gorm:"size:128"`                       // 订单状态：1未确定订单 2已确定订单 3待审核订单 4审核完成 5待配送 6已配送 7已签收 8已拒收
	SenderAddressDetails       string            `json:"senderAddressDetails"  gorm:"size:128"`         // 发货地址详情
	SenderAddressName          string            `json:"senderAddressName"  gorm:"size:128"`            // 发货地址名称
	SenderAddressPhone         string            `json:"senderAddressPhone"  gorm:"size:128"`           // 发货地址电话
	ConsigneeAddressDetails    string            `json:"consigneeAddressDetails"  gorm:"size:128"`      // 收发货地址详情
	ConsigneeAddressName       string            `json:"consigneeAddressName"  gorm:"size:128"`         // 收发货地址名称
	ConsigneeAddressPhone      string            `json:"consigneeAddressPhone"  gorm:"size:128"`        // 收发货地址电话
	DeliveryName               string            `json:"deliveryName"  gorm:"size:128"`                 // 配送人名称
	DeliveryPhone              string            `json:"deliveryPhone"  gorm:"size:128"`                // 配送人电话
	DeliveryId                 int               `json:"deliveryId"  gorm:"size:128"`                   // 配送人id
	ReCheckId                  int               `json:"reCheckId"  gorm:"size:128"`                    // 复核id
	Remark                     string            `json:"remark"  gorm:"size:text"`                      // 运输备注
	OrderTime                  model2.Time       `json:"orderTime"  gorm:"size:128"`                    // 下单时间
	DeliveryTime               model2.Time       `json:"deliveryTime"  gorm:"size:128"`                 // 配送时间
	DeliveryDuration           int               `json:"deliveryDuration" gorm:"size:128;comment:冷冻时长"` // 配送耗时 单位分钟
	ReceiptTime                model2.Time       `json:"receiptTime"  gorm:"size:128"`                  // 签收时间
	Quantity                   int               `json:"quantity"  gorm:"size:128"`                     // 药品数量
	CoolerBoxId                int               `json:"coolerBoxId"  gorm:"size:128"`                  // 保温箱id
	ReceiptImg                 string            `json:"receiptImg"  gorm:"size:text"`                  // 签收图片
	Receiptsign                string            `json:"receiptsign" gorm:"size:text"`                  // 签收图片签字
	TamperProofLabel           string            `json:"tamperProofLabel"  gorm:"size:128"`             // 防拆标签
	TamperProofLabelImg        string            `json:"tamperProofLabelImg"  gorm:"size:text"`         // 防拆标签
	RejectionReason            string            `json:"rejectionReason"  gorm:"size:128"`              // 拒收原因
	SendLog                    WaybillSendLog    `json:"sendLog" gorm:"size:text"`                      // 运单短信发送日志
	CoolerBox                  CoolerBoxOmit     `json:"coolerBox" gorm:"->"`                           // 保温箱
	Dept                       SysDeptOmit       `json:"dept" gorm:"->"`                                // 部门
	Delivery                   SysUserOmit       `json:"delivery" gorm:"->"`                            // 部门
	ReCheck                    SysUserOmit       `json:"reCheck" gorm:"->"`                             // 部门
	Drugs                      []Drug            `json:"drugs" gorm:"-"`                                // 药品信息
	ChildWaybills              model2.StringList `json:"childWaybills"`                                 // 子运单编号
	IceRaftCode                IceRaftCode       `json:"iceRaftCode" gorm:"size:text"`
	AssessStar                 int               `json:"assessStar"  gorm:"size:128"`                                 // 评价星星
	AssessContent              string            `json:"assessContent"  gorm:"size:128"`                              // 评价内容
	PrescriptionIsAudit        int               `json:"prescriptionIssue"   gorm:"size:128;default:1"`               // 处方是否审核 1 未审核 2已审核
	InvoiceIsAudit             int               `json:"invoiceIssue"   gorm:"size:128;default:1"`                    // 发票是否审核 1 未审核 2已审核
	InspectionReportIsAudit    int               `json:"inspectionReportIssue"   gorm:"size:128;default:1"`           // 检验报告是否审核 1 未审核 2已审核
	DispensingMedicinesIsAudit int               `json:"dispensingMedicinesIssue"   gorm:"size:128;default:1"`        // 调配药品信息是否审核  1 未审核 2已审核
	IsCold                     int               `json:"isCold"   gorm:"size:128;default:1"`                          // 是否冷链 1 否 2 是
	PaymentStatus              int               `json:"paymentStatus"  gorm:"size:128;default:1"`                    //支付状态 1 结清 2 未结清  3 支付完成
	PaymentType                int               `json:"paymentType"  gorm:"size:128;default:0"`                      //支付方式  1现金 2线上支付 3银行卡 4医保 5其他
	PaymentRemark              string            `json:"paymentremark"  gorm:"size:128;"`                             //支付备注
	AssignmentStatus           int               `json:"assignmentStatus"  gorm:"size:128;default:1"`                 //分配状态  1 未分配  2已分配
	AuditRemark                string            `json:"audit_remark"  gorm:"size:255;"`                              //驳回原因
	AdminAuditRemark           string            `json:"admin_audit_remark"  gorm:"size:255;"`                        //管理员审核备注
	IsSecondaryDistribution    bool              `json:"is_secondary_distribution" gorm:"type:boolean;default:false"` //是否二次分配
	Confirmer                  string            `json:"confirmer" gorm:"size:255;"`                                  // 确认人
	ConfirmerPhone             string            `json:"confirmerPhone" gorm:"size:255;"`                             // 确认人电话
	Prescription               model2.StringList `json:"prescription"`                                                // 处方
	IsChild                    bool              `json:"isChild" gorm:"type:boolean;default:false"`                   //是否属于子订单
	SecondaryTime              model2.Time       `json:"secondary_time" gorm:"comment:分配时间"`                          //分配时间
	AskForTime                 model2.Time       `json:"askForTime" gorm:"comment:客户要求时间"`                            //客户要求时间
	DeliveryType               string            `json:"deliveryType" gorm:"size:128;comment:配送方式"`                   // 配送方式
	model2.ControlBy
	model2.ModelTime
	model2.DeptBy
}

func (Waybill) TableName() string {
	return "waybill"
}
