# tests/integration/api/v1/admin/test_dashboard.py
"""
Integration tests for admin dashboard and statistics endpoints.

Tests the /api/v1/admin/dashboard/* endpoints.
"""

import pytest


@pytest.mark.integration
@pytest.mark.api
@pytest.mark.admin
@pytest.mark.stats
class TestAdminDashboardAPI:
    """Tests for admin dashboard endpoints."""

    def test_get_dashboard(self, client, admin_headers):
        """Test getting admin dashboard."""
        response = client.get("/api/v1/admin/dashboard", headers=admin_headers)

        assert response.status_code == 200
        data = response.json()
        assert "platform" in data
        assert "users" in data
        assert "stores" in data
        assert "recent_stores" in data
        assert "recent_imports" in data

    def test_get_dashboard_non_admin(self, client, auth_headers):
        """Test non-admin cannot access dashboard."""
        response = client.get("/api/v1/admin/dashboard", headers=auth_headers)

        assert response.status_code == 403
        data = response.json()
        assert data["error_code"] == "ADMIN_REQUIRED"

    def test_get_comprehensive_stats(
        self, client, admin_headers, test_marketplace_product
    ):
        """Test getting comprehensive statistics."""
        response = client.get("/api/v1/admin/dashboard/stats", headers=admin_headers)

        assert response.status_code == 200
        data = response.json()
        assert "total_products" in data
        assert "unique_brands" in data
        assert "unique_categories" in data
        assert "unique_marketplaces" in data
        assert "unique_stores" in data
        assert data["total_products"] >= 0

    def test_get_marketplace_stats(
        self, client, admin_headers, test_marketplace_product
    ):
        """Test getting marketplace statistics."""
        response = client.get(
            "/api/v1/admin/dashboard/stats/marketplace", headers=admin_headers
        )

        assert response.status_code == 200
        data = response.json()
        assert isinstance(data, list)
        if len(data) > 0:
            assert "marketplace" in data[0]
            assert "total_products" in data[0]
            assert "unique_stores" in data[0]

    def test_get_platform_stats(self, client, admin_headers):
        """Test getting platform statistics."""
        response = client.get(
            "/api/v1/admin/dashboard/stats/platform", headers=admin_headers
        )

        assert response.status_code == 200
        data = response.json()
        assert "users" in data
        assert "stores" in data
        assert "products" in data
        assert "orders" in data
        assert "imports" in data

    def test_get_stats_without_auth(self, client):
        """Test that stats endpoints require authentication."""
        response = client.get("/api/v1/admin/dashboard/stats")
        assert response.status_code == 401

    def test_get_stats_non_admin(self, client, auth_headers):
        """Test non-admin cannot access stats."""
        response = client.get("/api/v1/admin/dashboard/stats", headers=auth_headers)

        assert response.status_code == 403
        data = response.json()
        assert data["error_code"] == "ADMIN_REQUIRED"
