package protocol

import (
	"sort"
)

//输入框类型
const (
	inputTypeCheck string = "check-box" //多选宽
	inputTypeText  string = "text"      //单行文本宽
	InputTypeRedio string = "redio"     //单选框
)

//InputElement 自定义表单项
type InputElement struct {
	Id           int    `json:"id"`
	Sort         int    `json:"sort"`      //排序
	Label        string `json:"label"`     //标题
	InputType    string `json:"inputType"` //输入类型
	Required     int    `json:"required"`  //是否必填
	CurrentValue string `json:"value"`     //"当前填写的值"
	SectionType  int8   `json:"sectionType"`
	// ValueList    string `json:"-"` //输入候选值 value_list
	// Placeholder  string `json:"-"` //帮助用户填写输入字段的提示 Placeholder
	// Disable      bool   `json:"-"` //"显示隐藏",
}

//自定义表单
type CustomForm []InputElement

var (
	_ sort.Interface = new(CustomForm)
)

//实现排序接口
func (a CustomForm) Len() int      { return len(a) }
func (a CustomForm) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
func (a CustomForm) Less(i, j int) bool {
	return a[i].Sort < a[j].Sort
}

//IValidateInput 自定义输入项校验接口
type IValidateInput interface {
	ValidateInput() error  //校验当前输入值
	ValidateConfig() error //校验自定义的输入项设置
}

type ValidateInputText struct {
	InputElement
}

var (
	_ IValidateInput = ValidateInputText{}
)

func (input ValidateInputText) ValidateInput() error {
	return nil
}
func (input ValidateInputText) ValidateConfig() error {
	return nil
}

//ValidateInputRedio 单选项校验
type ValidateInputRedio struct {
	InputElement
}

var (
	_ IValidateInput = ValidateInputRedio{}
)

func (input ValidateInputRedio) ValidateInput() error {
	return nil
}

func (input ValidateInputRedio) ValidateConfig() error {
	return nil
}

/***********审核模板管理**********/
/*TemplateAdd */
type TemplateAddRequest struct {
	Template        Template        `json:"template"`
	Example         string          `json:"example"` //示例
	AuditFlowConfig AuditFlowConfig `json:"auditFlowConfig"`
}
type TemplateAddResponse struct {
}

type Template struct {
	Id           int64           `json:"id"` //创建时 0
	Code         string          `json:"code" valid:"Required; MaxSize(6)"`
	ChanceTypeId int             `json:"chanceTypeId" valid:"Required;"` //机会类型编号
	Name         string          `json:"name" valid:"Required;"`
	Doc          string          `json:"doc"`
	Icon         string          `json:"icon" valid:"Required;"`
	InputList    []*InputElement `json:"inputList" valid:"Required;"`
}

type AuditFlowConfig struct {
	NoApprover    int             `json:"noApprover" valid:"Required;"` //审核人为空【1:自动通过】【2:转交给管理员】
	ProcessConfig []ProcessConfig `json:"processConfig"`                //创建时 0
}
type ProcessConfig struct {
	ApproveType     int             `json:"approveType"` //1.部门长 2 指定成员 3.指定角色
	ProcessType     int             `json:"processType"` //审批类型 1:正常审核  2:特殊审核
	AcitonType      int             `json:"acitonType"`  //审批执行方式【1:or】【2:and】
	GroupId         int             `json:"groupId"`     //分组id
	FromSpecialUser []VisibleObject `json:"fromSpecialUser"`
	ToRole          []VisibleObject `json:"toRole"`
	ToUser          []VisibleObject `json:"toUser"`
}

/*TemplateUpdate */
type TemplateUpdateRequest struct {
	Template        Template        `json:"template"`
	Example         string          `json:"example"` //示例`
	AuditFlowConfig AuditFlowConfig `json:"auditFlowConfig"`
}
type TemplateUpdateResponse struct {
}

/*TemplateList */
type TemplateListRequest struct {
}
type TemplateListResponse struct {
	List []*TemplateList `json:"list"`
	//ResponsePageInfo
}

type TemplateList struct {
	Id        int             `json:"id"`
	Name      string          `json:"name"`
	Icon      string          `json:"icon"`
	Code      string          `json:"code"`
	Sort      int             `json:"sort"`
	Templates []*TemplateItem `json:"templates"`
}

type TemplateItem struct {
	Id            int64           `json:"id"` //创建时 0
	Name          string          `json:"name"`
	Doc           string          `json:"doc"`
	Icon          string          `json:"icon"`
	Code          string          `json:"code"`         //编码
	EnableStatus  int8            `json:"enableStatus"` //禁用状态
	Sort          int             `json:"sort"`         //序号
	VisibleType   int8            `json:"visibleType"`
	VisibleObject []VisibleObject `json:"visibleObject"`
}

