-- 142_pat_subzones.sql
-- #1065 / #1067 (Site Finder v2 / GG-форсайт) — подзоны приаэродромных территорий (ПАТ).
-- Первый аэродром: Кольцово (Приказ Росавиации № 367-П от 02.06.2023, ред. 804-П от 27.10.2025).
--
-- Геометрия строится Celery-воркером pat_subzones_load из извлечённых координат МСК-66
-- (файл data/pat/koltsovo_367p_subzones.json) с репроекцией → WGS84 (EPSG:4326).
--
-- Поддерживает несколько аэродромов (поле aerodrome), subzone_no=0 — общий контур.
--
-- Deploy: auto-applied deploy.yml через _schema_migrations (ровно один раз по NN=142).
-- Idempotent (CREATE TABLE/INDEX IF NOT EXISTS + guarded DO-блоки).
-- Данные загружаются отдельно Celery-воркером (tasks.pat_subzones_load.load_koltsovo_pat).

BEGIN;

-- ── 1. Таблица pat_subzones ───────────────────────────────────────────────────
CREATE TABLE IF NOT EXISTS pat_subzones (
    id          BIGSERIAL PRIMARY KEY,
    aerodrome   TEXT        NOT NULL,               -- 'Екатеринбург (Кольцово)' и т.д.
    subzone_no  INTEGER     NOT NULL,               -- 1..6; 0 = aggregate_outline
    name        TEXT,                               -- 'Первая подзона' и т.д.
    restriction TEXT,                               -- текст ограничения из приказа
    geom        geometry(MultiPolygon, 4326) NOT NULL,
    source      TEXT,                               -- URL/реквизит НПА
    fetched_at  TIMESTAMPTZ NOT NULL DEFAULT now()
);

COMMENT ON TABLE pat_subzones IS
    'Подзоны приаэродромных территорий (ПАТ), EPSG:4326 (#1065/#1067). '
    'Источник: Приказы Росавиации. Первый аэродром: Кольцово (367-П/804-П). '
    'Геометрия загружается воркером tasks.pat_subzones_load.load_koltsovo_pat.';

COMMENT ON COLUMN pat_subzones.aerodrome IS
    'Наименование аэродрома из НПА, напр. «Екатеринбург (Кольцово)».';
COMMENT ON COLUMN pat_subzones.subzone_no IS
    'Номер подзоны 1..6 по НБНРД. 0 — aggregate_outline (общий контур ПАТ).';
COMMENT ON COLUMN pat_subzones.geom IS
    'MultiPolygon WGS84. Внутренние границы секторов стали дырками Polygon.';

-- ── 2. UNIQUE (aerodrome, subzone_no) — ключ для UPSERT ──────────────────────
DO $$
BEGIN
    IF NOT EXISTS (
        SELECT 1 FROM pg_constraint WHERE conname = 'uq_pat_subzones_aerodrome_no'
    ) THEN
        ALTER TABLE pat_subzones
            ADD CONSTRAINT uq_pat_subzones_aerodrome_no UNIQUE (aerodrome, subzone_no);
    END IF;
END
$$;

-- ── 3. GIST-индекс по геометрии (ST_Intersects / parcel-lookup) ──────────────
CREATE INDEX IF NOT EXISTS idx_pat_subzones_geom
    ON pat_subzones USING GIST (geom);

-- ── 4. Индекс по аэродрому (фильтрация per-aerodrome) ────────────────────────
CREATE INDEX IF NOT EXISTS idx_pat_subzones_aerodrome
    ON pat_subzones (aerodrome);

COMMIT;
