//go:build e2e

package testkit

import (
	"testing"

	"github.com/tidbcloud/AgentTeam/e2e/client"
)

// SingleUserScenario is the standard single-actor API scenario setup.
type SingleUserScenario struct {
	Env       Environment
	User      Session
	Workspace client.Workspace
	API       *client.Client
}

// HostPeerScenario is the standard two-actor scenario setup in one workspace.
type HostPeerScenario struct {
	Env       Environment
	Host      Session
	Peer      PeerSession
	Workspace client.Workspace
	HostAPI   *client.Client
}

// NewSingleUserScenario starts the environment and returns user, workspace, and workspace-scoped API.
func NewSingleUserScenario(t *testing.T) SingleUserScenario {
	t.Helper()

	env := StartEnvironment(t)
	user := RequirePrimaryUser(t, env)
	workspace := RequireWorkspace(t, user)
	return SingleUserScenario{
		Env:       env,
		User:      user,
		Workspace: workspace,
		API:       WorkspaceAPI(user, workspace),
	}
}

// NewHostPeerScenario starts the environment and returns host, peer, workspace, and host workspace API.
func NewHostPeerScenario(t *testing.T) HostPeerScenario {
	t.Helper()

	env := StartEnvironment(t)
	host := RequirePrimaryUser(t, env)
	workspace := RequireWorkspace(t, host)
	peer := RequirePeerUser(t, env, host, workspace)
	return HostPeerScenario{
		Env:       env,
		Host:      host,
		Peer:      peer,
		Workspace: workspace,
		HostAPI:   WorkspaceAPI(host, workspace),
	}
}
