package server

import (
	"context"
	"fmt"

	"github.com/tidbcloud/AgentTeam/internal/router"
	"github.com/tidbcloud/AgentTeam/internal/workspace/owner"
)

func managedWorkspaceSetForProfile(ctx context.Context, profile router.Profile, groupID string, loader owner.Loader) (owner.ManagedWorkspaceSet, error) {
	switch profile {
	case router.ProfileAll:
		return owner.NewAllSet(), nil
	case router.ProfileCentral:
		return owner.NewEmptySet(), nil
	case router.ProfileExtension:
		// The Extension profile is a binding/Catalog runtime, not a workspace
		// data-plane. It owns no workspaces; path workspace/agent binding is
		// enforced by the Agent Runtime principal authenticator, not by the
		// managed-workspace set.
		return owner.NewEmptySet(), nil
	case router.ProfileWorkspace:
		checker, ok := loader.(owner.GroupMembershipChecker)
		if !ok {
			return nil, fmt.Errorf("initialize managed workspace set: workspace placement checker is not configured")
		}
		set, err := owner.NewGroupSet(checker, groupID)
		if err != nil {
			return nil, fmt.Errorf("initialize managed workspace set: %w", err)
		}
		return set, nil
	default:
		return nil, fmt.Errorf("unsupported server profile %q", profile)
	}
}
