-- 84_osm_noise_sources_ekb.sql
-- Context: Таблица шумовых источников Екатеринбурга из OSM.
--          Используется site-finder analyze для noise scoring по
--          упрощённой CNOSSOS-EU модели: L_base - 20*log10(dist/10).
-- Source types: highway, railway, industrial, aerodrome
-- Geometry: mixed (LineString / Polygon / Point) -> geometry(Geometry, 4326)
-- Dependencies: PostGIS (уже установлен)
-- Deploy order: standalone, нет зависимостей от других таблиц
-- Idempotent: да (IF NOT EXISTS / IF NOT EXISTS на индексах)

BEGIN;

CREATE TABLE IF NOT EXISTS osm_noise_sources_ekb (
    id          BIGSERIAL PRIMARY KEY,
    osm_type    TEXT NOT NULL,   -- 'node' | 'way' | 'relation'
    osm_id      BIGINT NOT NULL,
    source_type TEXT NOT NULL,   -- 'highway' | 'railway' | 'industrial' | 'aerodrome'
    road_class  TEXT,            -- 'motorway' | 'trunk' | 'primary' | 'secondary' | 'tertiary' | 'residential' | NULL для не-highway
    name        TEXT,
    geom        GEOMETRY(Geometry, 4326) NOT NULL,
    tags        JSONB DEFAULT '{}'::jsonb,
    fetched_at  TIMESTAMPTZ NOT NULL DEFAULT now(),
    UNIQUE (osm_type, osm_id)
);

CREATE INDEX IF NOT EXISTS osm_noise_sources_ekb_geom_idx
    ON osm_noise_sources_ekb USING GIST (geom);

CREATE INDEX IF NOT EXISTS osm_noise_sources_ekb_source_idx
    ON osm_noise_sources_ekb (source_type);

COMMENT ON TABLE osm_noise_sources_ekb IS
    'Шумовые источники Екатеринбурга из OSM (highway/railway/industrial/aerodrome). '
    'Используется site-finder analyze для noise scoring по CNOSSOS-EU-упрощённой модели '
    '(L_base - 20*log10(dist/10)).';

COMMIT;
