from db.channel_sku_prefix_mapping import (
    DEFAULT_SHOPIFY_PREFIX_RULES,
    apply_prefix_rules,
    _dedupe_longest_first,
)


def test_apply_prefix_rules_master_to_channel():
    rules = _dedupe_longest_first([(row["master_prefix"], row["channel_prefix"]) for row in DEFAULT_SHOPIFY_PREFIX_RULES])
    assert apply_prefix_rules("HPW-12345", rules, from_master=True) == "HD-CW-12345"
    assert apply_prefix_rules("ASW999", rules, from_master=True) == "HD-SNW999"
    assert apply_prefix_rules("UNKNOWN1", rules, from_master=True) == "UNKNOWN1"


def test_apply_prefix_rules_rta_mirror_keeps_assembly_prefix():
    rules = _dedupe_longest_first([(row["master_prefix"], row["channel_prefix"]) for row in DEFAULT_SHOPIFY_PREFIX_RULES])
    assert apply_prefix_rules("HPW123", rules, from_master=True) == "HD-CW123"
    assert apply_prefix_rules("RTA-HPW123", rules, from_master=True) == "RTA-HD-CW123"
    assert apply_prefix_rules("RTA-HPW-B15", rules, from_master=True) == "RTA-HD-CW-B15"


def test_apply_prefix_rules_channel_to_master_reverse():
    rules = _dedupe_longest_first([(row["master_prefix"], row["channel_prefix"]) for row in DEFAULT_SHOPIFY_PREFIX_RULES])
    assert apply_prefix_rules("HD-CW-12345", rules, from_master=False) == "HPW-12345"
    assert apply_prefix_rules("STH-CBO-1", rules, from_master=False) == "MBRO-1"
    assert apply_prefix_rules("RTA-HD-CW123", rules, from_master=False) == "RTA-HPW123"


def test_apply_prefix_rules_reverse_helper():
    from db.channel_sku_prefix_mapping import apply_prefix_rules_reverse

    rules = _dedupe_longest_first([(row["master_prefix"], row["channel_prefix"]) for row in DEFAULT_SHOPIFY_PREFIX_RULES])
    assert apply_prefix_rules_reverse("RTA-HD-CW-B15", rules) == "RTA-HPW-B15"


def test_longest_prefix_wins():
    rules = _dedupe_longest_first([("HP", "X-"), ("HPW", "HD-CW")])
    assert apply_prefix_rules("HPW123", rules, from_master=True) == "HD-CW123"
    assert apply_prefix_rules("HP999", rules, from_master=True) == "X-999"
