"""11I2: Billing planes stay distinct; payments.subscription stays pack-only."""
from src.domain.app_blocks.canonical import CANONICAL_BLOCK_IDS, feature_pack_only_aliases
from src.domain.app_blocks.catalogs import FEATURE_PACK_ALIASES, pack_preferred_for_new_projects
from src.domain.app_blocks.planner import ProductIntent, select_capabilities
from src.domain.connectors.invoke_capabilities import CAPABILITY_CONVERSION_PATTERN
from src.domain.feature_packs.catalog_v2 import overlay_for


def _selected(purpose: str) -> set[str]:
    intent = ProductIntent(purpose=purpose)
    return {block_id for _cap, block_id, _reason in select_capabilities(intent)}


def test_three_billing_planes_are_not_collapsed():
    assert FEATURE_PACK_ALIASES["payments.checkout"] == "payment-checkout"
    assert FEATURE_PACK_ALIASES["payments.subscription"] == "saas-membership"
    assert "payments.checkout" not in feature_pack_only_aliases()
    assert "payments.subscription" in feature_pack_only_aliases()
    assert "payments.checkout" in CANONICAL_BLOCK_IDS
    assert "payments.subscription" not in CANONICAL_BLOCK_IDS
    assert "payments.checkout" not in CAPABILITY_CONVERSION_PATTERN["deferred"]
    checkout_keys = {entity.entity_key for entity in overlay_for("payment-checkout")["entities"]}
    membership_keys = {entity.entity_key for entity in overlay_for("saas-membership")["entities"]}
    assert checkout_keys == {"product", "price", "order"}
    assert membership_keys == {"app_subscription"}
    assert overlay_for("saas-membership")["security"].rls_required is True
    assert overlay_for("saas-membership")["security"].ownership_mode == "rls"
    assert pack_preferred_for_new_projects("saas-membership")
    assert not pack_preferred_for_new_projects("client-portal")
    assert overlay_for("client-portal").get("compatibility", {}).get("legacy_aggregate") is True


def test_planner_does_not_open_checkout_or_catalog_from_billing_copy():
    for purpose in (
        "Stripe billing portal for workspace invoices",
        "Save credit cards and charge subscriptions",
        "P2HS plan upgrade checkout",
    ):
        blocks = _selected(purpose)
        assert "catalog.product" not in blocks
        assert not any(block_id.startswith("payments.") for block_id in blocks)
