package workspace

import (
	"testing"

	"github.com/stretchr/testify/require"

	"github.com/tidbcloud/AgentTeam/internal/api/dto"
	storeworkspace "github.com/tidbcloud/AgentTeam/internal/store/workspace"
)

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

	response := presentWorkspace(storeworkspace.Summary{
		WorkspaceID:       "wrk_1",
		Slug:              "launch",
		Name:              "Launch",
		WorkspaceRole:     "admin",
		MemberID:          "mem_1",
		MemberDisplayName: "Ada Workspace",
		PlanKey:           "pro",
	}, true, false)

	require.Equal(t, "wrk_1", response.ID)
	require.Equal(t, "mem_1", response.MemberID)
	require.Equal(t, "Ada Workspace", response.MemberDisplayName)
	require.Equal(t, "admin", response.Role)
	require.True(t, response.HasUnread)
	require.Equal(t, int64(1), response.UnreadCount)
	require.Nil(t, response.Capabilities, "MeshX disabled must omit capabilities")
}

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

	response := presentWorkspace(storeworkspace.Summary{
		WorkspaceID: "wrk_1",
		Slug:        "launch",
		Name:        "Launch",
	}, false, true)

	require.NotNil(t, response.Capabilities, "MeshX enabled must populate capabilities")
	require.NotNil(t, response.Capabilities.Memory, "capabilities must include Memory")
	require.True(t, response.Capabilities.Memory.Enabled, "Memory capability must be enabled")
	require.NotNil(t, response.Capabilities.Roles, "capabilities must include Roles")
	require.True(t, response.Capabilities.Roles.Enabled, "Roles capability must be enabled")
}

// TestWorkspaceCapabilitiesShape pins the JSON shape Desktop depends on. If
// this test breaks, Desktop's Memory batch pull decision may regress.
func TestWorkspaceCapabilitiesShape(t *testing.T) {
	t.Parallel()

	enabled := workspaceCapabilities(true)
	require.NotNil(t, enabled)
	require.Equal(t, &dto.WorkspaceCapabilities{
		Memory: &dto.WorkspaceMemoryCapability{Enabled: true},
		Roles:  &dto.WorkspaceRoleCapability{Enabled: true},
	}, enabled)

	disabled := workspaceCapabilities(false)
	require.Nil(t, disabled, "MeshX disabled must return nil so JSON omits the field")
}
