from pathlib import Path
import subprocess
import sys
import time

TESTS = Path(__file__).parent

files = sorted(TESTS.glob("*.py"))

files = [
    f for f in files
    if f.name != Path(__file__).name
]

print("=" * 80)
print("ExplorerAssistGPT Test Runner")
print("=" * 80)
print(f"Directory : {TESTS}")
print(f"Tests     : {len(files)}")
print()

results = []

for test in files:

    print("=" * 80)
    print(f"RUNNING : {test.name}")
    print("=" * 80)

    start = time.time()

    result = subprocess.run(
        [sys.executable, str(test)],
        capture_output=True,
        text=True
    )

    elapsed = time.time() - start

    if result.stdout:
        print(result.stdout.rstrip())

    if result.stderr:
        print()
        print("STDERR")
        print("-" * 80)
        print(result.stderr.rstrip())

    status = "PASS" if result.returncode == 0 else "FAIL"

    results.append(
        (
            test.name,
            status,
            elapsed
        )
    )

    print()
    print(f"Exit Code : {result.returncode}")
    print(f"Duration  : {elapsed:.2f}s")
    print()

print()
print("=" * 80)
print("SUMMARY")
print("=" * 80)

passed = 0
failed = 0

for name, status, elapsed in results:

    print(
        f"{status:<5}  {elapsed:6.2f}s  {name}"
    )

    if status == "PASS":
        passed += 1
    else:
        failed += 1

print()
print("=" * 80)
print(f"Passed : {passed}")
print(f"Failed : {failed}")
print(f"Total  : {len(results)}")
print("=" * 80)