-- 127_scrape_schedules_seed_avito_full_load.sql
-- Seed row для avito_full_load — exhaustive региональный сбор Avito ЕКБ ВТОРИЧКИ
-- (run_avito_full_load, scrape_pipeline.py). Авторитетный источник вторички:
-- room×price адаптивное партиционирование через pmin/pmax (БЕЗ anchor'ов),
-- secondary_only, incremental on_bucket save. Обходит Avito SERP-cap ~5000/запрос,
-- из-за которого anchor/citywide-обход добирал лишь ~4% активной вторички.
--
-- ЗАВИСИМОСТИ: 052_scrape_schedules.sql (таблица + UNIQUE(source)).
-- Idempotent: ON CONFLICT (source) DO UPDATE обновляет window/default_params при
-- переустановке миграции, НО НЕ затирает enabled — оператор может выключить schedule
-- вручную, и повторный прогон миграции это сохранит (ON CONFLICT не трогает enabled).
--
-- Окно 13:00-15:00 UTC (16:00-18:00 МСК) — намеренно отделено от прочих avito-задач
-- на shared apw-прокси: avito_newbuilding (02-05), deactivate_stale_avito +
-- avito_city_sweep (06-07), avito_detail_backfill (09-12). Так full_load не
-- конкурирует за мобильный IP с другими avito-прогонами.
--
-- default_params соответствуют сигнатуре run_avito_full_load():
--   price_cap_per_bucket — максимум результатов на price-бакет (< Avito SERP-cap ~5000).
--   concurrency          — параллельных page-фетчей в leaf-бакете.
--   request_delay_sec    — задержка между SERP-запросами (Avito агрессивен → 7.0s).
--   secondary_only       — отбрасывать новостройки (listing_segment="novostroyki") до save.

BEGIN;

-- next_run_at = следующее наступление day-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
(
    'avito_full_load',
    true,
    13,
    15,
    ((CURRENT_DATE + INTERVAL '1 day') + make_interval(hours => 13)) AT TIME ZONE 'UTC',
    '{"price_cap_per_bucket": 1400, "concurrency": 5, "request_delay_sec": 7.0, "secondary_only": true}'::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;
