package domain

import "time"

type TaskState int

const (
	TaskWait    TaskState = 1 //任务待启动
	TaskRunning TaskState = 2 //任务启动中
	TaskStop    TaskState = 3 //任务停止
)

// 任务
type Task struct {
	Id          int        `json:"id"`
	CreatedAt   time.Time  `json:"createdAt"`
	UpdatedAt   time.Time  `json:"updatedAt"`
	DeletedAt   *time.Time `json:"deletedAt"`
	CompanyId   int        `json:"companyId,string"`
	Name        string     `json:"name"`        // 任务名称
	Alias       string     `json:"alias"`       // 任务别名
	Leader      TaskLeader `json:"leader"`      // 任务负责人
	Status      TaskState  `json:"status"`      // 任务的状态
	Level       int        `json:"level"`       // 优先级,值越小优先级越高
	LevelName   string     `json:"levelName"`   // 优先级名称
	RelatedUser []int      `json:"relatedUser"` // 相关的员工id
	RunAt       int64      `json:"runAt"`       // 启动的时间戳,秒
	StopAt      int64      `json:"stopAt"`      // 停止的时间戳,秒
	Anomaly     int        `json:"anomaly"`     // 异常反馈的次数
}

type TaskLeader struct {
	Id      int64  `json:"id,string"` // 用户Id
	Account string `json:"account"`   // 用户账号
	Name    string `json:"name"`      // 用户姓名
}

// 设置任务的优先级
// 值越小优先级越高,不是预定义的任务优先级,排在最后
func (t *Task) ApplyLevelName(name string) {
	t.LevelName = name
	switch name {
	case "战略任务":
		t.Level = 100
	case "重点任务":
		t.Level = 200
	case "常规任务":
		t.Level = 300
	default:
		t.Level = 9999
	}
}

// StatusDescript
func (t *Task) StatusDescription() string {
	switch t.Status {
	case TaskWait:
		return "待启动"
	case TaskRunning:
		return "启动中"
	case TaskStop:
		return "停止"
	}
	return ""
}

type TaskRepository interface {
	Save(param *Task) error
	Remove(id int) error
	FindOne(queryOptions map[string]interface{}) (*Task, error)
	Find(queryOptions map[string]interface{}) (int, []*Task, error)
}