from app.core.security import get_password_hash
from app.models.enums import UserRole
from app.models.user import User


def test_super_admin_overview(client, db, seed_data):
    platform_agency = seed_data["agency"]
    super_admin = User(
        agency_id=platform_agency.id,
        email="super@test.com",
        full_name="Super Admin",
        hashed_password=get_password_hash("Super@12345"),
        role=UserRole.SUPER_ADMIN,
        is_active=True,
    )
    db.add(super_admin)
    db.commit()

    login = client.post("/api/v1/auth/login", json={"email": "super@test.com", "password": "Super@12345"})
    assert login.status_code == 200
    headers = {"Authorization": f"Bearer {login.json()['access_token']}"}

    overview = client.get("/api/v1/super-admin/overview", headers=headers)
    assert overview.status_code == 200
    body = overview.json()
    assert "overview" in body
    assert "agencies" in body
    assert body["overview"]["agency_count"] >= 1


def test_super_admin_only_parser_lab(client, auth_headers, db, seed_data):
    agent = User(
        agency_id=seed_data["agency"].id,
        email="agent2@test.com",
        full_name="Agent Two",
        hashed_password=get_password_hash("Agent@12345"),
        role=UserRole.AGENT,
        is_active=True,
    )
    db.add(agent)
    db.commit()

    agent_login = client.post("/api/v1/auth/login", json={"email": "agent2@test.com", "password": "Agent@12345"})
    agent_headers = {"Authorization": f"Bearer {agent_login.json()['access_token']}"}

    denied = client.get("/api/v1/parser-lab/extractions", headers=agent_headers)
    assert denied.status_code == 403

    admin_denied = client.get("/api/v1/parser-lab/extractions", headers=auth_headers)
    assert admin_denied.status_code == 403


def test_parser_success_report(client, db, seed_data):
    super_admin = User(
        agency_id=seed_data["agency"].id,
        email="super-report@test.com",
        full_name="Super Report",
        hashed_password=get_password_hash("Super@12345"),
        role=UserRole.SUPER_ADMIN,
        is_active=True,
    )
    db.add(super_admin)
    db.commit()

    login = client.post("/api/v1/auth/login", json={"email": "super-report@test.com", "password": "Super@12345"})
    headers = {"Authorization": f"Bearer {login.json()['access_token']}"}

    report = client.get("/api/v1/super-admin/parser-report", headers=headers)
    assert report.status_code == 200
    body = report.json()
    assert "status_matrix" in body
    assert "by_agency" in body
    assert "by_insurer" in body
    assert "by_field" in body
    assert "by_source" in body
    assert "agency_insurer_matrix" in body
    assert len(body["by_field"]) >= 20

    export_csv = client.get("/api/v1/super-admin/parser-report/export", headers=headers)
    assert export_csv.status_code == 200
    assert "Parser Success Report" in export_csv.text
