-- @param {DateTime} $1:startDate
-- @param {DateTime} $2:endDate
-- @param {String} $3:regionCode - pass 'ALL' to return all regions
WITH demand_agg AS (
  SELECT
    ep.region_id,
    date_trunc('day', ep.timestamp) AS day,
    AVG(ep.demand_mw) AS avg_demand,
    MAX(ep.demand_mw) AS peak_demand
  FROM electricity_prices ep
  WHERE ep.timestamp BETWEEN $1 AND $2
  GROUP BY ep.region_id, date_trunc('day', ep.timestamp)
),
dc_agg AS (
  SELECT
    d.region_id,
    COUNT(*)::INT AS datacenter_count,
    COALESCE(SUM(d.capacity_mw), 0) AS total_dc_capacity_mw
  FROM datacenters d
  GROUP BY d.region_id
)
SELECT
  r.code AS region_code,
  r.name AS region_name,
  da.day,
  da.avg_demand,
  da.peak_demand,
  COALESCE(dc.datacenter_count, 0)::INT AS datacenter_count,
  COALESCE(dc.total_dc_capacity_mw, 0) AS total_dc_capacity_mw
FROM grid_regions r
INNER JOIN demand_agg da ON da.region_id = r.id
LEFT JOIN dc_agg dc ON dc.region_id = r.id
WHERE ($3 = 'ALL' OR r.code = $3)
ORDER BY r.code, da.day
