package workspace

import (
	"github.com/tidbcloud/aisupport/packages/sdk-go/contracts/entity/base"
	taskent "github.com/tidbcloud/aisupport/packages/sdk-go/contracts/entity/ticket-manager/task"
)

type AdviceStatus string
type AdivceType string

const (
	AdviceStatusCreated AdviceStatus = "created"
	AdviceStatusApplied AdviceStatus = "applied"
	AdviceStatusIgnored AdviceStatus = "ignored"

	AdivceTypeAddTask         = "add_task"
	AdivceTypeBindLarkMeeting = "bind_lark_meeting"
	AdivceTypeBindLarkDoc     = "bind_lark_doc"
)

type AdviceData struct {
	AddTask         *AdviceDataAddTask         `json:"add_task,omitempty"`
	BindLarkMeeting *AdviceDataBindLarkMeeting `json:"bind_lark_meeting,omitempty"`
	BindLarkDoc     *AdviceDataBindLarkDoc     `json:"bind_lark_doc,omitempty"`
}

type AdviceDataAddTask struct {
	Title         string               `json:"title"`
	Description   string               `json:"description"`
	Priority      taskent.TaskPriority `json:"priority"`
	DueAt         *int64               `json:"due_at"`
	Creator       string               `json:"creator"`
	StartedAt     *int64               `json:"started_at"`
	ParentTaskID  uint64               `json:"parent_task_id"`
	Group         taskent.TaskGroup    `json:"group"`
	Members       []taskent.TaskMember `json:"members"`
	CardMessageID *string              `json:"card_message_id,omitempty"`
}

type AdviceDataBindLarkMeeting struct {
	Topic         string  `json:"topic"`
	MeetingID     string  `json:"meeting_id"`
	MeetingNumber string  `json:"meeting_number"`
	MeetingURL    *string `json:"meeting_url"`
	Status        int     `json:"status"` // 1: calling  2: in progress 3: done
	EnableRecord  bool    `json:"enable_record"`
	CardMessageID *string `json:"card_message_id,omitempty"`
}

type AdviceDataBindLarkDoc struct {
	DocID         string  `json:"doc_id"`
	DocURL        string  `json:"doc_url"`
	IsWiki        bool    `json:"is_wiki"`
	Owner         string  `json:"owner"`
	CardMessageID *string `json:"card_message_id,omitempty"`
}

type Advice struct {
	base.Updatable `json:",inline"`

	Description string       `json:"description"`
	Type        AdivceType   `json:"type"`
	Data        AdviceData   `json:"data"`
	Status      AdviceStatus `json:"status"`
	AppliedAt   *int64       `json:"applied_at"`
	WorkspaceID uint64       `json:"workspace_id"`
}
