#!/usr/bin/env python3
"""
Unit tests for Python pi calculation
"""

import subprocess
import sys

SCRIPT_DIR = "/Users/einand/Code/test/python"
SCRIPT = f"{SCRIPT_DIR}/print_hej.py"

def run_test(decimals, expected_prefix):
    """Run the program and check output"""
    result = subprocess.run(
        ["python3", SCRIPT, str(decimals)],
        capture_output=True,
        text=True,
        timeout=30
    )
    
    output = result.stdout.strip()
    
    if output.startswith(expected_prefix):
        print(f"✓ PASS: {decimals} decimaler - {output[:50]}...")
        return True
    else:
        print(f"✗ FAIL: {decimals} decimaler")
        print(f"  Förväntade: {expected_prefix}...")
        print(f"  Fick: {output[:100]}")
        return False

def main():
    print("=== Python Pi-beräkning Unit Tester ===")
    print()
    
    tests_passed = 0
    tests_failed = 0
    
    # Test 1: 10 decimaler
    print("Test 1: 10 decimaler")
    if run_test(10, "3.1415926535"):
        tests_passed += 1
    else:
        tests_failed += 1
    print()
    
    # Test 2: 5 decimaler
    print("Test 2: 5 decimaler")
    if run_test(5, "3.14159"):
        tests_passed += 1
    else:
        tests_failed += 1
    print()
    
    # Test 3: 1 decimal
    print("Test 3: 1 decimal")
    if run_test(1, "3.1"):
        tests_passed += 1
    else:
        tests_failed += 1
    print()
    
    # Test 4: 100 decimaler
    print("Test 4: 100 decimaler")
    expected_100 = "3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067"
    if run_test(100, expected_100):
        tests_passed += 1
    else:
        tests_failed += 1
    print()
    
    # Test 5: Default (100 decimaler)
    print("Test 5: Default (100 decimaler)")
    result = subprocess.run(
        ["python3", SCRIPT],
        capture_output=True,
        text=True,
        timeout=30
    )
    output = result.stdout.strip()
    if output.startswith(expected_100):
        print(f"✓ PASS: Default - {output[:50]}...")
        tests_passed += 1
    else:
        print(f"✗ FAIL: Default")
        print(f"  Förväntade: {expected_100}...")
        print(f"  Fick: {output[:100]}")
        tests_failed += 1
    print()
    
    # Test 6: Ogiltig input
    print("Test 6: Ogiltig input (ska använda default 100)")
    result = subprocess.run(
        ["python3", SCRIPT, "invalid"],
        capture_output=True,
        text=True,
        timeout=30
    )
    output = result.stdout.strip()
    if output.startswith(expected_100):
        print(f"✓ PASS: Ogiltig input hanterad korrekt")
        tests_passed += 1
    else:
        print(f"✗ FAIL: Ogiltig input")
        print(f"  Förväntade: {expected_100}...")
        print(f"  Fick: {output[:100]}")
        tests_failed += 1
    print()
    
    # Summary
    print("=== Sammanfattning ===")
    print(f"Passerade: {tests_passed}")
    print(f"Misslyckade: {tests_failed}")
    
    if tests_failed == 0:
        print("✓ Alla tester passerade!")
        sys.exit(0)
    else:
        print("✗ Några tester misslyckades")
        sys.exit(1)

if __name__ == "__main__":
    main()