import json
import shutil
from pathlib import Path

from db.brochure_vocabulary_taxonomy_transform import (
    transform_brochure_vocabulary_to_kitchen_taxonomy,
)


def test_transform_brochure_vocabulary_to_kitchen_taxonomy_builds_collection_assignments():
    scratch = Path("E:/workroom/2026/PlytixMage/.tmp_test_vocab_transform")
    if scratch.exists():
        shutil.rmtree(scratch)
    try:
        brochure_dir = scratch / "brochures"
        brochure_dir.mkdir(parents=True)
        vocabulary_path = scratch / "brochure_sku_vocabulary.json"

        vocabulary_path.write_text(
            json.dumps(
                {
                    "types": [
                        {
                            "type_key": "base-cabinets.angle-end",
                            "canonical_taxonomy_path_slug": "kitchen-cabinets/base-cabinets/angle-end-base-cabinet",
                            "brochure_l1_label": "Base Cabinets",
                            "brochure_l2_label": "Angle End",
                            "shopping_l1": "base-cabinets",
                            "shopping_l2": "base-cabinets/angle-end",
                            "type_label": "Angle End",
                            "variants": [{"sku": "BEC1224L"}, {"sku": "BEC1224R"}],
                        },
                        {
                            "type_key": "base-cabinets.basic-base",
                            "canonical_taxonomy_path_slug": "kitchen-cabinets/base-cabinets/basic-base",
                            "brochure_l1_label": "Base Cabinets",
                            "brochure_l2_label": "Basic Base",
                            "shopping_l1": "base-cabinets",
                            "shopping_l2": "base-cabinets/basic-base",
                            "type_label": "1 Door, 1 Drawer",
                            "variants": [{"sku": "B12"}],
                        },
                    ]
                }
            ),
            encoding="utf-8",
        )

        (brochure_dir / "AnnaCaramelHarvest_0226.json").write_text(
            json.dumps(
                {
                    "source_document": {"collection_code": "ACH", "file_name": "AnnaCaramelHarvest_0226.pdf"},
                    "collection": {
                        "canonical_code": "anna-caramel-harvest",
                        "display_name": "Anna Caramel Harvest",
                        "category_l1": "Kitchen Cabinets",
                    },
                    "sku_catalog": {
                        "special_bases": {"angle_end": ["BEC1224L", "BEC1224R"]},
                        "basic_bases": {"one_door": ["B12"]},
                    },
                }
            ),
            encoding="utf-8",
        )

        payload = transform_brochure_vocabulary_to_kitchen_taxonomy(
            vocabulary_path=vocabulary_path,
            brochure_folder=brochure_dir,
        )

        collection = payload["collections"]["anna-caramel-harvest"]
        assert collection["display_name"] == "Anna Caramel Harvest"
        assignments = collection["assignments"]
        assert any(
            item["sku"] == "BEC1224L"
            and item["canonical_taxonomy_path_slug"] == "kitchen-cabinets/base-cabinets/angle-end-base-cabinet"
            and item["shopping_l2"] == "base-cabinets/angle-end"
            for item in assignments
        )
        assert any(
            item["sku"] == "B12"
            and item["canonical_taxonomy_path_slug"] == "kitchen-cabinets/base-cabinets/basic-base"
            for item in assignments
        )
        assert payload["master_taxonomy_reference"]["confirmed_hierarchy"]["Base Cabinets"] == [
            "Angle End Base Cabinet",
            "Basic Base",
        ]
    finally:
        if scratch.exists():
            shutil.rmtree(scratch)
