"""
Static asset tests — Story 2.3 (AC: 5, 6, 7).

Tests verify:
 - Vendor files are served by Flask (primer.css, chart.min.js)
 - tokens.css defines all three domain color tokens
 - app.css implements the [data-loading] loading state pattern
 - No CDN references in app/ HTML/CSS/JS files (NFR-6)
"""
from pathlib import Path
import pytest

APP_DIR = Path(__file__).parent.parent.parent / 'app'


class TestVendorAssets:
    def test_primer_css_serves_200(self, client):
        """Primer CSS local copy is present and served by Flask."""
        response = client.get('/static/vendor/primer/primer.css')
        assert response.status_code == 200

    def test_chartjs_serves_200(self, client):
        """Chart.js local copy is present and served by Flask."""
        response = client.get('/static/vendor/chartjs/chart.min.js')
        assert response.status_code == 200


class TestTokensCSS:
    def test_safe_color_token_defined(self):
        content = (APP_DIR / 'static' / 'css' / 'tokens.css').read_text()
        assert '--color-safe' in content

    def test_warning_color_token_defined(self):
        content = (APP_DIR / 'static' / 'css' / 'tokens.css').read_text()
        assert '--color-warning' in content

    def test_danger_color_token_defined(self):
        content = (APP_DIR / 'static' / 'css' / 'tokens.css').read_text()
        assert '--color-danger' in content


class TestAppCSS:
    def test_data_loading_content_rule(self):
        """[data-loading="true"] .fin-content must fade to 0.4 opacity."""
        content = (APP_DIR / 'static' / 'css' / 'app.css').read_text()
        assert '[data-loading="true"] .fin-content' in content
        assert 'opacity: 0.4' in content
        assert 'pointer-events: none' in content

    def test_data_loading_spinner_rule(self):
        """[data-loading="true"] .fin-spinner must become visible."""
        content = (APP_DIR / 'static' / 'css' / 'app.css').read_text()
        assert '[data-loading="true"] .fin-spinner' in content
        assert 'display: block' in content


def test_no_cdn_references_in_app_directory():
    """NFR-6: zero CDN references in app/ HTML/CSS/JS files."""
    cdn_patterns = ['cdn.', 'unpkg.', 'jsdelivr.', 'cdnjs.']
    violations = []
    for path in APP_DIR.rglob('*'):
        if path.suffix in ('.html', '.css', '.js'):
            content = path.read_text(errors='ignore')
            for pattern in cdn_patterns:
                if pattern in content:
                    violations.append(
                        f"{path.relative_to(APP_DIR)}: contains '{pattern}'"
                    )
    assert violations == [], 'CDN references found:\n' + '\n'.join(violations)
