package approval

import (
	ctrl "github.com/tidbcloud/devops/pkg/controller"
	coresvccli "github.com/tidbcloud/devops/pkg/infra/clients/coresvccli"
	apprsvcapi "github.com/tidbcloud/devops/pkg/service/approval/api"

	"go.uber.org/dig"
)

type ControllerParam struct {
	dig.In

	ApprovalService apprsvcapi.ApprovalServiceAPI
	CoreSvcCli      *coresvccli.CoreSvcCli
}

type ApprovalController struct {
	apprSvc    apprsvcapi.ApprovalServiceAPI
	coreSvcCli *coresvccli.CoreSvcCli
}

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

func NewApprovalController(p ControllerParam) ctrl.Controller {
	return &ApprovalController{
		apprSvc:    p.ApprovalService,
		coreSvcCli: p.CoreSvcCli,
	}
}

func (c *ApprovalController) RegisterAPI(suite *ctrl.Suite) error {
	group := suite.Router.Group("/approval")
	{
		group.POST("/approvals", c.CreateApproval)
		group.GET("/approvals/:appr_id", c.GetApproval)
		group.POST("/approvals/:appr_id/approve", c.UserApprove)
		group.POST("/approvals/:appr_id/reject", c.UserReject)
		group.POST("/approvals/:appr_id/admin_approve", c.AdminApprove)
		group.POST("/approvals/:appr_id/cancel", c.CancelApproval)
	}

	return nil
}
