-- 122_enable_domclick_city_sweep.sql
-- Seed row для DomClick периодического citywide SERP-sweep.
--
-- !!! DORMANT BY DESIGN !!! enabled = false.
--   DomClickScraper.fetch_city бьёт DomClick SERP с prod-IP через camoufox headless
--   BrowserFetcher (DataDome пропускает headless Playwright; curl_cffi → 401).
--   Capability полностью wired (run_domclick_city_sweep + trigger_domclick_city_sweep_run
--   + dispatch в scheduler.py), но schedule засеян ВЫКЛЮЧЕННЫМ — live-поведение
--   намеренно НЕ verified до ручного prod-smoke. ВКЛЮЧАТЬ ВРУЧНУЮ оператором:
--     UPDATE scrape_schedules SET enabled = true WHERE source = 'domclick_city_sweep';
--   Зеркалит cian_city_sweep (107) и yandex_city_sweep (078, тоже enabled=false, dormant).
--
-- DomClick SERP — CITYWIDE (city_id), не geo-radius: anchor-loop отсутствует.
--   fetch_city перебирает rooms × pages внутри scraper'а и дедуплицирует по source_id.
--   SERP координаты не отдаёт (lat=lon=None) → house-match только по address-fingerprint.
--   SERP-only: нет detail/houses-фаз (в отличие от cian sweep), поэтому default_params
--   несут только city_id / rooms / pages_per_anchor / request_delay_sec.
--
-- ЗАВИСИМОСТИ: 052_scrape_schedules.sql (таблица + UNIQUE(source)).
-- Idempotent: ON CONFLICT (source) DO NOTHING — безопасно запускать повторно.
--
-- domclick_city_sweep — окно 03:00-06:00 UTC (06:00-09:00 МСК), после avito/cian/yandex
--   sweeps (02:00-05:00 UTC) чтобы не конкурировать за egress в одно окно.
--   default_params (консервативно, под DataDome):
--     city_id            — числовой ID города DomClick (4 = Екатеринбург).
--     rooms              — список комнатностей (0=студия, 1, 2, 3, 4).
--     pages_per_anchor   — максимум страниц SERP на один room-проход (break on empty).
--     request_delay_sec  — пауза между страницами SERP (anti-DataDome).

BEGIN;

-- next_run_at = следующее наступление night-window (tomorrow + window_start_hour).
-- При enabled=false get_due_schedules() всё равно не подхватит строку, но заполняем
-- по образцу 107: когда оператор включит schedule, next_run_at уже валиден и
-- запуск не выстрелит мгновенно (вне окна). 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
(
    'domclick_city_sweep',
    false,                                       -- DORMANT — enable manually after prod-smoke
    3,
    6,
    ((CURRENT_DATE + INTERVAL '1 day') + make_interval(hours => 3)) AT TIME ZONE 'UTC',
    '{"city_id": 4, "rooms": [0, 1, 2, 3, 4], "pages_per_anchor": 5, "request_delay_sec": 6}'::jsonb
)
ON CONFLICT (source) DO NOTHING;

COMMIT;
