package model

import (
	"time"

	"gorm.io/datatypes"
	"gorm.io/gorm"
	"gorm.io/plugin/soft_delete"
)

type BundleProfile struct {
	gorm.Model
	UUID             string  `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:套餐UUID"`
	Name             string  `json:"name" gorm:"column:name;type:varchar(2048);comment:套餐名称"`
	Price            float32 `json:"price" gorm:"column:price;type:decimal(12,2);comment:套餐价格"`
	PriceType        int64   `json:"priceType" gorm:"column:price_type;type:int;comment:套餐类型 1:人民币 2:美元"`
	Contract         string  `json:"contract" gorm:"type:varchar(1024);comment:合同"`
	ContractDuration int     `json:"contractDuration" gorm:"column:contract_duration;type:int;comment:合同有效时长"`
	Content          string  `json:"content" gorm:"column:content;type:text;comment:套餐内容"`
	CompanySign      string  `json:"companySign" gorm:"column:company_sign;type:varchar(1024);comment:公司签名"`
	Language         string  `json:"language" gorm:"column:language;type:varchar(32);comment:套餐语言 zh-CN EN"`
	BundleCommonUid  string  `json:"bundleCommonUid" gorm:"column:bundle_common_uid;type:varchar(1024);comment:套餐公共ID"`

	Sort                    int64                     `json:"sort" gorm:"column:sort;type:int;comment:套餐排序"` //数字越小越靠前,同大小后创建优先
	ShelfStatus             int64                     `json:"shelfStatus" gorm:"column:shelf_status;type:int;default:2;comment:上架状态  1:上架 2:下架"`
	ImgOption               int8                      `json:"imgOption" gorm:"column:img_option;type:int;default:1;comment:图片选择 1:背景图1 2 3"`
	BgImg1                  string                    `json:"bgImg1" gorm:"column:bg_img1;type:varchar(1024);comment:背景图-首页"`
	BgImg2                  string                    `json:"bgImg2" gorm:"column:bg_img2;type:varchar(1024);comment:背景图-我的"`
	BundleToValueAddService []BundleToValueAddService `gorm:"foreignKey:BundleUuid;references:UUID" json:"bundleToValueAddService"`
	BundleProfileLang       []BundleProfileLang       `gorm:"foreignKey:UUID;references:UUID" json:"bundleProfileLang"`
}
type BundleProfileLang struct {
	Id        int32   `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"`
	UUID      string  `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:套餐UUID"`
	Name      string  `json:"name" gorm:"column:name;type:varchar(2048);comment:套餐名称"`
	Price     float32 `json:"price" gorm:"column:price;type:decimal(12,2);comment:套餐价格"`
	PriceType int64   `json:"priceType" gorm:"column:price_type;type:int;comment:套餐类型 1:人民币 2:美元"`
	Content   string  `json:"content" gorm:"column:content;type:text;comment:套餐内容"`
	Language  string  `json:"language" gorm:"column:language;type:varchar(32);comment:套餐语言 zh-CN zh-TW EN de-DE js-JP(中繁英德日)"`
	CreatedAt int64   `gorm:"column:created_at;autoCreateTime"`
	UpdatedAt int64   `gorm:"column:updated_at;autoCreateTime"`
	DeletedAt soft_delete.DeletedAt
}
type BundleToValueAddService struct {
	Id              int32           `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"`
	BundleUuid      string          `json:"bundleUuid" gorm:"column:bundle_uuid;type:varchar(1024);comment:套餐UUID"`
	BundleProfile   BundleProfile   `gorm:"foreignKey:BundleUuid;references:UUID" json:"bundleProfile"`
	ValueUid        string          `json:"valueUid" gorm:"column:value_uid;type:varchar(1024);comment:增值服务UUID"`
	ValueAddService ValueAddService `gorm:"foreignKey:ValueUid;references:UUID" json:"valueAddService"`
	IsDisplay       bool            `json:"isDisplay" gorm:"column:is_display;type:tinyint(1);comment:是否显示"`
	CreatedAt       int64           `gorm:"column:created_at;autoCreateTime"`
	UpdatedAt       int64           `gorm:"column:updated_at;autoCreateTime"`
	DeletedAt       soft_delete.DeletedAt
}

