package ticket

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"
	ingestsvcapi "github.com/tidbcloud/aisupport/services/ticket-manager/internal/services/ingest/api"
	ticketsvcapi "github.com/tidbcloud/aisupport/services/ticket-manager/internal/services/ticket/api"
)

type TicketsHandlerParam struct {
	dig.In

	TicketService ticketsvcapi.Service
	IngestService ingestsvcapi.Service
}

type TicketsHandlerResult struct {
	dig.Out

	Handler apiserver.Handler `group:"apiHandlers"`
}

type TicketsHandler struct {
	ticketService ticketsvcapi.Service
	ingestService ingestsvcapi.Service
}

func NewTicketsHandler(param TicketsHandlerParam) TicketsHandlerResult {
	return TicketsHandlerResult{
		Handler: &TicketsHandler{
			ticketService: param.TicketService,
			ingestService: param.IngestService,
		},
	}
}

func (h *TicketsHandler) Name() string {
	return "TicketsHandler"
}

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

	router.GET("/tickets", h.ListTickets)
	router.GET("/tickets/:jiraIssueKey", h.GetTicket)

	router.POST("/tickets/:jiraIssueKey", h.CreateTicket)

	router.PUT("/tickets/:jiraIssueKey/jira_issue", h.UpdateTicketJiraIssue)

	router.GET("/tickets/:jiraIssueKey/timeline", h.ListTimeline)

	return nil
}
