package task

import (
	"github.com/gin-gonic/gin"
	"go.uber.org/dig"

	"github.com/tidbcloud/aisupport/packages/sdk-go/infra/apiserver"
	"github.com/tidbcloud/aisupport/services/ticket-manager/internal/app"
	tasksvcapi "github.com/tidbcloud/aisupport/services/ticket-manager/internal/services/task/api"
)

type HandlerParam struct {
	dig.In

	Task tasksvcapi.Service
}

type Handler struct {
	Task tasksvcapi.Service
}

func NewHandler(param HandlerParam) app.HandlerResult {
	return app.HandlerResult{
		Handler: &Handler{
			Task: param.Task,
		},
	}
}

func (h *Handler) Name() string {
	return "TaskHandler"
}

func (h *Handler) Register(routers map[apiserver.RoutePath]gin.IRouter) error {
	router := routers[app.APIRoutePath]

	g := router.Group("/task")
	{
		g.GET("/tasks", h.ListTasks)
		g.POST("/tasks", h.CreateTask)
		g.GET("/tasks/:id", h.GetTask)
		g.PUT("/tasks/:id", h.UpdateTask)
		g.DELETE("/tasks/:id", h.DeleteTask)
		g.POST("/tasks/:id/complete", h.CompleteTask)

		g.GET("/lists", h.ListTaskLists)
		g.POST("/lists", h.CreateTaskList)
		g.GET("/lists/:id", h.GetTaskList)
		g.PUT("/lists/:id", h.UpdateTaskList)
		g.DELETE("/lists/:id", h.DeleteTaskList)
	}

	return nil
}