// todo套餐修改历史
type BundleProfileHistory struct {
	Id              int32          `gorm:"column:id;type:int(11);primary_key;AUTO_INCREMENT" json:"id"`
	Uuid            string         `json:"uuid" gorm:"column:uuid;type:varchar(1024);comment:UUID"`
	BundleProfile   datatypes.JSON `json:"bundleProfile" gorm:"column:bundle_profile;type:json;comment:套餐信息"`
	ValueAddService datatypes.JSON `json:"valueAddService" gorm:"column:value_add_service;type:json;comment:增值服务信息"`
	Operator        string         `json:"operator" gorm:"column:operator;type:varchar(1024);comment:操作人"`
	OperatorId      uint64         `json:"operatorId" gorm:"column:operator_id;type:int;comment:操作人ID"`
	CreatedAt       int64          `gorm:"column:created_at;autoCreateTime"`
	UpdatedAt       int64          `gorm:"column:updated_at;autoCreateTime"`
	DeletedAt       soft_delete.DeletedAt
}

func (m *BundleProfile) TableName() string {
	return "bundle_profile"
}
func (m *BundleProfileLang) TableName() string {
	return "bundle_profile_lang"
}
func (m *BundleToValueAddService) TableName() string {
	return "bundle_to_value_add_service"
}
func (m *BundleProfileHistory) TableName() string {
	return "bundle_profile_history"
}

// 套餐扩容记录表
type BundleExtensionRecords struct {
	gorm.Model
	UserId                      int    `gorm:"column:user_id;type:int(11);comment:艺人id;NOT NULL" json:"user_id"`
	AccountAdditional           uint   `gorm:"column:account_additional;type:int(11) unsigned;comment:账号额外增加" json:"account_additional"`
	VideoAdditional             uint   `gorm:"column:video_additional;type:int(11) unsigned;comment:图文额外增加" json:"video_additional"`
	ImagesAdditional            uint   `gorm:"column:images_additional;type:int(11) unsigned;comment:图文额外增加" json:"images_additional"`
	DataAdditional              uint   `gorm:"column:data_additional;type:int(11) unsigned;comment:数据额外增加" json:"data_additional"`
	AvailableDurationAdditional uint   `gorm:"column:available_duration_additional;type:int(11) unsigned;comment:可用时长增加" json:"available_duration_additional"`
	TimeUnit                    uint   `gorm:"column:time_unit;type:int(11) unsigned;comment:时间单位" json:"timeUnit"`
	Type                        int    `gorm:"column:type;type:tinyint(4);comment:类型 0:手动操作" json:"type"`
	Remark                      string `gorm:"column:remark;type:text;comment:备注" json:"remark"`
	OperatorId                  int    `gorm:"column:operator_id;type:int(11);comment:操作人id" json:"operator_id"`
	OperatorName                string `gorm:"column:operator_name;type:varchar(256)" json:"operatorName"`
	OperatorPhoneNumber         string `gorm:"column:operator_phone_number;type:varchar(256)" json:"operatorPhoneNumber"`
}

// TableName 表名称
func (*BundleExtensionRecords) TableName() string {
	return "bundle_extension_records"
}

type BundleExtendRecordItemPo struct {
	UserName            string
	UserPhoneNumber     string
	AccountAdditional   int
	ImagesAdditional    int
	DataAdditional      int
	VideoAdditional     int
	OperatorName        string
	OperatorPhoneNumber string
	OrderUUID           string
	CreatedAt           time.Time
}

type BundleExtendRecordItemDto struct {
	ID                          uint `gorm:"primarykey"`
	CreatedAt                   time.Time
	UpdatedAt                   time.Time
	DeletedAt                   soft_delete.DeletedAt
	UserId                      int    `gorm:"column:user_id;type:int(11);comment:艺人id;NOT NULL" json:"user_id"`
	AccountAdditional           uint   `gorm:"column:account_additional;type:int(11) unsigned;comment:账号额外增加" json:"account_additional"`
	VideoAdditional             uint   `gorm:"column:video_additional;type:int(11) unsigned;comment:图文额外增加" json:"video_additional"`
	ImagesAdditional            uint   `gorm:"column:images_additional;type:int(11) unsigned;comment:图文额外增加" json:"images_additional"`
	DataAdditional              uint   `gorm:"column:data_additional;type:int(11) unsigned;comment:数据额外增加" json:"data_additional"`
	AvailableDurationAdditional uint   `gorm:"column:available_duration_additional;type:int(11) unsigned;comment:可用时长增加" json:"available_duration_additional"`
	Type                        int    `gorm:"column:type;type:tinyint(4);comment:类型 0:手动操作" json:"type"`
	Remark                      string `gorm:"column:remark;type:text;comment:备注" json:"remark"`
	AssociatedOrderNumber       string `gorm:"column:associated_order_number;type:varchar(256);comment:关联增值服务订单号" json:"associated_order_number"`
	OperatorId                  int    `gorm:"column:operator_id;type:int(11);comment:操作人id" json:"operator_id"`
	OperatorName                string `gorm:"column:operator_name;type:varchar(256)" json:"operatorName"`
	OperatorPhoneNumber         string `gorm:"column:operator_phone_number;type:varchar(256)" json:"operatorPhoneNumber"`
	UserName                    string `json:"userName" gorm:"column:user_name"`
	UserPhoneNumber             string `json:"userPhoneNumber" gorm:"column:user_phone_number"`
}

