package task

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

type ListTasksRequest struct {
	baseapi.PageRequest

	TaskListID   uint64                 `form:"task_list_id" json:"task_list_id"`
	ParentTaskID uint64                 `form:"parent_task_id" json:"parent_task_id"`
	Creator      string                 `form:"creator" json:"creator"`
	Priority     []taskent.TaskPriority `form:"priority" json:"priority"`
	Group        taskent.TaskGroup      `form:"group" json:"group"`
}

type ListTasksResponse struct {
	*baseapi.BaseResponse

	Tasks []*taskent.Task `json:"tasks"`
	Total int64           `json:"total"`
}

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

type CreateTaskResponse struct {
	*baseapi.BaseResponse

	Task *taskent.Task `json:"task"`
}

type GetTaskResponse struct {
	*baseapi.BaseResponse

	Task *taskent.Task `json:"task"`
}

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

type UpdateTaskResponse struct {
	*baseapi.BaseResponse

	Task *taskent.Task `json:"task"`
}

type CompleteTaskResponse struct {
	*baseapi.BaseResponse

	Task *taskent.Task `json:"task"`
}
