package dispatch

import (
	"time"

	modbase "github.com/tidbcloud/aisupport/services/ticket-manager/models/base"
)

type Policy struct {
	modbase.Updatable

	FamilyID         string  `gorm:"column:family_id;type:varchar(20);not null;index:idx_dispatch_policy_family_id"`
	Name             string  `gorm:"column:name;type:varchar(255);not null"`
	Version          *int    `gorm:"column:version;type:int"`
	Status           string  `gorm:"column:status;type:varchar(32);not null;index:idx_dispatch_policy_status"`
	ReplacesPolicyID *uint64 `gorm:"column:replaces_policy_id;type:bigint unsigned"`
	TriggerJSON      []byte  `gorm:"column:trigger_json;type:json;not null"`

	CreatedBy   string     `gorm:"column:created_by;type:varchar(320);not null"`
	PublishedBy string     `gorm:"column:published_by;type:varchar(320);not null;default:''"`
	PublishedAt *time.Time `gorm:"column:published_at;type:datetime(3)"`
}

func (Policy) TableName() string {
	return "dispatch_policies"
}

type PolicyTrigger struct {
	Enable        bool     `json:"enable"`
	SourceIn      []string `json:"source_in,omitempty"`
	IssueLabelAll []string `json:"issue_label_all,omitempty"`
	IssueStatusIn []string `json:"issue_status_in,omitempty"`
	ProjectKeyIn  []string `json:"project_key_in,omitempty"`
}

type Rule struct {
	modbase.Updatable

	PolicyID       modbase.ID `gorm:"column:policy_id;type:bigint unsigned;not null;uniqueIndex:idx_dispatch_rule_policy_name,priority:1;uniqueIndex:idx_dispatch_rule_policy_priority,priority:1;index:idx_dispatch_rule_policy"`
	Name           string     `gorm:"column:name;type:varchar(255);not null;uniqueIndex:idx_dispatch_rule_policy_name,priority:2"`
	Priority       int        `gorm:"column:priority;type:int;not null;uniqueIndex:idx_dispatch_rule_policy_priority,priority:2"`
	TransitionJSON []byte     `gorm:"column:transition_json;type:json;not null"`
	ConditionJSON  []byte     `gorm:"column:condition_json;type:json;not null"`
	ActionsJSON    []byte     `gorm:"column:actions_json;type:json;not null"`
}

func (Rule) TableName() string {
	return "dispatch_rules"
}