type BundleBalancePo struct {
	UserId                        int    `gorm:"column:user_id"`
	UserName                      string `gorm:"column:user_name"`
	UserPhoneNumber               string `gorm:"column:user_phone_nmber"`
	BundleName                    string `gorm:"column:bundle_name"`
	ExpirationTime                string `gorm:"column:expired_time"`
	BundleStatus                  int    `gorm:"column:bundle_status"`
	OrderUUID                     string `gorm:"column:order_uuid"`
	AccountNumber                 int    `gorm:"column:account_number;not null"`
	AccountConsumptionNumber      int    `gorm:"column:account_consumption_number;not null"`
	VideoNumber                   int    `gorm:"column:video_number;not null"`
	VideoConsumptionNumber        int    `gorm:"column:video_consumption_number;not null"`
	ImageNumber                   int    `gorm:"column:image_number;not null"`
	ImageConsumptionNumber        int    `gorm:"column:image_consumption_number;not null"`
	DataAnalysisNumber            int    `gorm:"column:data_analysis_number;not null"`
	DataAnalysisConsumptionNumber int    `gorm:"column:data_analysis_consumption_number;not null"`
	ExpansionPacksNumber          int    `gorm:"column:expansion_packs_number;not null"`
}

type UserBundleBalancePo struct {
	OrderUUID                     string `json:"orderUUID" gorm:"column:order_uuid"`
	BundleUuid                    string `json:"bundleUuid" gorm:"column:bundle_uuid"`
	BundleName                    string `json:"bundleName" gorm:"column:bundle_name"`
	BundleStatus                  string `json:"bundleStatus" gorm:"column:bundle_status"`
	PayTime                       string `json:"payTime" gorm:"column:pay_time"`
	ExpiredTime                   string `json:"expiredTime" gorm:"column:expired_time"`
	PaymentAmount                 string `json:"paymentAmount" gorm:"column:payment_amount"`
	AccountNumber                 int32  `json:"accountNumber" gorm:"column:account_number"`
	AccountAdditional             int32  `json:"accountAdditional" gorm:"column:account_additional"`
	AccountConsumptionNumber      int32  `json:"accountConsumptionNumber" gorm:"column:account_consumption_number"`
	VideoNumber                   int32  `json:"videoNumber" gorm:"column:video_number"`
	VideoAdditional               int32  `json:"videoAdditional" gorm:"column:video_additional"`
	VideoConsumptionNumber        int32  `json:"videoConsumptionNumber" gorm:"column:video_consumption_number"`
	ImageNumber                   int32  `json:"imageNumber" gorm:"column:image_number"`
	ImageAdditional               int32  `json:"imageAdditional" gorm:"column:image_additional"`
	ImageConsumptionNumber        int32  `json:"imageConsumptionNumber" gorm:"column:image_consumption_number"`
	DataAnalysisNumber            int32  `json:"dataAnalysisNumber" gorm:"column:data_analysis_number"`
	DataAnalysisAdditional        int32  `json:"dataAnalysisAdditional" gorm:"column:data_analysis_additional"`
	DataAnalysisConsumptionNumber int32  `json:"dataAnalysisConsumptionNumber" gorm:"column:data_analysis_consumption_number"`
	ExpansionPacksNumber          int32  `json:"expansionPacksNumber" gorm:"column:expansion_packs_number"`
}

type BundleBalance struct {
	gorm.Model
	UserId                        int    `gorm:"column:user_id;not null"`
	OrderUUID                     string `gorm:"column:order_uuid;type:varchar(1024);not null"`
	AccountNumber                 int    `gorm:"column:account_number;not null"`
	AccountConsumptionNumber      int    `gorm:"column:account_consumption_number;not null"`
	VideoNumber                   int    `gorm:"column:video_number;not null"`
	VideoConsumptionNumber        int    `gorm:"column:video_consumption_number;not null"`
	ImageNumber                   int    `gorm:"column:image_number;not null"`
	ImageConsumptionNumber        int    `gorm:"column:image_consumption_number;not null"`
	DataAnalysisNumber            int    `gorm:"column:data_analysis_number;not null"`
	DataAnalysisConsumptionNumber int    `gorm:"column:data_analysis_consumption_number;not null"`
	ExpansionPacksNumber          int    `gorm:"column:expansion_packs_number;not null"`
}

// TableName 表名称
func (*BundleBalance) TableName() string {
	return "bundle_balance"
}