import requests
import time
import sys

BASE_URL = "http://127.0.0.1:8000"

def test_api():
    print("Waiting for server to start...")
    for _ in range(10):
        try:
            requests.get(BASE_URL)
            break
        except requests.exceptions.ConnectionError:
            time.sleep(1)
    else:
        print("Server failed to start")
        sys.exit(1)

    print("Server started!")

    # 1. Login
    print("\nTesting Login...")
    response = requests.post(f"{BASE_URL}/token", data={"username": "admin", "password": "admin123"})
    if response.status_code != 200:
        print(f"Login failed: {response.text}")
        sys.exit(1)
    
    token = response.json()["access_token"]
    headers = {"Authorization": f"Bearer {token}"}
    print("Login successful")

    # 2. Get Topics
    print("\nTesting Get Topics...")
    response = requests.get(f"{BASE_URL}/topics", headers=headers)
    if response.status_code != 200:
        print(f"Get Topics failed: {response.text}")
    else:
        topics = response.json()
        print(f"Topics found: {len(topics)}")
        if topics:
            print(f"First topic: {topics[0]}")

    # 3. Get Quizzes
    print("\nTesting Get Quizzes for 'apis'...")
    response = requests.get(f"{BASE_URL}/topics/apis/quizzes", headers=headers)
    if response.status_code != 200:
        print(f"Get Quizzes failed: {response.text}")
    else:
        quizzes = response.json()
        print(f"Quizzes found: {len(quizzes)}")

    # 4. Get Quiz Questions
    print("\nTesting Get Quiz Questions for 'apis-basic'...")
    response = requests.get(f"{BASE_URL}/quizzes/apis-basic/questions", headers=headers)
    if response.status_code != 200:
        print(f"Get Questions failed: {response.text}")
    else:
        questions = response.json()
        print(f"Questions found: {len(questions)}")
        if questions:
            print(f"First question: {questions[0]}")

    # 5. Get Random Questions (Answer Hidden?)
    print("\nTesting Random Questions (Answer Hidden check)...")
    response = requests.get(f"{BASE_URL}/questions/random?limit=2", headers=headers)
    if response.status_code != 200:
        print(f"Get Random Questions failed: {response.text}")
    else:
        random_qs = response.json()
        print(f"Random Questions found: {len(random_qs)}")
        if random_qs:
            q = random_qs[0]
            if "answer" in q:
                print("FAILURE: 'answer' field present in random question!")
            else:
                print("SUCCESS: 'answer' field hidden correctly - Logic requirement met.")
    
    print("\nVerification Complete!")

if __name__ == "__main__":
    test_api()
