from plytix.product_normalize import (
    filter_plytix_display_fields,
    is_noise_field,
    merge_raw_products,
    normalize_plytix_api_product,
    normalize_plytix_flat_record,
)


def test_is_noise_field_detects_user_audit_columns():
    assert is_noise_field("created_user_audit.user_email")
    assert is_noise_field("modified_user_audit.avatar_color")
    assert not is_noise_field("thumbnail")
    assert not is_noise_field("categories")


def test_normalize_plytix_api_product_keeps_attributes_and_drops_audit():
    raw = {
        "sku": "ACH-B12",
        "id": "68e48b783a9e4244d774f38b",
        "_parent_id": "68e4953e3279f02c8970c34d",
        "num_variations": 0,
        "created_user_audit": {
            "user_email": "profitconnectsuccess@gmail.com",
            "avatar_color": "#cc66b4",
        },
        "modified_user_audit": {
            "user_email": "mohsin@audivox.ai",
        },
        "attributes": {
            "label": "812 - Anna Caramel Harvest - Port & Bell",
            "categories": "Others / Clearance / B12",
            "thumbnail": "https://files.plytix.com/example.png",
            "status": "Draft",
        },
    }
    out = normalize_plytix_api_product(raw)
    assert out["sku"] == "ACH-B12"
    assert out["label"] == "812 - Anna Caramel Harvest - Port & Bell"
    assert out["categories"] == "Others / Clearance / B12"
    assert out["thumbnail_url"] == "https://files.plytix.com/example.png"
    assert "created_user_audit.user_email" not in out
    assert out["_audit"]["created_user_audit"]["user_email"] == "profitconnectsuccess@gmail.com"


def test_normalize_plytix_flat_record_cleans_legacy_json_normalize_rows():
    legacy = {
        "sku": "ACH-B12",
        "id": "68e48b783a9e4244d774f38b",
        "_parent_id": "68e4953e3279f02c8970c34d",
        "num_variations": 0,
        "created_user_audit.user_email": "profitconnectsuccess@gmail.com",
        "created_user_audit.avatar_color": "#cc66b4",
        "attributes.label": "812 - Anna Caramel Harvest - Port & Bell",
        "attributes.thumbnail": "https://files.plytix.com/example.png",
    }
    out = normalize_plytix_flat_record(legacy)
    assert out["sku"] == "ACH-B12"
    assert out["label"] == "812 - Anna Caramel Harvest - Port & Bell"
    assert out["thumbnail_url"] == "https://files.plytix.com/example.png"
    assert "created_user_audit.user_email" not in out


def test_merge_raw_products_merges_attribute_batches():
    first = {"id": "1", "sku": "A", "attributes": {"label": "One", "thumbnail": "t1"}}
    second = {"id": "1", "sku": "A", "attributes": {"categories": "Cat / Sub", "status": "Draft"}}
    merged = merge_raw_products(first, second)
    normalized = normalize_plytix_api_product(merged)
    assert normalized["label"] == "One"
    assert normalized["categories"] == "Cat / Sub"
    assert normalized["status"] == "Draft"
    assert normalized["thumbnail_url"] == "t1"


def test_filter_plytix_display_fields_removes_audit_noise():
    fields = filter_plytix_display_fields(
        {
            "sku": "A",
            "thumbnail_url": "https://example.com/a.png",
            "created_user_audit.user_email": "x@y.com",
            "_audit": {"created_user_audit": {"user_email": "x@y.com"}},
        }
    )
    assert fields == {"sku": "A", "thumbnail_url": "https://example.com/a.png"}
