package jump

import (
	ctrl "github.com/tidbcloud/devops/pkg/controller"
	jmpsvcapi "github.com/tidbcloud/devops/pkg/service/jump/api"

	"go.uber.org/dig"
)

type ControllerParam struct {
	dig.In

	JumpService jmpsvcapi.JumpServiceAPI
}

type JumpController struct {
	jmpSvc jmpsvcapi.JumpServiceAPI
}

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

func NewJumpController(p ControllerParam) ctrl.Controller {
	return &JumpController{
		jmpSvc: p.JumpService,
	}
}

func (c *JumpController) RegisterAPI(suite *ctrl.Suite) error {
	r := suite.Router
	group := r.Group("/jump")
	{
		group.GET("/authorizations", c.ListAuthorizations)
		group.POST("/authorizations", c.CreateAuthorization)
		group.GET("/authorizations/:authorization_id", c.GetAuthorization)
		group.POST("/authorizations/:authorization_id/cancel", c.CancelAuthorization)
		group.GET("/authorizations/:authorization_id/connection", c.GetConnection)

		group.GET("/destination/:destination_type", c.ListAvailableDestinations)

		group.GET("/jumpserver/users/me", c.GetUserOfApplicant)
		group.GET("/jumpserver/users/:email", c.GetUser)
		group.POST("/jumpserver/users/activate", c.ActivateUserOfApplicant)

		//group.GET("/authorizations/:authorization_id/audit_logs", c.ListAuditLogs)
	}
	admGroup := r.Group("/jump-admin") // separate from jump api to make api control easier.
	{
		admGroup.POST("/invite-user", c.InviteUser)
	}

	return nil
}
