from app.jobs.audit_master_image_roles import audit_master_image_roles
from db.models import CollectionCommerceProfile, MasterProduct, MasterProductImage


def test_audit_master_image_roles_flags_sample_and_rta_collection_issues(catalog_intent_session):
    session = catalog_intent_session
    sample = MasterProduct(sku="ACH-SD", name="Anna Sample", collection="Anna Caramel Harvest", row_hash="1", is_active=True)
    base = MasterProduct(sku="ACH-B12", name="Anna Base", collection="Anna Caramel Harvest", row_hash="2", is_active=True)
    rta = MasterProduct(sku="RTA-ACH-B12", name="Anna Base RTA", collection="Anna Caramel Harvest", row_hash="3", is_active=True)
    session.add_all([sample, base, rta])
    session.flush()
    session.add_all(
        [
            MasterProductImage(
                product_id=base.id,
                sku=base.sku,
                file_name="ACH-B12-CLOSE.png",
                image_url="https://cdn.example/ACH-B12-CLOSE.png",
                image_role="closed",
                sort_order=0,
            ),
            MasterProductImage(
                product_id=rta.id,
                sku=rta.sku,
                file_name="AnnaCaramelHarvest_Vignette1a.jpg",
                image_url="https://cdn.example/AnnaCaramelHarvest_Vignette1a.jpg",
                image_role="vignette",
                sort_order=1,
            ),
        ]
    )
    session.add(
        CollectionCommerceProfile(
            collection_name="Anna Caramel Harvest",
            sample_master_sku="ACH-SD",
            is_active=True,
        )
    )
    session.commit()

    report = audit_master_image_roles(session=session)

    assert report["sample_missing_images_count"] == 1
    assert report["rta_collection_asset_count"] == 1
    assert report["sample_missing_images"][0]["sample_master_sku"] == "ACH-SD"


def test_audit_master_image_roles_uses_sku_canonical_collection_over_dirty_label(catalog_intent_session):
    session = catalog_intent_session
    product = MasterProduct(
        sku="ANRO-B12",
        name="Anna Natural Rift White Oak Base",
        collection="Natural Rift White Oak",
        row_hash="10",
        is_active=True,
    )
    session.add(product)
    session.flush()
    session.add(
        MasterProductImage(
            product_id=product.id,
            sku=product.sku,
            file_name="AnnaNaturalRiftWhiteOak_Vignette1a.jpg",
            image_url="https://cdn.example/AnnaNaturalRiftWhiteOak_Vignette1a.jpg",
            image_role="vignette",
            sort_order=0,
        )
    )
    session.commit()

    report = audit_master_image_roles(session=session)

    assert report["collection_mismatch_count"] == 0
