package webagent_test

import (
	"testing"

	"github.com/gin-gonic/gin"
	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/AgentTeam/internal/api/testkit/httputil"
	"github.com/tidbcloud/AgentTeam/internal/api/webagent"
)

func TestRegisterRoutes_WebAgentRouteParity(t *testing.T) {
	t.Parallel()

	router := gin.New()
	webagent.RegisterRoutes(router, webagent.Dependencies{})

	counts := httputil.RouteCounts(router)
	for _, route := range []string{
		"GET /api/v1/workspaces/:workspaceId/agents",
		"POST /api/v1/workspaces/:workspaceId/agents/runtime-snapshots",
		"POST /api/v1/workspaces/:workspaceId/agents/runtime-failures",
		"POST /api/v1/workspaces/:workspaceId/agents",
		"GET /api/v1/workspaces/:workspaceId/agents/:agentId",
		"POST /api/v1/workspaces/:workspaceId/agents/:agentId/duplicate",
		"PATCH /api/v1/workspaces/:workspaceId/agents/:agentId",
		"POST /api/v1/workspaces/:workspaceId/agents/:agentId/update",
		"POST /api/v1/workspaces/:workspaceId/agents/:agentId/behavior-settings/update",
		"DELETE /api/v1/workspaces/:workspaceId/agents/:agentId",
		"GET /api/v1/workspaces/:workspaceId/agents/:agentId/runtime-failure",
		"GET /api/v1/workspaces/:workspaceId/agents/:agentId/behavior-settings",
		"PATCH /api/v1/workspaces/:workspaceId/agents/:agentId/behavior-settings",
		"POST /api/v1/workspaces/:workspaceId/agents/:agentId/start",
		"POST /api/v1/workspaces/:workspaceId/agents/:agentId/stop",
		"POST /api/v1/workspaces/:workspaceId/agents/:agentId/reset",
		"GET /api/v1/workspaces/:workspaceId/agents/:agentId/files",
		"GET /api/v1/workspaces/:workspaceId/agents/:agentId/files/content",
		"GET /api/v1/workspaces/:workspaceId/agents/:agentId/trajectory",
		"GET /api/v1/workspaces/:workspaceId/reviews",
		"GET /api/v1/workspaces/:workspaceId/reviews/:reviewId",
		"GET /api/v1/workspaces/:workspaceId/reviews/:reviewId/snapshot",
		"GET /api/v1/workspaces/:workspaceId/reviews/:reviewId/summary",
		"GET /api/v1/workspaces/:workspaceId/reviews/:reviewId/files",
		"GET /api/v1/workspaces/:workspaceId/reviews/:reviewId/fingerprint",
		"GET /api/v1/workspaces/:workspaceId/reviews/:reviewId/diff",
		"GET /api/v1/workspaces/:workspaceId/projects",
		"POST /api/v1/workspaces/:workspaceId/projects",
		"GET /api/v1/workspaces/:workspaceId/projects/:projectId",
		"PATCH /api/v1/workspaces/:workspaceId/projects/:projectId",
		"DELETE /api/v1/workspaces/:workspaceId/projects/:projectId",
		"GET /api/v1/workspaces/:workspaceId/projects/:projectId/settings/access",
		"PUT /api/v1/workspaces/:workspaceId/projects/:projectId/settings/access/:memberId",
		"DELETE /api/v1/workspaces/:workspaceId/projects/:projectId/settings/access/:memberId",
		"GET /api/v1/workspaces/:workspaceId/projects/:projectId/files",
		"GET /api/v1/workspaces/:workspaceId/projects/:projectId/files/content",
		"GET /api/v1/workspaces/:workspaceId/projects/:projectId/reviews",
		"GET /api/v1/me/model-profiles",
		"GET /api/v1/me/model-profiles/:profileId",
		"POST /api/v1/me/model-profiles",
		"PATCH /api/v1/me/model-profiles/:profileId",
		"POST /api/v1/me/model-profiles:action",
		"DELETE /api/v1/me/model-profiles/:profileId",
	} {
		require.Equal(t, 1, counts[route], route)
	}
}
