package talent_model

import (
	"github.com/gogf/gf/database/gdb"
	"github.com/gogf/gf/os/gtime"
	"github.com/gogf/gf/util/gmeta"
)

type OrderInfoBrief struct {
	OrderId             uint64      `json:"order_id"`
	PlatformIconUrl     string      `json:"platform_icon_url"`
	PlatformName        string      `json:"platform_name"`
	PlatformNickName    string      `json:"platform_nick_name"`
	OrderProcedure      string      `json:"order_procedure"`
	TaskName            string      `json:"task_name"`
	RecruitLevel        gdb.Record  `json:"recruit_level"`
	ProcedureNote       string      `json:"procedure_note"`
	ProductImgUrl       string      `json:"product_img_url"`
	OrderCompleteStatus int         `json:"order_complete_status"`
	OrderCompleteType   int         `json:"order_complete_type"`
	OrderCompleteDate   *gtime.Time `json:"order_complete_date"`
}

type ClassifiedOrderInfoBriefList struct {
	AllOrderInfoList       []*OrderInfoBrief `json:"all_order_info_list"`
	SelectOrderInfoList    []*OrderInfoBrief `json:"select_order_info_list"`
	GoingOnOrderInfoList   []*OrderInfoBrief `json:"going_on_order_info_list"`
	CompletedOrderInfoList []*OrderInfoBrief `json:"completed_order_info_list"`
}

type OrderProductPhoto struct {
	gmeta.Meta `orm:"table:product_photo"`
	ProductId      int         `json:"product_id"`      // 商品表id
	Symbol         int         `json:"symbol"`         // 图片是主图还是详情图标志位 1主图 2详情图
	PhotoUrl       string      `json:"photo_url"`       // 商品图片链接
}

type OrderProductInfo struct {
	gmeta.Meta `orm:"table:product"`
	ProductId            int         `json:"product_id"`            //
	ProductName          string      `json:"product_name"`          // 商品名称
	ProductPrice         int64       `json:"product_price"`         // 商品价格
	ProductSpecification string      `json:"product_specification"` // 商品规格
	ProductPhotos        *OrderProductPhoto `orm:"with:product_id=product_id, order:symbol"`
}

type OrderTaskHelpInfo struct {
	gmeta.Meta `orm:"table:task_perform_help_info"`
	TaskBaseId          int    `json:"task_base_id"`          // 关联的任务基本信息id
	//BrandKeyword        string `json:"brandKeyword"`        // 品牌关键词
	//ProductMerits       string `json:"productMerits"`       // 产品亮点
	//AppendTopic         string `json:"appendTopic"`         // 添加话题
	//CaptureRequirement  string `json:"captureRequirement"`  // 拍摄要求
	//RemainDays          int    `json:"remainDays"`          // 保留时长(天)
	//OtherPerformRequire string `json:"otherPerformRequire"` // 其他执行要求
	//CaptureReference    string `json:"captureReference"`    // 拍摄参考
	//CustomServiceQrcode string `json:"customServiceQrcode"` // 客服二维码url
	BriefList           string `json:"brief_list"`           // brief图片urls
}

type OrderTaskRewardInfo struct {
	gmeta.Meta `orm:"table:task_reward"`
	IsRewardGoods    int    `json:"is_reward_goods"`    // 是否奖励实物
	RewardGoodsInfo  string `json:"reward_goods_info"`  // 实物奖励信息
	IsPaymentArticle int    `json:"is_payment_article"` // 是否获得稿费
	PaymentValue     string  `json:"payment_value"`     // 稿费金额描述
	OtherRewardInfo  string `json:"other_reward_info"`  // 其他奖励信息
	TaskBaseId       int    `json:"task_base_id"`       // 关联的task_base_info的id
}

type OrderRecruitLevel struct {
	gmeta.Meta `orm:"table:task_recruit_talent_level"`
	TrtId           int   `json:"trt_id"`           //
	FansCountMin    int   `json:"fans_count_min"`    // 最小粉丝数
	FansCountMax    int   `json:"fans_count_max"`    // 最大粉丝数
	NeedTalentCount int   `json:"need_talent_count"` // 任务需要的达人数量
	RewardRoyalties int64 `json:"reward_royalties"` // 稿费金额
}

type OrderTaskProcedureCondition struct {
	gmeta.Meta `orm:"table:task_procedure_decision_condition"`
	TaskBaseId         int   `json:"-"`         // 任务id(对应task_base_info表id字段)
	BuySamplesType     int   `json:"buy_samples_type"`     // 拍单方式 0不拍单 1样叽拍单 2其他平台拍单
	BuySamplesCost     int64 `json:"buy_samples_cost"`     // 拍单费用
	BuySamplesRefund   int64 `json:"buy_samples_refund"`   // 拍单退费
}

