-- Migration 073: нормализовать listings.repair_state → enum needs_repair/standard/good/excellent
--
-- До этой миграции repair_state хранил сырые значения парсеров:
--   avito_detail: cosmetic / euro / designer / required
--   cian SERP (decoration): without / no / cosmetic / euro / design / fine / rough
--
-- После: только needs_repair / standard / good / excellent.
-- Строки с нераспознанными значениями сбрасываются в NULL (безопаснее, чем хранить мусор).
--
-- Idempotent: CASE охватывает уже нормализованные значения (pass-through).
-- Issue: #621

BEGIN;

UPDATE listings
SET repair_state = CASE repair_state
    -- ── уже нормализованные (pass-through) ───────────────────────────────────
    WHEN 'needs_repair' THEN 'needs_repair'
    WHEN 'standard'     THEN 'standard'
    WHEN 'good'         THEN 'good'
    WHEN 'excellent'    THEN 'excellent'

    -- ── needs_repair ─────────────────────────────────────────────────────────
    WHEN 'required'     THEN 'needs_repair'   -- avito: «требуется» / «без ремонта»
    WHEN 'without'      THEN 'needs_repair'   -- cian: без ремонта
    WHEN 'no'           THEN 'needs_repair'   -- cian: нет ремонта
    WHEN 'rough'        THEN 'needs_repair'   -- cian: черновая

    -- ── standard ─────────────────────────────────────────────────────────────
    WHEN 'cosmetic'     THEN 'standard'       -- avito/cian: косметический

    -- ── good ─────────────────────────────────────────────────────────────────
    WHEN 'euro'         THEN 'good'           -- avito/cian: евро
    WHEN 'fine'         THEN 'good'           -- cian: хорошая отделка

    -- ── excellent ────────────────────────────────────────────────────────────
    WHEN 'designer'     THEN 'excellent'      -- avito: дизайнерский
    WHEN 'design'       THEN 'excellent'      -- cian: дизайнерский

    -- ── нераспознанные → NULL ────────────────────────────────────────────────
    ELSE NULL
END
WHERE repair_state IS NOT NULL;

COMMIT;
