from db.channel_sku_prefix_mapping import apply_prefix_rules, _dedupe_longest_first
from db.channel_sku_rename import evaluate_rename_candidate


def test_evaluate_rename_skips_when_already_correct():
    result = evaluate_rename_candidate(
        master_sku="HPW-100",
        current_sku="HD-CW-100",
        target_sku="HD-CW-100",
    )
    assert result["action"] == "skip"
    assert result["reason"] == "already_correct"


def test_evaluate_rename_plans_master_to_prefix_when_target_absent_on_remote():
    result = evaluate_rename_candidate(
        master_sku="HPW-100",
        current_sku="HPW-100",
        target_sku="HD-CW-100",
        remote_skus={"HPW-100", "OTHER"},
        has_mapping=True,
    )
    assert result["action"] == "rename"
    assert result["current_sku"] == "HPW-100"
    assert result["target_sku"] == "HD-CW-100"


def test_evaluate_rename_prefers_exact_remote_match_over_rename():
    result = evaluate_rename_candidate(
        master_sku="HPW-100",
        current_sku="HPW-100",
        target_sku="HD-CW-100",
        remote_skus={"HPW-100", "HD-CW-100"},
        has_mapping=True,
    )
    assert result["action"] == "remap_existing"
    assert result["reason"] == "target_sku_exists"


def test_evaluate_rename_requires_link_when_remote_catalog_provided():
    result = evaluate_rename_candidate(
        master_sku="HPW-100",
        current_sku="HPW-100",
        target_sku="HD-CW-100",
        remote_skus={"OTHER-SKU"},
        has_mapping=False,
    )
    assert result["action"] == "skip"
    assert result["reason"] == "current_sku_not_on_remote"
