from db.master_taxonomy_sync import magento_taxonomy_channel_guidance
from db.models import MasterTaxonomyChannelLink, MasterTaxonomyNode


def _seed_bathroom_tree(session):
    bath = MasterTaxonomyNode(
        parent_id=None,
        node_kind="hub",
        code="bathroom-vanities",
        name="Bathroom Vanities",
        path_slug="bathroom-vanities",
        is_active=True,
    )
    session.add(bath)
    session.flush()
    coll = MasterTaxonomyNode(
        parent_id=bath.id,
        node_kind="collection",
        code="hallmark-frost",
        name="Bathroom Vanities / Hallmark Frost",
        path_slug="bathroom-vanities/hallmark-frost",
        is_active=True,
    )
    session.add(coll)
    session.flush()
    return bath, coll


def test_magento_guidance_wrong_branch_requires_parent_link(catalog_intent_session):
    session = catalog_intent_session
    bath, coll = _seed_bathroom_tree(session)
    from db.models import MagentoCategoryRegistry, MagentoConnection
    from datetime import datetime, timezone

    session.add(
        MagentoConnection(
            id=1,
            store_base_url="https://magento.test",
            environment="test",
            consumer_key="ck",
            consumer_secret="cs",
            access_token="at",
            access_token_secret="ts",
        )
    )
    session.flush()
    now = datetime.now(timezone.utc)
    for cat_id, path in ((279, "Default Category/Hallmark Frost"), (318, "Default Category/Kitchen Cabinets/Hallmark Frost")):
        session.add(
            MagentoCategoryRegistry(
                connection_id=1,
                category_id=cat_id,
                parent_id=2,
                name="Hallmark Frost",
                path=f"1/2/{cat_id}",
                path_names=path,
                level=3,
                is_active=True,
                fetched_at=now,
            )
        )
    session.flush()

    guidance = magento_taxonomy_channel_guidance(session, coll, 1)
    assert guidance["recommended_action"] == "link_parent_hub"
    assert guidance["has_canonical_candidate"] is False
    assert len(guidance["wrong_branch_candidates"]) == 2
    assert guidance["parent_hub_node_id"] == bath.id

    session.add(
        MasterTaxonomyChannelLink(
            taxonomy_node_id=bath.id,
            channel_code="magento",
            connection_id=1,
            taxonomy_kind="category",
            remote_id="149",
            remote_path="Bathroom Vanities",
            is_active=True,
        )
    )
    session.flush()

    guidance2 = magento_taxonomy_channel_guidance(session, coll, 1)
    assert guidance2["recommended_action"] == "create_under_parent"
    assert guidance2["parent_hub_magento_linked"] is True
