"""
Tests for the coffee analytics dashboard.
"""
import pytest


@pytest.mark.asyncio
async def test_dashboard_requires_login(client):
    """Dashboard redirects unauthenticated users."""
    response = await client.get("/dashboard/")
    assert response.status_code == 302


@pytest.mark.asyncio
async def test_dashboard_loads(auth_client, mock_analytics):
    """Dashboard renders with chart data for authenticated user."""
    response = await auth_client.get("/dashboard/")
    assert response.status_code == 200

    body = (await response.get_data(as_text=True))
    assert "Pulse" in body
    assert "Stock-to-Use Ratio" in body
    assert "KC=F Close" in body


@pytest.mark.asyncio
async def test_dashboard_shows_metric_cards(auth_client, mock_analytics):
    """Dashboard shows key metric values from latest data."""
    response = await auth_client.get("/dashboard/")
    body = (await response.get_data(as_text=True))

    assert "MM Net Position" in body
    assert "Certified Stocks" in body


@pytest.mark.asyncio
async def test_dashboard_yoy_table(auth_client, mock_analytics):
    """Dashboard renders YoY production change table."""
    response = await auth_client.get("/dashboard/")
    body = (await response.get_data(as_text=True))

    assert "Global Supply" in body


@pytest.mark.asyncio
async def test_dashboard_free_plan_limits_history(auth_client, mock_analytics):
    """Free plan should show limited history notice."""
    response = await auth_client.get("/dashboard/")
    body = (await response.get_data(as_text=True))

    assert "Upgrade" in body


@pytest.mark.asyncio
async def test_dashboard_free_plan_no_csv_export(auth_client, mock_analytics):
    """Free plan should not show CSV export button."""
    response = await auth_client.get("/dashboard/")
    body = (await response.get_data(as_text=True))

    assert "Upgrade" in body


@pytest.mark.asyncio
async def test_countries_page_loads(auth_client, mock_analytics):
    """Country comparison page loads."""
    response = await auth_client.get("/dashboard/countries")
    assert response.status_code == 200

    body = (await response.get_data(as_text=True))
    assert "Country Comparison" in body


@pytest.mark.asyncio
async def test_countries_page_with_selection(auth_client, mock_analytics):
    """Country comparison with country params."""
    response = await auth_client.get("/dashboard/countries?country=BR&country=VN&metric=production")
    assert response.status_code == 200