type VisibleObject struct {
	Id   int    `json:"id"`
	Name string `json:"name"`
	Type int    `json:"type"` //0:指定人员  1:部门  2.公司所有人
}

/*TemplateEditVisible */
type TemplateEditVisibleRequest struct {
	Id            int             `json:"id"` //模板编号
	VisibleObject []VisibleObject `json:"visibleObject"`
}
type TemplateEditVisibleResponse struct {
}

/*TemplateAddCategory */
type TemplateOperateCategoryRequest struct {
	Id   int    `json:"id"`
	Name string `json:"name" valid:"Required"`
	Code string `json:"code" valid:"Required"`
	Icon string `json:"icon"`
}
type TemplateOperateCategoryResponse struct {
	Id int `json:"id"`
}

/*TemplateGet */
type TemplateGetRequest struct {
	Id int `json:"id" valid:"Required"`
}
type TemplateGetResponse struct {
	Template        Template        `json:"template"`
	Example         string          `json:"example"` //示例`
	AuditFlowConfig AuditFlowConfig `json:"auditFlowConfig"`
}

/*TemplateEditSort */
type TemplateEditSortRequest struct {
	ChanceTypeId int        `json:"chance_type_id"` //机会类型编号
	List         []SortItem `json:"list"`           //需要排序的列表
}
type TemplateEditSortResponse struct {
}

//排序项
type SortItem struct {
	Id      int `json:"id"`
	SortNum int `json:"sort_num"`
}

/*TemplateEditEnable 模板启用*/
type TemplateEditEnableRequest struct {
	TemplateId int  `json:"id" valid:"Required"`
	Enabled    int8 `json:"enabled"` //启用状态 1 启用 0 禁用
}
type TemplateEditEnableResponse struct {
}

/*TemplateDelete 删除模板*/
type TemplateDeleteRequest struct {
	TemplateId int `json:"id" valid:"Required"`
}
type TemplateDeleteResponse struct {
}

/*TemplateDeleteCategory  删除一级分类*/
type TemplateDeleteCategoryRequest struct {
	ChanceTypeId int `json:"id" valid:"Required"`
}
type TemplateDeleteCategoryResponse struct {
}

/*CategoryEditSort 一级分类排序*/
type CategoryEditSortRequest struct {
	List []SortItem `json:"list"` //需要排序的列表
}
type CategoryEditSortResponse struct {
}

//RequestAuditList 机会管理-获取机会列表
type RequestAuditList struct {
	RequestPageInfo
	ChanceTypeId     int    `json:"chance_type_id"` //一级分类
	TempalteId       int    `json:"template_id"`    // 二级分类
	PublishStatusS   string `json:"publish_status"` //公开状态码字符串
	PublishStatus    int    `json:"-"`              //公开状态
	ReviewStatus     int    `json:"-"`              //
	ReviewStatusS    string `json:"review_status"`  //
	Status           int    `json:"-"`              //关闭状态
	StatusS          string `json:"status"`         //关闭状态
	DepartmentID     int    `json:"department_id"`  //提交部门
	CreateTimeBegin  int64  `json:"-"`              //
	CreateTimeBeginS string `json:"create_time_begin"`
	CreateTimeEnd    int64  `json:"-"`               //
	CreateTimeEndS   string `json:"create_time_end"` //
	Code             string `json:"code"`            //机会编码
	UserName         string `json:"user_name"`       //提交人姓名
}

type ResponseAuditList struct {
	ResponsePageInfo
	List []RspAuditList `json:"lists"`
}

type RspAuditList struct {
	Id                string `json:"id"` //机会的id
	Code              string `json:"code"`
	ChanceType        string `json:"chance_type"`         //一级分类
	TemplateName      string `json:"template_name"`       //二级分类
	UserName          string `json:"user_name"`           // 提交人
	Department        string `json:"department"`          //提交部门
	CreateTime        int64  `json:"create_time"`         //提交时间
	PublishStatus     int    `json:"publish_status"`      //公开状态
	PublishStatusName string `json:"publish_status_name"` //
	ReviewStatus      int8   `json:"review_status"`       //审批状态
	ReviewStatusName  string `json:"review_status_name"`
	Status            int8   `json:"status"` //开启、关闭状态
	StatusName        string `json:"status_name"`
	DiscoveryScore    string `json:"discovery_score"`
	CommentTotal      string `json:"comment_total"`
}

type ChanceFlowLog struct {
	Id       int64  `json:"id" orm:"column(id)"`
	ChanceId string `json:"chance_id" orm:"column(chance_id)"`
	CreateAt string `json:"create_at" orm:"column(create_at)"`
	Content  string `json:"content" orm:"column(content)"`
	NickName string `json:"nick_name" orm:"column(nick_name)"`
	Code     int    `json:"code" orm:"column(code)"`
}