-- 0. Eemalda olemasolev
DROP TABLE IF EXISTS :schema.links CASCADE;
DROP TABLE IF EXISTS :schema._noded_geom CASCADE;
DROP TABLE IF EXISTS :schema._raw_segments CASCADE;

-- 1. Lõika geomeetriad ristumiskohtades
CREATE UNLOGGED TABLE :schema._noded_geom AS
SELECT
  ST_Node(ST_Collect(geom)) AS geom  -- ühendame kõik teed ja lõikame ristumised
FROM :schema.ardok_highways;

-- 2. Võta igast lõigatud joonest üks segment
CREATE UNLOGGED TABLE :schema._raw_segments AS
SELECT 
  row_number() OVER () + 100000000 AS id, geom from ( SELECT
  (ST_Dump(geom)).geom AS geom
FROM :schema._noded_geom) rs;

-- 3. Lisa metaandmed lõigule, mille sees või mille osana link asub
CREATE UNLOGGED TABLE :schema.links AS
SELECT
  s.id,
  h.eid,
  h.hwtype AS highway,
  h.surface,
  h.oneway,
  h.maxspeed,
  COALESCE(NULLIF(h.name, ''), NULLIF(h.hwtype, ''), 'Unnamed road') AS name,
  s.geom
FROM :schema._raw_segments s
JOIN LATERAL (
  SELECT *
  FROM :schema.ardok_highways h
  WHERE ST_Intersects(h.geom, s.geom)  -- NB! sisuline kattuvus
  ORDER BY ST_Length(ST_Intersection(h.geom, s.geom)) DESC
  LIMIT 1
) h ON TRUE;


-- 4. Indeks ja PK
CREATE INDEX links_geom_idx ON :schema.links USING GIST (geom);
ALTER TABLE :schema.links ADD PRIMARY KEY (id);
