import os
import subprocess
import sys

ENVIRONMENTS = [
    "node-24", "python-3.11","python-3.12", "python-3.13"
]
AGENTS = [
    "pi", "opencode", "claude"
]

def run_command(command: str) -> tuple[str, str]:
    """Run a shell command and return its output as a string."""
    result = subprocess.run(
        command,
        shell=True,
        capture_output=True,
        text=True,
        errors="replace"
    )
    #print("Return code:", result.returncode)
    #print("stdout:", result.stdout)
    #print("stderr:", result.stderr)
    return (result.stdout.strip(), result.stderr)

def run_spens(env: str, agent: str) -> tuple[str, str] :
    command = "spens " + env + " " + agent + " ./tests/e2e/workspace " + " \"tell me what is in test.txt \" --rebuild"
    #print(command)
    result = run_command(command=command)
    return result

def test_harness(env: str, agent: str):
    result = run_spens(env, agent)
    if "I am working" in result[0]:
        return "PASS"
    else:
        print("====std out=====")
        print(result[0])
        print("====error out=====")
        print(result[1])
    return  "FAIL"

def test_all():
    for env in ENVIRONMENTS:
        for agent in AGENTS:
            print(env + " - " + agent + ": ",  end="")
            output = test_harness(env, agent)
            print(str(output))

if __name__ == "__main__":
    if "ANTHROPIC_API_KEY" not in os.environ:
        print("ANTHROPIC_API_KEY is required")
        sys.exit(0)
    print("Launching E2E test")
    #test_harness("node-24", "pi")
    test_all()
