#!/usr/bin/env python
"""Production smoke tests for Fly.io deployment."""

import requests
import json
from datetime import datetime

def run_smoke_tests():
    base_url = "https://rateright-au.fly.dev"
    
    endpoints = [
        "/",
        "/login",
        "/workers",
        "/api/workers",
        "/jobs",
        "/contracts",
        "/messages",
        "/_health",
        "/_ready"
    ]
    
    results = []
    has_5xx = False
    
    print(f"Production Smoke Tests - {datetime.now()}")
    print(f"Base URL: {base_url}")
    print("=" * 60)
    
    for endpoint in endpoints:
        url = f"{base_url}{endpoint}"
        try:
            response = requests.get(url, timeout=10, allow_redirects=True)
            status = response.status_code
            
            # Check for 5xx errors
            if 500 <= status < 600:
                has_5xx = True
                status_text = f"❌ {status} (SERVER ERROR)"
            elif 400 <= status < 500:
                status_text = f"⚠️  {status} (Client error - may be expected)"
            elif 300 <= status < 400:
                status_text = f"↩️  {status} (Redirect)"
            else:
                status_text = f"✓ {status} (OK)"
            
            result = {
                "endpoint": endpoint,
                "url": url,
                "status_code": status,
                "status_text": status_text,
                "response_time": response.elapsed.total_seconds()
            }
            
            results.append(result)
            print(f"{endpoint:20} -> {status_text} ({response.elapsed.total_seconds():.2f}s)")
            
        except requests.exceptions.RequestException as e:
            result = {
                "endpoint": endpoint,
                "url": url,
                "status_code": "ERROR",
                "status_text": f"❌ Connection Error: {str(e)}",
                "response_time": None
            }
            results.append(result)
            print(f"{endpoint:20} -> ❌ ERROR: {str(e)}")
    
    print("=" * 60)
    print(f"\nSummary:")
    print(f"Total endpoints tested: {len(endpoints)}")
    print(f"Has 5xx errors: {'❌ YES' if has_5xx else '✓ NO'}")
    
    # Save results to file
    with open("evidence/fly/03_smoke.txt", "w") as f:
        f.write(f"Production Smoke Test Results\n")
        f.write(f"=============================\n")
        f.write(f"Date: {datetime.now()}\n")
        f.write(f"App URL: {base_url}\n\n")
        
        for result in results:
            f.write(f"{result['endpoint']:20} -> Status: {result['status_code']}")
            if result['response_time']:
                f.write(f" (Response time: {result['response_time']:.2f}s)")
            f.write("\n")
        
        f.write(f"\n{'=' * 40}\n")
        f.write(f"SUMMARY:\n")
        f.write(f"Total endpoints: {len(endpoints)}\n")
        f.write(f"Has 5xx errors: {'YES - FAILED' if has_5xx else 'NO - PASSED'}\n")
    
    return not has_5xx

if __name__ == "__main__":
    success = run_smoke_tests()
    exit(0 if success else 1)
