package action

import (
	"context"
	"os/exec"
)

// RunIntegrationTestInput is input to RunIntegrationTestActivity.
type RunIntegrationTestInput struct {
	WorktreePath string
	TestCmd      string
}

// RunIntegrationTestOutput is the output of RunIntegrationTestActivity.
type RunIntegrationTestOutput struct {
	Passed bool
	Logs   string
}

// RunIntegrationTestActivity runs integration tests in the worktree.
func RunIntegrationTestActivity(ctx context.Context, in RunIntegrationTestInput) (RunIntegrationTestOutput, error) {
	if in.TestCmd == "" {
		// No test command, assume pass
		return RunIntegrationTestOutput{Passed: true, Logs: "No test command provided"}, nil
	}

	// Run test command
	cmd := exec.CommandContext(ctx, "sh", "-c", in.TestCmd)
	cmd.Dir = in.WorktreePath

	output, err := cmd.CombinedOutput()
	if err != nil {
		return RunIntegrationTestOutput{
			Passed: false,
			Logs:   string(output) + "\nError: " + err.Error(),
		}, nil
	}

	return RunIntegrationTestOutput{
		Passed: true,
		Logs:   string(output),
	}, nil
}
