package model

type AuditStatus int64

const (
	AuditType_preSave      AuditStatus = 1 //1= 暂存
	AuditType_Pending      AuditStatus = 2 //2= 待审核
	AuditType_Failed       AuditStatus = 3 //3= 审核失败
	AuditType_Pass         AuditStatus = 4 //4= 审核通过
	AuditType_Supplemented AuditStatus = 5 //5= 待补充
)

var auditStatusMaper = map[AuditStatus]string{
	AuditType_preSave:      "暂存",
	AuditType_Pending:      "待审核",
	AuditType_Failed:       "审核失败",
	AuditType_Pass:         "审核通过",
	AuditType_Supplemented: "待补充",
}

func (a AuditStatus) String() string {
	if a == 0 {
		return "无"
	}
	str, ok := auditStatusMaper[a]
	if !ok {
		return "未知"
	}
	return str
}

// 此表作为画家宝中的画作中间表的主表(画作主要数据保存在画作微服务中),请悉知
type ArtworkLockRecord struct {
	Model
	ArtistUid  string `json:"artistUid" gorm:"column:artist_uid;type:varchar(191);comment:画家uid"`
	ArtworkUid string `json:"artworkUid" gorm:"column:artwork_uid;type:varchar(191);comment:画作uid"`
	Status     int64  `json:"status" gorm:"column:status;default:1;comment:1=准备/暂存 2=锁定 3=解锁"` //这个锁的目的是配合下面的LockTime 对画作进行历史记录查询时的分组
	LockTime   string `json:"lockTime" gorm:"column:lock_time;comment:锁定时间"`

	//用户锁定后（Status=2）才能进入流程.
	AuditFlowIndex int64 `json:"auditFlowIndex" gorm:"column:audit_flow_index;default:1;comment:当前的审批流程 1：无  2：基本信息审核 3补充信息审核"`
	// 画作基本信息审批
	// -- 画作上传，审核状态为[暂存1] -- 后台锁定用户，所有Status为1的画作设置为[锁定2]，并生成锁定时间 ，审核状态为 [待审核3] -- 后台审批不通过，审核状态改为[不通过3] -- 用户修改画作后，状态再次改为[待审核2]直至审批通过
	BaseAuditStatus AuditStatus `json:"baseAuditStatus" gorm:"column:base_audit_status;default:1;comment:画作基本信息审核状态  1:暂存 2:待审核 3：审核不通过 4：审核通过"`
	BaseAuditMark   string      `json:"baseAuditMark" gorm:"column:base_audit_mark;comment:画作基本信息审核审核备注1"`
	BaseAuditMark2  string      `json:"baseAuditMark2" gorm:"column:base_audit_mark2;comment:画作基本信息审核审核备注2"`
	// ↓
	// 画作基本信息审批通过后，后台点击[生成补充信息按钮] AuditFlowIndex字段变为3 ， 进入画作补充信息审批
	// ↓
	//画作补充信息审批记录
	// 后台点击[生成补充信息按钮],审核状态为[待补充5]-- 用户更新补充信息，状态改为[待审核2]  -- 后台审批不通过，审核状态改为[不通过3] -- 用户修改画作后，状态再次改为[待审核2]直至审批通过
	SupplementAuditStatus AuditStatus `json:"supplementAuditStatus" gorm:"column:supplement_audit_status;default:0;comment:补充信息审核状态 0无 5待补充 2.待审核 3：审核不通过 4：审核通过"` // 注意没有暂存状态
	SupplementAuditMark   string      `json:"supplementAuditMark" gorm:"column:supplement_audit_mark;comment:补充信息审核备注1"`
	SupplementAuditMark2  string      `json:"supplementAuditMark2" gorm:"column:supplement_audit_mark2;comment:补充信息审核备注2"`
	//UserInfo User `gorm:"foreignKey:ArtistUid;reference:MgmtArtistUid"`
}

func (a *ArtworkLockRecord) TableName() string {
	return "artwork_lock_record"
}

//func (a *ArtworkLockRecord) BeforeUpdate(tx *gorm.DB) (err error) {
//	var thisData ArtworkLockRecord
//	tx.Where("artwork_uid = ?", a.ArtworkUid).First(&thisData)
//	//如果是审核状态不通过的情况下更新画作信息，则自动变为待审核
//	if thisData.BaseAuditStatus == 3 && a.BaseAuditStatus == 0 && a.SupplementAuditStatus == 0 {
//		a.BaseAuditStatus = 2
//	}
//	if thisData.SupplementAuditStatus == 3 && a.BaseAuditStatus == 0 && a.SupplementAuditStatus == 0 {
//		a.SupplementAuditStatus = 2
//	}
//	return
//}

// 基本信息是否可编辑
func (a *ArtworkLockRecord) BaseEditable() bool {
	if a.Status == 1 {
		return true
	}
	if a.Status == 2 && (a.BaseAuditStatus == AuditType_Failed || a.BaseAuditStatus == AuditType_Pending || a.BaseAuditStatus == AuditType_Supplemented) {
		return true
	}
	return false
}

// 补充信息是否可编辑
func (a *ArtworkLockRecord) SupplementEditable() bool {
	//&& a.BaseAuditStatus == AuditType_Pass todo 是否要流程通过基本信息
	if a.Status == 2 && (a.SupplementAuditStatus == AuditType_Supplemented || a.SupplementAuditStatus == AuditType_Failed || a.SupplementAuditStatus == AuditType_Pending) {
		return true
	}
	return false
}
