"""Tests for onboarding status endpoints."""

import pytest


@pytest.mark.asyncio
async def test_onboarding_status_fresh_user(client, auth_headers):
    """Fresh user should have all onboarding items false."""
    response = await client.get(
        "/api/v1/users/onboarding-status",
        headers=auth_headers,
    )
    assert response.status_code == 200
    data = response.json()

    assert data["created_flow"] is False
    assert data["ran_session"] is False
    assert data["exported_session"] is False
    assert data["tried_ai_assistant"] is False
    assert data["invited_teammate"] is False
    assert data["connected_psa"] is False
    assert data["is_team_user"] is False
    assert data["dismissed"] is False


@pytest.mark.asyncio
async def test_onboarding_dismiss(client, auth_headers):
    """Dismiss endpoint should set dismissed to true."""
    # Verify starts as false
    response = await client.get(
        "/api/v1/users/onboarding-status",
        headers=auth_headers,
    )
    assert response.status_code == 200
    assert response.json()["dismissed"] is False

    # Dismiss
    response = await client.post(
        "/api/v1/users/onboarding-status/dismiss",
        headers=auth_headers,
    )
    assert response.status_code == 200
    assert response.json()["dismissed"] is True

    # Verify persisted
    response = await client.get(
        "/api/v1/users/onboarding-status",
        headers=auth_headers,
    )
    assert response.status_code == 200
    assert response.json()["dismissed"] is True


@pytest.mark.asyncio
async def test_onboarding_created_flow_after_tree_creation(client, auth_headers, test_tree):
    """After creating a tree, created_flow should be true."""
    response = await client.get(
        "/api/v1/users/onboarding-status",
        headers=auth_headers,
    )
    assert response.status_code == 200
    assert response.json()["created_flow"] is True


@pytest.mark.asyncio
async def test_onboarding_requires_auth(client):
    """Unauthenticated requests should be rejected."""
    response = await client.get("/api/v1/users/onboarding-status")
    assert response.status_code == 401

    response = await client.post("/api/v1/users/onboarding-status/dismiss")
    assert response.status_code == 401
