package team

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/store/model"
	storeteam "github.com/tidbcloud/AgentTeam/internal/store/team"
)

func TestRegisterRoutesMountsWorkspaceTeamRoutes(t *testing.T) {
	router := gin.New()
	RegisterRoutes(router, Dependencies{})

	routes := httputil.RouteCounts(router)
	for _, route := range []string{
		"GET /api/v1/workspaces/:workspaceId/teams",
		"POST /api/v1/workspaces/:workspaceId/teams",
		"GET /api/v1/workspaces/:workspaceId/teams/:teamId",
		"PATCH /api/v1/workspaces/:workspaceId/teams/:teamId",
		"DELETE /api/v1/workspaces/:workspaceId/teams/:teamId",
		"GET /api/v1/workspaces/:workspaceId/teams/:teamId/members",
		"POST /api/v1/workspaces/:workspaceId/teams/:teamId/members",
		"PATCH /api/v1/workspaces/:workspaceId/teams/:teamId/members/:teamMemberId",
		"DELETE /api/v1/workspaces/:workspaceId/teams/:teamId/members/:teamMemberId",
		"GET /api/v1/workspaces/:workspaceId/mention-candidates/teams",
	} {
		require.Equal(t, 1, routes[route], route)
	}
}

func TestTeamRoutesPreservesAgentPrincipalInMemberResponses(t *testing.T) {
	response := teamMemberResponse(storeteam.TeamMemberView{
		Member: model.WorkspaceTeamMember{
			ID:        "wtm_agent",
			TeamID:    "team_1",
			ActorKind: "agent",
			ActorID:   "mem_agent",
		},
		ActorProfile: storeteam.ActorProfile{
			ActorType:   "agent",
			PrincipalID: "agt_1",
			MemberID:    "mem_agent",
			TargetID:    "builder",
			DisplayName: "Builder",
			AvatarURL:   "/avatar.png",
		},
	})
	require.NotNil(t, response.ActorProfile)
	require.Equal(t, "agent", response.ActorProfile.ActorType)
	require.Equal(t, "agt_1", response.ActorProfile.PrincipalID)
	require.Equal(t, "mem_agent", response.ActorProfile.MemberID)
	require.Equal(t, "builder", response.ActorProfile.TargetID)
	require.Equal(t, "Builder", response.ActorProfile.DisplayName)
	require.Equal(t, "/avatar.png", response.ActorProfile.AvatarURL)
}
