-- 072_scrape_schedules_seed_cian_rosreestr.sql
-- Seed rows для двух новых автоматизированных задач (#560 + #563).
-- Добавляет foreign table gendesign_rosreestr_deals для импорта через FDW.
--
-- ЗАВИСИМОСТИ: 052_scrape_schedules.sql, 060_postgres_fdw_extension.sql.
-- Idempotent: безопасно запускать повторно.
--
-- cian_history_backfill — 02:00-05:00 UTC (05:00-08:00 МСК)
--   Аналог ручного POST /api/v1/admin/scrape/cian-backfill-history.
--   default_params соответствуют API-параметрам backfill_cian_history():
--     batch_size  — кол-во listing/house-строк за один run.
--   Если Cian-сессия истекла — run помечается failed + отправляется capture_message.
--
-- rosreestr_dkp_import — 04:00-06:00 UTC (07:00-09:00 МСК)
--   Аналог ручного ./deploy/import-rosreestr.sh через FDW + pure-Python psycopg v3.
--   SINCE по умолчанию '2024-01-01' — резонное начало истории ДКП.
--   Idempotent: ON CONFLICT (dedup_hash) DO NOTHING.
--
-- gendesign_rosreestr_deals — foreign table через gendesign_remote FDW server.
--   Колонки: только те, что используются импортёром (минимальный набор).
--   Партиционированная таблица на gendesign-стороне; FDW пушит WHERE вниз автоматически.

BEGIN;

-- ── Foreign table для rosreestr_deals ─────────────────────────────────────────
-- server gendesign_remote создан в 060_postgres_fdw_extension.sql.
-- USER MAPPING управляется backend startup (core/fdw.py, role tradein_fdw_reader).
-- tradein_fdw_reader должен иметь SELECT на rosreestr_deals в gendesign-БД.
-- Колонки подобраны под SELECT в import_rosreestr_dkp() в scheduler.py.

DROP FOREIGN TABLE IF EXISTS gendesign_rosreestr_deals;

CREATE FOREIGN TABLE gendesign_rosreestr_deals (
    id                    bigint,
    region_code           int,
    city                  text,
    street                text,
    realestate_type_code  text,
    doc_type              text,
    area                  numeric,
    floor                 text,
    year_build            int,
    deal_price            numeric,
    price_per_sqm         numeric,
    period_start_date     date
)
SERVER gendesign_remote
OPTIONS (schema_name 'public', table_name 'rosreestr_deals');

COMMENT ON FOREIGN TABLE gendesign_rosreestr_deals IS
    'Live read из gendesign.rosreestr_deals для rosreestr_dkp_import (FDW, #563). '
    'USER MAPPING управляется backend startup (core/fdw.py).';

-- ── Seed rows для scrape_schedules ────────────────────────────────────────────

-- next_run_at = следующее наступление night-window (tomorrow + window_start_hour),
-- иначе при NULL get_due_schedules() выстрелит сразу после деплоя (вне окна,
-- cian — на момент деплоя / до того как ляжет FDW-грант миграции 122).
-- 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_history_backfill',
    true,
    2,
    5,
    ((CURRENT_DATE + INTERVAL '1 day') + make_interval(hours => 2)) AT TIME ZONE 'UTC',
    '{"batch_size": 100}'::jsonb
),
(
    'rosreestr_dkp_import',
    true,
    4,
    6,
    ((CURRENT_DATE + INTERVAL '1 day') + make_interval(hours => 4)) AT TIME ZONE 'UTC',
    '{"since": "2024-01-01", "batch_size": 2000}'::jsonb
)
ON CONFLICT (source) DO NOTHING;

COMMENT ON TABLE scrape_schedules IS
    'In-app scheduler config (заменяет cron-script setup). '
    'Sources: avito_city_sweep, cian_history_backfill, rosreestr_dkp_import.';

COMMIT;