type OrderTaskInfo struct {
	gmeta.Meta `orm:"table:task_base_info"`
	TaskId         int         `json:"task_id"`         // 任务基础信息id
	TaskName       string      `json:"task_name"`       // 任务名称
	TaskPlatform   int         `json:"task_platform"`   // 任务平台id,取third_platform_info表id
	TaskMode       int         `json:"task_mode"`       // 任务模式 1置换任务 2稿费任务 3折扣任务
	BusinessType   int         `json:"business_type"`   // 业务类型 1实物 2虚拟 3线下
	ContentForm    int         `json:"content_form"`    // 内容形式 低4位为图片和视频类型，0001原创图片 0010指定图片 0100原创视频 1000指定视频 5~6位为文案类型 010000为原创文案 100000为指定文案 第7位为是否直播01000000为直播00000000为非直播
	StartTime      *gtime.Time `json:"start_time"`      // 作品开始时间
	EndTime        *gtime.Time `json:"end_time"`        // 作品结束时间
	DeadlineTime   *gtime.Time `json:"deadline_time"`   // 任务报名截至日期
	TaskStatus     int         `json:"task_status"`     // 任务状态  待上线，已上线，已结案
	//BrandId        int         `json:"brandId"`        // 品牌id
	ProductId      int         `json:"product_id"`      // 任务商品id
	ProductInfo    *OrderProductInfo `orm:"with:product_id=product_id"`
	TaskHelpInfo   *OrderTaskHelpInfo `orm:"with:task_base_id=task_id"`
	RewardInfo     *OrderTaskRewardInfo `orm:"with:task_base_id=task_id"`
	Conditions     *OrderTaskProcedureCondition `orm:"with:task_base_id=task_id"`
}

type OrderProcedureInfo struct {
	gmeta.Meta `orm:"table:workflow_node_container"`

	NodeName            string      `json:"node_name"`
	NodeNameFirst       string      `json:"node_name_first"`        // 首次执行时的节点名，前端显示
	NodeNameAfterSecond string      `json:"node_name_after_second"` // 第二次之后执行时的节点名
	StepInStage         uint        `json:"stepInStage"`            // 在阶段中的步骤，如提交初稿是初稿阶段的第一步
	ProcedureStage      int         `json:"procedure_stage"`        // 订单处理流程阶段，如：拍单阶段、初稿阶段
	CurExecutionTimes   int         `json:"cur_execution_times"`    // 当前执行次数
	Tip                 string      `json:"tip"`                    // 此步骤在达人端的提示
	SucNextStep         uint        `json:"sucNextStep"`            // 成功后在此阶段的后续步骤 0不处理 255进行后续阶段 其余数值为本阶段step_in_stage值
	FailNextStep        uint        `json:"failNextStep"`           // 失败的后续步骤，数值同上
	State               int         `json:"state"`                  // 状态 1未开启 2进行中 3失败 4完成
	FailReason          string      `json:"failReason"`             // 失败原因
	CompleteDate        *gtime.Time `json:"complete_date"`          // 完成日期
	OperateRoleRestrict int         `json:"operate_role_restrict"`  // 操作角色限制 1后端 2达人
	SortId              int         `json:"sort_id"`                // 在一个任务流程中的排序值
	OrderId             int         `json:"order_id"`               // 关联的订单和任务id
}

type OrderDetailInfo struct {
	gmeta.Meta             `orm:"table:order_info"`
	OrderId                uint64                `json:"order_id"`                  //
	TaskId                 int                   `json:"task_id"`                   // 任务id
	TalentId               int                   `json:"talentId"`                  // 达人id
	TalentPlatformInfoSnap string                `json:"talent_platform_info_snap"` // 达人平台信息快照
	TalentPersonalInfoSnap string                `json:"talent_personal_info_snap"` // 达人个人信息快照
	TalentPostAddrSnap     string                `json:"talent_post_addr_snap"`     // 收货地址快照
	TaskLevelId            int                   `json:"task_level_id"`             // 报名选择的招募等级id(task_recruit_talent_level表中的id)
	ProdSpecificationId    int                   `json:"prod_specification_id"`     // 商品规格列表的索引
	ProdNote               string                `json:"prod_note"`                 // 商品备注
	OrderStatus            int                   `json:"order_status"`              // 订单状态
	CreateDate             *gtime.Time           `json:"create_date"`               // 创建时间
	SelectDate             *gtime.Time           `json:"select_date"`               // 反选时间
	PartnerWay             string                `json:"partner_way"`               // 合作方式
	CompleteStatus         int                   `json:"complete_status"`           // 结束方式 0未结束 1正常结束 2反选失败 3达人取消
	CompleteDate           *gtime.Time           `json:"complete_date"`             // 结束时间
	BuySamplesInfo         *OrderTaskProcedureCondition `orm:"with:task_base_id=task_id"` // 拍单详情
	TaskInfo               *OrderTaskInfo        `orm:"with:task_id=task_id"`
	RecruitLevel           *OrderRecruitLevel    `orm:"with:trt_id=task_level_id"`
	ProcedureInfo          []*OrderProcedureInfo `orm:"with:order_id=order_id, order:sort_id"`
}

type OrderBriefUrls struct {
	gmeta.Meta `orm:"table:task_perform_help_info"`
	TaskBaseId int    `json:"-"`
	BriefList  string `json:"brief_list"`
}
type OrderBriefInfo struct {
	gmeta.Meta `orm:"table:order_info"`
	OrderId    uint64          `json:"-"` //
	TaskId     int             `json:"-"` // 任务id
	BriefList  *OrderBriefUrls `orm:"with:task_base_id=task_id"`
}