
input($assets) as assets
-> select({
      id, 
      r_cost,
      the_geom, 
      sample(coverage: bookmark('hazard-patchy'), geometry: the_geom) as sampled
  }) as sampled
-> unnest(sampled) as unnest
-> group(
      by: id,
      select: {
         id: id,
         count: count(sampled),
         stddev: stddev(sampled.sampled),
         max: max(sampled.sampled),
         min: min(sampled.sampled)
     }
   ) as stats
   
unnest 
-> select({
       id,
       (measure(sampled.geometry) / measure(the_geom)) as area_ratio,
       sampled.sampled / 100 as damage_ratio,
       r_cost, 
   }) as losses_raw
-> group(
       by: id,
       select: {
           id as id,
           sum(area_ratio) as area_affected_pc,
           sum(damage_ratio * area_ratio) as damage_ratio,
           max(int(r_cost)) as replacement_cost,
           sum(area_ratio * damage_ratio * r_cost) as total_loss
       }
   ) as losses

join(
    on: intersects(the_geom, region.the_geom),
    join_type: 'inner'
) as assets_joined

assets -> assets_joined.lhs
input($regions, name: 'region') as regions -> assets_joined.rhs

assets_joined 
-> select({
        id as asset_id,
        region.id as region_id,
        the_geom as asset_geom,
        r_cost,
        intersection(the_geom, region.the_geom) as cut_geom
   }) as assets_cut
-> select({
       asset_id,
       region_id,
       asset_geom,
       cut_geom,
       r_cost * (measure(cut_geom) / measure(asset_geom)) as r_cost_scaled,
       sample(coverage: bookmark('hazard-patchy'), geometry: cut_geom) as sampled
   }) as sampled_by_region
-> unnest(sampled) as unnest_by_region 
-> select({
    asset_id,
    region_id,
    (measure(sampled.geometry) / measure(cut_geom)) as area_ratio,
    sampled.sampled / 100 as damage_ratio,
    r_cost_scaled
   }) as losses_raw_by_region  
-> group(
      by: {region_id, asset_id},
      select: {
        region_id as region_id,
        asset_id as asset_id,
        sum(damage_ratio * area_ratio * r_cost_scaled) as regional_loss
      }
   ) as losses_by_asset_region
-> group(
      by: region_id,
      select: {
        region_id as region_id,
        count(asset_id) as assets_affected,
        sum(regional_loss) as regional_loss
      }
  ) as losses_by_region
