package testkit

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

	"github.com/tidbcloud/AgentTeam/internal/api/admin"
	"github.com/tidbcloud/AgentTeam/internal/api/app"
	"github.com/tidbcloud/AgentTeam/internal/api/auth"
	"github.com/tidbcloud/AgentTeam/internal/api/channel"
	"github.com/tidbcloud/AgentTeam/internal/api/im"
	"github.com/tidbcloud/AgentTeam/internal/api/media"
	"github.com/tidbcloud/AgentTeam/internal/api/org"
	"github.com/tidbcloud/AgentTeam/internal/api/provider"
	"github.com/tidbcloud/AgentTeam/internal/api/public"
	"github.com/tidbcloud/AgentTeam/internal/api/serviceaccount"
	"github.com/tidbcloud/AgentTeam/internal/api/task"
	"github.com/tidbcloud/AgentTeam/internal/api/team"
	"github.com/tidbcloud/AgentTeam/internal/api/trigger"
	"github.com/tidbcloud/AgentTeam/internal/api/webagent"
	"github.com/tidbcloud/AgentTeam/internal/api/workflow/binding"
	"github.com/tidbcloud/AgentTeam/internal/api/workflow/invocation"
	"github.com/tidbcloud/AgentTeam/internal/api/workflow/plan"
	"github.com/tidbcloud/AgentTeam/internal/api/workflow/run"
	"github.com/tidbcloud/AgentTeam/internal/api/workspace"
)

// RegisterRoutes mounts this runtime's browser API under `/api/*`.
func (runtime *Runtime) RegisterRoutes(router gin.IRouter) {
	RegisterRoutes(router, runtime)
}

// RegisterRoutes mounts the browser API under `/api/*`.
func RegisterRoutes(router gin.IRouter, runtime *Runtime) {
	imDependencies := imRouteDependencies(runtime)
	public.RegisterRoutes(router, publicRouteDependencies(runtime))
	media.RegisterRoutes(router, mediaRouteDependencies(runtime))
	channel.RegisterRoutes(router, channelRouteDependencies(runtime))
	task.RegisterRoutes(router, taskRouteDependenciesWithStreamWriter(runtime, imDependencies.StreamWriter))
	team.RegisterRoutes(router, teamRouteDependencies(runtime))
	trigger.RegisterRoutes(router, triggerRouteDependencies(runtime))
	binding.RegisterRoutes(router, workflowBindingRouteDependencies(runtime))
	invocation.RegisterRoutes(router, workflowInvocationRouteDependencies(runtime))
	plan.RegisterRoutes(router, workflowPlanRouteDependencies(runtime))
	run.RegisterRoutes(router, workflowRunRouteDependencies(runtime))
	serviceaccount.RegisterRoutes(router, serviceAccountRouteDependencies(runtime))
	auth.RegisterRoutes(router, authRouteDependencies(runtime))
	admin.RegisterRoutes(router, adminRouteDependencies(runtime))
	workspace.RegisterRoutes(router, workspaceRouteDependencies(runtime))
	org.RegisterRoutes(router, orgRouteDependencies(runtime))
	im.RegisterRoutes(router, imDependencies)
	app.RegisterRoutes(router, appRouteDependencies(runtime))
	provider.RegisterRoutes(router, providerRouteDependencies(runtime))
	webagent.RegisterRoutes(router, webAgentRouteDependencies(runtime))
}
