package model

import (
	"database/sql/driver"
	"encoding/json"
	"fmt"
	"gorm.io/plugin/soft_delete"
	"time"
)

type ArtExhibitionDetail struct {
	ShowUID    string
	ShowSeq    string
	ShowName   string
	ArtistName string
	ArtistUID  string
	ArtworkNum uint64
	Ruler      uint64
	Price      uint64
	Reward     uint64
	CreateTime string
	Operator   string
	IsShow     uint64
	ShowTime   string
	Address    string
}

type Artwork struct {
	ArtworkPriceUID string
	ShowUID         string
	ArtworkUID      string
	ArtworkName     string
	ArtistName      string
	Length          uint64
	Width           uint64
	Ruler           uint64
	SmallPic        string
	PriceRun        string
	SaleAddressID   string
	Tfnum           string
	SellSite        string
}

type Artworks []Artwork

// ApprovalExhibition 绑定的画展包
type ApprovalExhibition struct {
	ID                  uint64                `gorm:"primaryKey;column:id" json:"id"`                               // ID
	DeletedAt           soft_delete.DeletedAt `gorm:"column:deleted_at" json:"deletedAt"`                           // 删除时间
	CreatedAt           time.Time             `gorm:"column:created_at" json:"createdAt"`                           // 创建时间
	UpdatedAt           time.Time             `gorm:"column:updated_at" json:"updatedAt"`                           // 更新时间
	ApprovalID          uint64                `gorm:"column:approval_id" json:"approvalId"`                         // 申请的id
	ExhibitionID        uint64                `gorm:"column:exhibition_id" json:"exhibitionId"`                     // 画展包的id
	PackageName         string                `gorm:"column:package_name" json:"PackageName"`                       // 作品名称
	PackageID           string                `gorm:"size:64;column:package_id;default:''" json:"packageID"`        // 作品类型id
	PackageSize         uint64                `gorm:"column:package_size" json:"PackageSize"`                       // 平尺数
	PackageNumber       string                `gorm:"column:package_number" json:"packageNumber"`                   // 序号
	Address             string                `gorm:"column:address" json:"Address"`                                // 地点
	ShowDate            string                `gorm:"type:varchar(10);default:'';column:show_date" json:"ShowDate"` // 位置
	ArtExhibitionDetail ArtExhibitionDetail   `gorm:"type:text;column:art_exhibition_detail;comment:绑定的画展包" json:"artExhibitionDetail"`
	Artworks            Artworks              `gorm:"type:text;column:artworks;comment:画作" json:"artworks"`
}

// TableName get sql table name.获取数据库表名
func (m *ApprovalExhibition) TableName() string {
	return "approval_exhibition"
}

func (j *Artworks) Scan(src interface{}) error {
	fmt.Println("1------")
	return json.Unmarshal(src.([]byte), j)
}

func (j Artworks) Value() (driver.Value, error) {

	fmt.Println("2------")
	v, err := json.Marshal(j)
	return string(v), err
}

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

func (j ArtExhibitionDetail) Value() (driver.Value, error) {

	v, err := json.Marshal(j)

	return string(v), err
}