package privilege

import (
	ctrl "github.com/tidbcloud/devops/pkg/controller"
	privsvcapi "github.com/tidbcloud/devops/pkg/service/privilege/api"

	"go.uber.org/dig"
)

type ControllerParam struct {
	dig.In

	PrivilegeService privsvcapi.PrivilegeServiceAPI
}

type PrivilegeController struct {
	svc privsvcapi.PrivilegeServiceAPI
}

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

func NewPrivilegeController(p ControllerParam) ctrl.Controller {
	return &PrivilegeController{
		svc: p.PrivilegeService,
	}
}

func (c *PrivilegeController) RegisterAPI(suite *ctrl.Suite) error {
	r := suite.Router

	group := r.Group("/privilege")
	{
		group.GET("/privileges", c.ListPrivileges)
		group.POST("/privileges", c.RequestPrivilege)
		group.GET("/privileges/:priv_id", c.GetPrivilege)
		group.POST("/privileges/:priv_id/revoke", c.RevokePrivilege)
	}

	return nil
}
