package app

import (
	"context"
	"time"

	"github.com/tidbcloud/AgentTeam/internal/coredb"
	"github.com/tidbcloud/AgentTeam/internal/store/coordinator"
)

// installAppForUserForTest preserves the old direct-install fixture setup for
// store integration tests without shipping a production bypass around the
// installation approval ledger. New behavior tests should prefer
// requestAndApproveAppInstallationForTests.
func (store *Store) installAppForUserForTest(ctx context.Context, userID string, workspaceID string, params InstallAppParams) (AppInstallationView, error) {
	workspaceMember, err := store.requireWorkspaceAccess(ctx, userID, workspaceID)
	if err != nil {
		return AppInstallationView{}, err
	}
	prepared, err := prepareAppInstallation(ctx, store.db, params)
	if err != nil {
		return AppInstallationView{}, err
	}
	if err := authorizeServiceInstallationManagement(workspaceMember); err != nil {
		return AppInstallationView{}, err
	}

	var installationID string
	if err := coordinator.New(store.db).Run(ctx, "install app service actor test fixture", func(tx coredb.Tx) error {
		var err error
		installationID, err = store.installPreparedAppInTx(ctx, tx, userID, workspaceID, workspaceMember.Member.ID, prepared, time.Now().UTC())
		return err
	}); err != nil {
		return AppInstallationView{}, err
	}
	installationView, err := store.appInstallationViewByID(ctx, workspaceID, installationID)
	if err != nil {
		return AppInstallationView{}, err
	}
	return installationView, nil
}
