-- 126_scrape_schedules_seed_cian_full_load.sql
-- Seed row для cian_full_load — exhaustive региональный сбор Cian ЕКБ ВТОРИЧКИ
-- (run_cian_full_load, scrape_pipeline.py). Авторитетный источник вторички:
-- room×price адаптивное партиционирование (БЕЗ anchor'ов), secondary_only,
-- incremental on_bucket save. Prod-verified (run #46: 29511 уникальных за ~25 мин).
--
-- ЗАВИСИМОСТИ: 052_scrape_schedules.sql (таблица + UNIQUE(source)).
-- Idempotent: ON CONFLICT (source) DO UPDATE обновляет window/default_params при
-- переустановке миграции, НО НЕ затирает enabled — оператор может выключить schedule
-- вручную, и повторный прогон миграции это сохранит (COALESCE на existing enabled).
--
-- Окно 20:00-22:00 UTC (23:00-01:00 МСК) — намеренно отделено от cian_city_sweep
-- (2-5) и cian_history_backfill (2-5), чтобы не конкурировать на shared kf-прокси.
--
-- default_params соответствуют сигнатуре run_cian_full_load():
--   price_cap_per_bucket — максимум офферов на price-бакет (< Cian SERP-cap ~1500).
--   concurrency          — параллельных page-фетчей в leaf-бакете.
--   request_delay_sec    — задержка между SERP-запросами.
--   enrich_detail        — detail-обогащение (по умолчанию off — тяжело).
--   detail_top_n         — сколько листингов обогащать detail (актуально при enrich_detail).
-- (newbuilding_only сюда НЕ кладём — это параметр cian_city_sweep, не full_load.)

BEGIN;

-- next_run_at = следующее наступление night-window (tomorrow + window_start_hour),
-- иначе при NULL get_due_schedules() выстрелит сразу после деплоя (вне окна).
-- window_*_hour документированы в UTC (см. 052) → AT TIME ZONE 'UTC' фиксирует
-- wall-clock час в UTC независимо от session TimeZone GUC.
INSERT INTO scrape_schedules (
    source,
    enabled,
    window_start_hour,
    window_end_hour,
    next_run_at,
    default_params
)
VALUES
(
    'cian_full_load',
    true,
    20,
    22,
    ((CURRENT_DATE + INTERVAL '1 day') + make_interval(hours => 20)) AT TIME ZONE 'UTC',
    '{"price_cap_per_bucket": 1400, "concurrency": 5, "request_delay_sec": 4.0, "enrich_detail": false, "detail_top_n": 0}'::jsonb
)
ON CONFLICT (source) DO UPDATE SET
    window_start_hour = EXCLUDED.window_start_hour,
    window_end_hour   = EXCLUDED.window_end_hour,
    default_params    = EXCLUDED.default_params,
    updated_at        = NOW();
-- enabled НЕ в SET — сохраняем операторское значение (ON CONFLICT не трогает enabled).

COMMIT;
