-- Transforms AKIndices v1 schema to v2 schema
SELECT t.community_id,
  d.datatype,
  d.model,
  d.modelname,
  d.scenario,
  d.resolution,
  t.year::text,
  json_build_array(
    t.january::decimal(3,1),
    t.february::decimal(3,1),
    t.march::decimal(3,1),
    t.april::decimal(3,1),
    t.may::decimal(3,1),
    t.june::decimal(3,1),
    t.july::decimal(3,1),
    t.august::decimal(3,1),
    t.september::decimal(3,1),
    t.october::decimal(3,1),
    t.november::decimal(3,1),
    t.december::decimal(3,1))::jsonb AS temps
INTO TEMP temp01
FROM temperatures t
INNER JOIN datasets d ON d.id=t.dataset_id;

--------------------------------------------------------------------------------

SELECT community_id,
  datatype,
  model,
  modelname,
  scenario,
  resolution,
  json_object_agg(year, temps)::jsonb AS data
INTO TEMP temp02
FROM temp01
GROUP BY community_id, datatype, model, modelname, scenario, resolution;

--------------------------------------------------------------------------------

CREATE TEMP SEQUENCE a;
SELECT nextval('a') AS id,
  community_id,
  json_build_object(
    'datatype', datatype,
    'model', model,
    'modelname', modelname,
    'scenario', scenario,
    'resolution', resolution)::jsonb as dataset,
  data
INTO TEMP temp03
FROM temp02;

--------------------------------------------------------------------------------

WITH all_json_key_value AS (
  SELECT id, community_id, t1.key, t1.value
  FROM temp03, jsonb_each(dataset) AS t1
  UNION
  SELECT id, community_id, t1.key, t1.value
  FROM temp03, jsonb_each(data) AS t1
)
SELECT community_id, json_object_agg(key, value) AS data
INTO TEMP temp04
GROUP BY id, community_id;

--------------------------------------------------------------------------------

SELECT community_id, json_agg(data)::jsonb AS data
INTO TEMP temp05
FROM temp04
GROUP BY community_id;

--------------------------------------------------------------------------------

SELECT c.name, c.latitude, c.longitude, c.northing, c.easting, t.data
INTO new_communities
FROM temp05 t
INNER JOIN communities c ON c.id=t.community_id;