from db.models import MasterCollectionRegistry, MasterProduct, MasterProductCollectionMembership, MasterProductImage
from db.shared_sku_image_cleanup import (
    cleanup_shared_sku_collection_images,
    enqueue_shared_sku_image_cleanup_outbound,
)


def test_cleanup_shared_sku_collection_images_removes_only_collection_assets(catalog_intent_session):
    session = catalog_intent_session
    session.add(
        MasterCollectionRegistry(
            code="MAYA",
            name="Maya Snow White",
            path_slug="kitchen-cabinets/maya-snow-white",
            is_active=True,
        )
    )
    session.add(
        MasterProduct(
            sku="PB-PW-BF3",
            name="Pearl White Base Filler",
            category_l1="Kitchen Cabinets",
            collection="Harriet Pearl White",
            membership_mode="shared",
            row_hash="img-cleanup-1",
            is_active=True,
        )
    )
    session.add(
        MasterProductCollectionMembership(
            master_sku="PB-PW-BF3",
            path_slug="kitchen-cabinets/maya-snow-white",
            collection_name="Maya Snow White",
            is_active=True,
        )
    )
    session.flush()
    product = session.query(MasterProduct).filter(MasterProduct.sku == "PB-PW-BF3").one()
    session.add_all(
        [
            MasterProductImage(
                product_id=product.id,
                sku=product.sku,
                file_name="PB-PW-BF3-CLOSE.png",
                image_url="https://cdn.example.com/pb-close.png",
                image_role="default",
                sort_order=1,
            ),
            MasterProductImage(
                product_id=product.id,
                sku=product.sku,
                file_name="PB-PW-BF3-MAYA-vignette.png",
                image_url="https://cdn.example.com/pb-vignette.png",
                image_role="vignette",
                sort_order=2,
            ),
            MasterProductImage(
                product_id=product.id,
                sku=product.sku,
                file_name="PB-PW-BF3-MAYA-hero.png",
                image_url="https://cdn.example.com/pb-hero.png",
                image_role="collection_hero",
                sort_order=3,
            ),
        ]
    )
    session.flush()

    result = cleanup_shared_sku_collection_images(
        session,
        collection_codes=["MAYA"],
        dry_run=False,
    )

    remaining = session.query(MasterProductImage).filter(MasterProductImage.sku == "PB-PW-BF3").all()
    assert result["scope"]["target_skus"] == ["PB-PW-BF3"]
    assert result["removable_row_count"] == 2
    assert result["deleted_row_count"] == 2
    assert len(remaining) == 1
    assert remaining[0].image_role == "default"


def test_cleanup_shared_sku_collection_images_dry_run_leaves_rows_intact(catalog_intent_session):
    session = catalog_intent_session
    session.add(
        MasterCollectionRegistry(
            code="ASW",
            name="Anna Snow White",
            path_slug="kitchen-cabinets/anna-snow-white",
            is_active=True,
        )
    )
    session.add(
        MasterProduct(
            sku="PB-CH-TK8",
            name="Touch Up Kit",
            category_l1="Kitchen Cabinets",
            collection="Anna Snow White",
            membership_mode="shared",
            row_hash="img-cleanup-2",
            is_active=True,
        )
    )
    session.add(
        MasterProductCollectionMembership(
            master_sku="PB-CH-TK8",
            path_slug="kitchen-cabinets/anna-snow-white",
            collection_name="Anna Snow White",
            is_active=True,
        )
    )
    session.flush()
    product = session.query(MasterProduct).filter(MasterProduct.sku == "PB-CH-TK8").one()
    session.add(
        MasterProductImage(
            product_id=product.id,
            sku=product.sku,
            file_name="PB-CH-TK8-ASW-vignette.png",
            image_url="https://cdn.example.com/tk8-vignette.png",
            image_role="vignette",
            sort_order=1,
        )
    )
    session.flush()

    result = cleanup_shared_sku_collection_images(
        session,
        collection_path_slugs=["kitchen-cabinets/anna-snow-white"],
        dry_run=True,
    )

    remaining = session.query(MasterProductImage).filter(MasterProductImage.sku == "PB-CH-TK8").all()
    assert result["removable_row_count"] == 1
    assert result["deleted_row_count"] == 0
    assert len(remaining) == 1


def test_enqueue_shared_sku_image_cleanup_outbound_supports_multiple_shopify_connections(
    catalog_intent_session,
):
    session = catalog_intent_session

    result = enqueue_shared_sku_image_cleanup_outbound(
        session,
        skus=["PB-PW-BF3", "PB-CH-TK8"],
        magento_connections=[
            {"id": 1, "native_id": 1, "channel_type": "magento", "channel_code": "magento-main"},
        ],
        shopify_connections=[
            {"id": 1000001, "native_id": 1, "channel_type": "shopify", "channel_code": "shopify-us", "store_code": "us"},
            {"id": 1000002, "native_id": 2, "channel_type": "shopify", "channel_code": "shopify-ca", "store_code": "ca"},
        ],
        dry_run=False,
    )

    assert result["queued"] == 4
    assert result["would_queue"] == 0
    assert [job["job_type"] for job in result["jobs"]] == [
        "media_cleanup",
        "push_images",
        "push_images",
        "push_images",
    ]
    assert [job["channel"] for job in result["jobs"]] == [
        "magento",
        "magento",
        "shopify",
        "shopify",
    ]
