package model

// ExpiredOneDay ...
const ExpiredOneDay = 86400

// Status ...
const (
	StatusCancel = "cancel"
	StatusMerged = "merged"
	StatusClosed = "closed"
)

// number per year.
const (
	MonthNumPerYear = 12
	DayNumPerYear   = 365
	DayNumPerWeek   = 7
	DayNumPerMonth  = 30
)

// query type.
const (
	LastYearPerMonth = iota
	LastMonthPerDay
	LastYearPerDay
	LastWeekPerDay
)

// query type note.
const (
	LastYearPerMonthNote = "最近一年每月数量"
	LastMonthPerDayNote  = "上一月每天数量"
	LastYearPerDayNote   = "最近一年每天数量"
)

// query object type.
const (
	ObjectMR     = "mr"
	ObjectCommit = "commit"
	ObjectSaga   = "saga"
	ObjectRunner = "runner"
)

// KeyTypeConst ...
var KeyTypeConst = map[int]string{
	0: "LastYearPerMonth",
	1: "LastMonthPerDay",
	2: "LastYearPerDay",
	3: "LastWeekPerDay",
}

// CommitRequest ...
type CommitRequest struct {
	TeamParam
	Since    string `form:"since"`
	Until    string `form:"until"`
	Username string `form:"username"`
}

// ProjectCommit ...
type ProjectCommit struct {
	ProjectID int    `json:"project_id"`
	Name      string `json:"name"`
	CommitNum int    `json:"commit_num"`
}

// CommitResp ...
type CommitResp struct {
	Total         int              `json:"total"`
	ProjectCommit []*ProjectCommit `json:"commit_per_project"`
}

// ProjectDataReq ...
type ProjectDataReq struct {
	ProjectID   int    `form:"project_id" validate:"required"`
	ProjectName string `form:"project_name"`
	QueryType   int    `form:"query_type"`
	Username    string `form:"username"`
}

// ProjectDataResp ...
type ProjectDataResp struct {
	ProjectName string          `json:"project_name"`
	QueryDes    string          `json:"query_description"`
	Total       int             `json:"total"`
	Data        []*DataWithTime `json:"data_info"`
}

// TeamDataRequest ...
type TeamDataRequest struct {
	TeamParam
	QueryType int    `form:"query_type"`
	Username  string `form:"username"`
}

// TeamDataResp ...
type TeamDataResp struct {
	Department string          `json:"department"`
	Business   string          `json:"business"`
	QueryDes   string          `json:"query_description"`
	Total      int             `json:"total"`
	Data       []*DataWithTime `json:"data_info"`
}

// DataWithTime ...
type DataWithTime struct {
	TotalItem int    `json:"total_item"`
	StartTime string `json:"start_time"`
	EndTime   string `json:"end_time"`
}

// PipelineDataTime ...
type PipelineDataTime struct {
	TotalItem   int    `json:"total_item"`
	SuccessItem int    `json:"success_item"`
	StartTime   string `json:"start_time"`
	EndTime     string `json:"end_time"`
}

// PipelineDataResp ...
type PipelineDataResp struct {
	Department   string              `json:"department"`
	Business     string              `json:"business"`
	QueryDes     string              `json:"query_description"`
	Total        int                 `json:"total"`
	SuccessNum   int                 `json:"success_num"`
	SuccessScale int                 `json:"success_scale"`
	Data         []*PipelineDataTime `json:"data_info"`
}

// PipelineDataReq ...
type PipelineDataReq struct {
	ProjectID      int    `form:"project_id" validate:"required"`
	ProjectName    string `form:"project_name"`
	Branch         string `form:"branch"`
	State          string `form:"state"`
	User           string `form:"user"`
	Type           int    `form:"query_type"` //0 最近一年每月数量;1 上一月每天数量;2 最近一年每天数量
	StatisticsType int    `form:"statistics_type"`
	Username       string `form:"username"`
}

// PipelineDataAvgResp ...
type PipelineDataAvgResp struct {
	ProjectName     string             `json:"project_name"`
	QueryDes        string             `json:"query_description"`
	Status          string             `json:"status"`
	Total           int                `json:"total"`
	TotalStatus     int                `json:"total_status"`
	AvgDurationTime float64            `json:"avg_duration_time"`
	AvgPendingTime  float64            `json:"avg_pending_time"`
	AvgRunningTime  float64            `json:"avg_running_time"`
	Data            []*PipelineDataAvg `json:"data_info"`
}

// PipelineDataAvg ...
type PipelineDataAvg struct {
	TotalItem       int     `json:"total_item"`
	TotalStatusItem int     `json:"total_status_item"`
	AvgDurationTime float64 `json:"avg_total_time"`
	MaxDurationTime float64 `json:"max_duration_time"`
	MinDurationTime float64 `json:"min_duration_time"`
	AvgPendingTime  float64 `json:"avg_pending_time"`
	MaxPendingTime  float64 `json:"max_pending_time"`
	MinPendingTime  float64 `json:"min_pending_time"`
	AvgRunningTime  float64 `json:"avg_running_time"`
	MaxRunningTime  float64 `json:"max_running_time"`
	MinRunningTime  float64 `json:"min_running_time"`
	StartTime       string  `json:"start_time"`
	EndTime         string  `json:"end_time"`
}

// PipelineTime ...
type PipelineTime struct {
	PendingMax   float64
	PendingMin   float64
	RunningMax   float64
	RunningMin   float64
	DurationMax  float64
	DurationMin  float64
	PendingList  []float64
	RunningList  []float64
	DurationList []float64
}

// AlertPipeline ...
type AlertPipeline struct {
	ProjectName      string
	ProjectID        int
	RunningTimeout   int
	RunningRate      int
	RunningThreshold int
	PendingTimeout   int
	PendingThreshold int
}