package remediationticket

import (
	"go.uber.org/dig"

	ctrl "github.com/tidbcloud/devops/pkg/controller"
	rtsvcapi "github.com/tidbcloud/devops/pkg/service/remediationticket/api"
)

type ControllerParam struct {
	dig.In

	RemediationTicketService rtsvcapi.RemediationTicketServiceAPI
}

type RemediationTicketController struct {
	rtSvc rtsvcapi.RemediationTicketServiceAPI
}

func (c *RemediationTicketController) Name() string {
	return "RemediationTicketController"
}

func NewRemediationTicketController(p ControllerParam) ctrl.Controller {
	return &RemediationTicketController{
		rtSvc: p.RemediationTicketService,
	}
}

func (c *RemediationTicketController) RegisterAPI(suite *ctrl.Suite) error {
	r := suite.Router
	group := r.Group("/remediationtickets")
	{
		group.GET("", c.ListTickets)
		group.POST("", c.CreateTicket)
		group.GET("/:ticket_id", c.GetTicket)
		group.POST("/:ticket_id/cancel", c.CancelTicket)
		group.POST("/:ticket_id/submit", c.SubmitTicketPhase)
		group.POST("/:ticket_id/approve", c.ApproveTicketPhase)
		group.POST("/:ticket_id/reject", c.RejectTicketPhase)
		group.GET("/:ticket_id/progress", c.GetProgress)
		group.GET("/:ticket_id/ticket_approvals", c.GetTicketApprovals)
		group.GET("/:ticket_id/approval_flow", c.GetApprovalFlow)
		group.POST("/:ticket_id/generate_doc", c.GenerateFinalDoc)
	}

	return nil
}
