Use when the user likes a home and asks what something similar costs, or
looks like, elsewhere ("homes like #2 in Lisbon"). Returns the listing and
up to 2 matches in `city`, each with asking price, price per m², stated
features, environment readings (quiet, clean air, leafy, coastal, flood /
wildfire / seismic / ground-motion screening), walk and drive minutes, and
the region's climate.
Matches have the same bedrooms and a living area within 15%, and are
picked on features and environment — never on price — so the price
difference is a finding, not how they were chosen. Relay it as asking
prices, never as a saving, a valuation or a "city premium". A feature
marked "not_stated" means the listing doesn't say, not that the home lacks
it; an environment value "unknown" means there is no reading. When
`matches` is empty, say no documented match was found; do not loosen it.
With `compare_with` (a second listing id) instead of `city`, no search
runs: the two listings come back side by side on the same rows — e.g.
the top home of each city in a comparison, feature by feature.
Args:
listing_id: Source-prefixed id of a listing already shown (e.g.
`remax:12345`). Do not invent one.
city: The other city to search in, e.g. "Lisboa".
compare_with: A second listing id already shown, to compare the two.
lang: ISO 639-1 code (en/pt/es/fr/de/nl/ru).
Returns:
JSON: seed and matches[] with price, eur_per_m2, features, environment
{axis: {state, value, unit}}, minutes, climate, and a `card` with the
listing link; or a not-found / same-city message.