"""Unit tests for Magento SKU push diagnostics (RTA / state-key risks)."""

from __future__ import annotations

from unittest.mock import MagicMock

from db.magento_sku_push_diagnostics import diagnose_magento_sku_push


def test_diagnose_rta_flags_mirror_and_missing_catalog(monkeypatch):
    session = MagicMock()

    monkeypatch.setattr(
        "db.magento_sku_push_diagnostics.master_sku_for_channel_sku",
        lambda *_a, **_k: "RTA-GSW-OC3384",
    )
    monkeypatch.setattr(
        "db.magento_sku_push_diagnostics.channel_sku_for_master",
        lambda *_a, **_k: "RTA-GSW-OC3384",
    )
    monkeypatch.setattr(
        "db.magento_sku_push_diagnostics._state_row",
        lambda *_a, **_k: None,
    )
    monkeypatch.setattr(
        "db.magento_sku_push_diagnostics._catalog_row",
        lambda *_a, **_k: None,
    )
    monkeypatch.setattr(
        "db.magento_sku_push_diagnostics._master_summary",
        lambda _session, sku: {
            "sku": sku,
            "name": "Oven Cabinet - RTA" if sku.startswith("RTA-") else "Oven Cabinet",
            "assembly_type": "RTA" if sku.startswith("RTA-") else "Assembled",
            "status": "active",
            "is_active": True,
            "image_count": 2 if sku.startswith("RTA-") else 0,
        },
    )
    monkeypatch.setattr(
        "db.magento_sku_push_diagnostics._assignment",
        lambda *_a, **_k: {
            "sku": "RTA-GSW-OC3384",
            "channel_code": "magento",
            "assignment_status": "active",
            "reason": None,
        },
    )

    result = diagnose_magento_sku_push(session, 1, "RTA-GSW-OC3384")

    assert result["is_rta_mirror"] is True
    assert result["assembled_sku"] == "GSW-OC3384"
    assert result["planner_sku"] == "RTA-GSW-OC3384"
    assert "is_rta_mirror_sku" in result["risks"]
    assert "missing_sync_state_for_channel_sku" in result["risks"]
    assert "missing_catalog_state_product_id" in result["risks"]
    assert "media_will_force_product_upsert" in result["risks"]
    assert any("pull" in r.lower() for r in result["recommendations"])


def test_diagnose_state_keyed_by_master_not_channel(monkeypatch):
    session = MagicMock()

    monkeypatch.setattr(
        "db.magento_sku_push_diagnostics.master_sku_for_channel_sku",
        lambda *_a, **_k: "HPW-B15",
    )
    monkeypatch.setattr(
        "db.magento_sku_push_diagnostics.channel_sku_for_master",
        lambda *_a, **_k: "HD-CW-B15",
    )

    def _state(_session, connection_id, sku):
        if sku == "HPW-B15":
            return {"sku": "HPW-B15", "data_hash": "old"}
        return None

    monkeypatch.setattr("db.magento_sku_push_diagnostics._state_row", _state)
    monkeypatch.setattr(
        "db.magento_sku_push_diagnostics._catalog_row",
        lambda *_a, **_k: {"sku": "HD-CW-B15", "magento_product_id": 1, "price": 1.0, "media_hash": None, "last_pulled_at": None},
    )
    monkeypatch.setattr(
        "db.magento_sku_push_diagnostics._master_summary",
        lambda *_a, **_k: {"sku": "HPW-B15", "name": "B15", "assembly_type": "Assembled", "status": "active", "is_active": True, "image_count": 0},
    )
    monkeypatch.setattr(
        "db.magento_sku_push_diagnostics._assignment",
        lambda *_a, **_k: {"sku": "HPW-B15", "channel_code": "magento", "assignment_status": "active", "reason": None},
    )

    result = diagnose_magento_sku_push(session, 1, "HD-CW-B15")
    assert "sync_state_keyed_by_master_sku_not_channel_sku" in result["risks"]
    assert any("align" in r.lower() for r in result["recommendations"])
