"""Tests for statistics blueprint (client/blueprints/statistics.py).

Covers dashboard rendering, role enforcement, and SPC/summary API proxies.
"""
import pytest


class TestDashboard:
    """GET /statistics/dashboard tests."""

    def test_dashboard_renders(self, logged_in_client, mock_api_client):
        """Dashboard renders for Metrologist role."""
        mock_api_client.get.return_value = {
            "items": [
                {"id": 1, "code": "REC-001", "name": "Recipe A"},
            ],
            "total": 1,
            "pages": 1,
        }

        resp = logged_in_client.get("/statistics/dashboard")
        assert resp.status_code == 200

    def test_dashboard_requires_login(self, client):
        """Unauthenticated user is redirected to login."""
        resp = client.get("/statistics/dashboard", follow_redirects=False)
        assert resp.status_code == 302
        assert "/auth/login" in resp.headers["Location"]


class TestRoleRequired:
    """Metrologist role enforcement tests."""

    def test_requires_metrologist_role(self, flask_app):
        """User without Metrologist role gets 403 on statistics endpoints."""
        with flask_app.test_client() as c:
            with c.session_transaction() as sess:
                sess["api_key"] = "test-key"
                sess["user"] = {
                    "id": 3,
                    "username": "maker_only",
                    "display_name": "Maker Only",
                    "roles": ["Maker"],
                    "is_admin": False,
                    "language_pref": "en",
                    "theme_pref": "light",
                    "active": True,
                }
                sess["user_id"] = 3
                sess["language"] = "en"
                sess["theme"] = "light"

            resp = c.get("/statistics/dashboard")
            assert resp.status_code == 403


class TestSPCProxy:
    """SPC data proxy endpoint tests."""

    def test_summary_proxy(self, logged_in_client, mock_api_client):
        """Summary API proxy returns JSON from backend."""
        mock_api_client.get.return_value = {
            "total": 100,
            "pass_count": 90,
            "fail_count": 5,
            "warning_count": 5,
        }

        resp = logged_in_client.get(
            "/statistics/api/summary?recipe_id=1"
        )
        assert resp.status_code == 200
        data = resp.get_json()
        assert data["total"] == 100

    def test_capability_proxy(self, logged_in_client, mock_api_client):
        """Capability API proxy returns JSON from backend."""
        mock_api_client.get.return_value = {
            "cp": 1.33,
            "cpk": 1.20,
        }

        resp = logged_in_client.get(
            "/statistics/api/capability?recipe_id=1&subtask_id=1"
        )
        assert resp.status_code == 200
        data = resp.get_json()
        assert "cp" in data
