import pytest


class TestStorefrontPublicRoute:
    def test_storefront_returns_200_no_auth(self, unauthed_client):
        resp = unauthed_client.get("/storefront")
        assert resp.status_code == 200

    def test_storefront_contains_package_cards(self, unauthed_client):
        resp = unauthed_client.get("/storefront")
        html = resp.text
        assert "storefront" in html.lower() or "marketplace" in html.lower() or "browse" in html.lower()

    def test_storefront_has_no_login_redirect(self, unauthed_client):
        resp = unauthed_client.get("/storefront", follow_redirects=False)
        assert resp.status_code == 200

    def test_storefront_shows_quality_badges(self, unauthed_client):
        resp = unauthed_client.get("/storefront")
        html = resp.text
        assert "quality" in html.lower() or "score" in html.lower() or "badge" in html.lower() or "tier" in html.lower()


class TestStorefrontAPI:
    def test_storefront_api_returns_packages(self, unauthed_client):
        resp = unauthed_client.get("/api/storefront/packages")
        assert resp.status_code == 200
        data = resp.json()
        assert "packages" in data
        assert isinstance(data["packages"], list)

    def test_storefront_api_includes_quality_score(self, unauthed_client):
        resp = unauthed_client.get("/api/storefront/packages")
        data = resp.json()
        if data["packages"]:
            pkg = data["packages"][0]
            assert "quality_score" in pkg
            assert "quality_tier" in pkg

    def test_storefront_api_includes_pricing(self, unauthed_client):
        resp = unauthed_client.get("/api/storefront/packages")
        data = resp.json()
        if data["packages"]:
            pkg = data["packages"][0]
            assert "price" in pkg or "listing_price" in pkg

    def test_storefront_single_package(self, unauthed_client):
        resp = unauthed_client.get("/api/storefront/packages")
        data = resp.json()
        if data["packages"]:
            domain = data["packages"][0]["domain"]
            detail = unauthed_client.get(f"/api/storefront/package/{domain}")
            assert detail.status_code == 200
            detail_data = detail.json()
            assert "domain" in detail_data
