from src.domain.app_blocks.composition_resolve import resolve_composition
from src.domain.app_blocks.schemas import ProductIntent
from src.domain.app_blocks.vertical_recipes import RecipeRequires, VerticalRecipe
from src.domain.composition_recipes.authority import (
    canonical_recipe,
    composition_recipe_from_vertical,
)
from src.domain.composition_recipes.schemas import CompositionRecipe


def test_vertical_recipe_is_adapted_to_one_canonical_shape() -> None:
    legacy = VerticalRecipe(
        id="lead_capture",
        name="Lead capture",
        archetype="internal_operations",
        proof_profile="forms",
        intent_phrases=["capture leads"],
        requires=RecipeRequires(app_blocks=["forms.contact"]),
    )

    canonical = composition_recipe_from_vertical(legacy)

    assert canonical.slug == legacy.id
    assert canonical.required_app_blocks == legacy.required_app_blocks
    assert canonical.starter_id
    assert canonical_recipe(legacy_recipe=legacy) == canonical


def test_canonical_recipe_wins_over_legacy_recipe() -> None:
    canonical = CompositionRecipe(
        slug="lead_capture",
        name="Canonical lead capture",
        starter_id="internal_operations",
        required_app_blocks=["forms.contact"],
        version=3,
    )
    legacy = VerticalRecipe(
        id="lead_capture",
        name="Legacy lead capture",
        archetype="internal_operations",
        proof_profile="forms",
        intent_phrases=["capture leads"],
        requires=RecipeRequires(app_blocks=["forms.quote_request"]),
    )

    resolved = resolve_composition(legacy, ProductIntent(), canonical)

    assert resolved.matched_recipe_id == "lead_capture"
    assert resolved.composition_recipe_version == 3
    assert resolved.required_app_blocks == ["forms.contact"]
