from flask import Flask


def test_compare_prices_auto_fetches_momo_when_not_provided(monkeypatch):
    from routes import price_comparison_routes as routes

    captured = {}

    def fake_search_momo(keyword, limit=10):
        captured["momo_search"] = (keyword, limit)
        return True, "ok", [
            {
                "name": "理膚寶水 B5 修復霜",
                "price": 890,
                "product_id": "12345678",
                "product_url": "https://www.momoshop.com.tw/goods/GoodsDetail.jsp?i_code=12345678",
            }
        ]

    def fake_compare(brand, pchome_products, momo_products):
        captured["compare"] = (brand, pchome_products, momo_products)
        return {
            "pchome_count": len(pchome_products),
            "momo_count": len(momo_products),
            "matched_count": 0,
            "matches": [],
            "stats": {},
        }

    monkeypatch.setattr(routes, "search_momo_products", fake_search_momo)
    monkeypatch.setattr(routes, "compare_brand_prices", fake_compare)

    app = Flask(__name__)
    with app.test_request_context(
        "/api/price_comparison/compare",
        method="POST",
        json={
            "brand": "理膚寶水",
            "pchome_products": [
                {"name": "理膚寶水 B5 修復霜", "price": 900, "product_id": "PCHOME-1"},
            ],
        },
    ):
        response = routes.compare_prices.__wrapped__()

    payload = response.get_json()
    assert payload["success"] is True
    assert payload["data"]["momo_count"] == 1
    assert captured["momo_search"] == ("理膚寶水", 100)
    assert captured["compare"][0] == "理膚寶水"
    assert captured["compare"][2][0]["product_id"] == "12345678"
