-- 140_yandex_house_type_backfill.sql
-- Purpose: нормализовать УЖЕ записанные yandex listings.house_type из SCREAMING
--          вокабуляра (MONOLIT/BRICK/PANEL/...) в канон (monolith/brick/panel/...).
--
-- Rationale (#2007):
--   Yandex SERP писал building.buildingType как есть — SCREAMING_SNAKE. Estimator
--   применяет soft-penalty по house_type: аналог с house_type != target штрафуется.
--   'MONOLIT' никогда не равен каноничному 'monolith' → ~70% yandex-аналогов
--   получали ложный штраф. Код-фикс (normalize_house_type на ингесте) чинит НОВЫЕ
--   строки; этот файл подтягивает СТАРЫЕ под тот же канон.
--
-- Маппинг тождественен house_type_normalizer._RAW_TO_CANON (yandex-ветка):
--   MONOLIT->monolith, BRICK->brick, PANEL->panel, MONOLIT_BRICK->monolith_brick,
--   BLOCK->block, WOOD->wood.
--
-- Плюс 'other' (не-канон легаси-значение, 299 строк) → NULL: паритет с
--   normalize_house_type (unknown→None). В estimator soft-penalty NULL нейтрально,
--   а 'other' != target всегда даёт ложный штраф. Лоуэркейс 'brick'/'panel' уже
--   каноничны — не трогаем.
--
-- Idempotency: после первого прогона SCREAMING/'other'-значений не остаётся,
--   WHERE-фильтры пусты → повторный apply = no-op (0 rows). Scope строго
--   source='yandex' — cian/avito не трогаем (канон в коде / отдельных PR, напр. #2008).

BEGIN;

UPDATE listings
   SET house_type = CASE house_type
                        WHEN 'MONOLIT'       THEN 'monolith'
                        WHEN 'BRICK'         THEN 'brick'
                        WHEN 'PANEL'         THEN 'panel'
                        WHEN 'MONOLIT_BRICK' THEN 'monolith_brick'
                        WHEN 'BLOCK'         THEN 'block'
                        WHEN 'WOOD'          THEN 'wood'
                        ELSE house_type
                    END
 WHERE source = 'yandex'
   AND house_type IN ('MONOLIT', 'BRICK', 'PANEL', 'MONOLIT_BRICK', 'BLOCK', 'WOOD');

-- 'other' → NULL (паритет с normalize_house_type: unknown→None, нейтрально в estimator).
UPDATE listings
   SET house_type = NULL
 WHERE source = 'yandex'
   AND house_type = 'other';

COMMIT;
