-- extensions
CREATE EXTENSION IF NOT EXISTS "plv8" SCHEMA pg_catalog;
CREATE EXTENSION IF NOT EXISTS "pg_cron" SCHEMA pg_catalog;
CREATE EXTENSION IF NOT EXISTS "pg_net" SCHEMA extensions;
CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;
CREATE EXTENSION IF NOT EXISTS postgis;

CREATE TABLE IF NOT EXISTS raw_bus_positions (
  id BIGINT GENERATED ALWAYS AS IDENTITY,
  measured_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
  response_status INT NULL,
  bus_id text,
  trip_id text,
  route_number text,
  headsign text,
  tag text,
  direction int,
  coords geometry(Point, 4326)
);

-- TimescaleDB Hypertable creation
SELECT create_hypertable('raw_bus_positions', 'measured_at', chunk_time_interval => INTERVAL '10 minutes');
CREATE INDEX bus_position_measures ON raw_bus_positions (bus_id, measured_at DESC);

SELECT
  cron.schedule(
    'drop-old-chunks',
    '*/10 * * * *',
    $$
    SELECT drop_chunks('raw_bus_positions', INTERVAL '24 hours');
    $$
);
