package serviceaccount

import (
	"github.com/gin-gonic/gin"

	"github.com/tidbcloud/AgentTeam/internal/api"
	"github.com/tidbcloud/AgentTeam/internal/api/dto"
)

func RegisterRoutes(router gin.IRouter, dependencies Dependencies) {
	if router == nil {
		return
	}
	workspaceScoped := router.Group(
		"/api/v1/workspaces/:workspaceId",
		api.RequireAuthenticatedUser(dependencies.SessionAuth),
		api.RequireVerifiedIdentity(dependencies.EmailVerificationRequired),
		api.RequireRouteWorkspace(dependencies.WorkspaceStore),
	)
	handler := &Handler{service: dependencies.Service, projector: dependencies.PendingRequestProjector}
	workspaceScoped.GET("/service-accounts", api.HandleWorkspaceScoped(handler.ListAccounts))
	workspaceScoped.GET("/service-accounts/:serviceAccountId", api.HandleWorkspaceScoped(handler.GetAccount))
	workspaceScoped.DELETE("/service-accounts/:serviceAccountId", api.HandleWorkspaceScoped(handler.DeleteAccount))
	workspaceScoped.PATCH("/service-accounts/:serviceAccountId/avatar", api.HandleWorkspaceScopedJSON[dto.WorkspaceServiceAccountAvatarUpdateRequest](handler.UpdateAccountAvatar))
	workspaceScoped.GET("/service-accounts/:serviceAccountId/managers", api.HandleWorkspaceScoped(handler.ListManagers))
	workspaceScoped.POST("/service-accounts/:serviceAccountId/managers", api.HandleWorkspaceScopedJSON[dto.WorkspaceServiceAccountManagerAddRequest](handler.AddManager))
	workspaceScoped.DELETE("/service-accounts/:serviceAccountId/managers/:managerId", api.HandleWorkspaceScoped(handler.RemoveManager))
	workspaceScoped.GET("/service-account-create-requests", api.HandleWorkspaceScoped(handler.ListCreateRequests))
	workspaceScoped.POST("/service-account-create-requests", api.HandleWorkspaceScopedJSON[dto.WorkspaceServiceAccountCreateRequest](handler.CreateRequest))
	workspaceScoped.GET("/service-account-create-requests/:requestId", api.HandleWorkspaceScoped(handler.GetCreateRequest))
}
