///|
fn main {
  let event = @spongekit.rain_event("25mm campus retrofit storm", 25.0)
  let catchments = [
    @spongekit.catchment_from_surface("library roof", 120.0, @spongekit.Roof),
    @spongekit.catchment_from_surface(
      "south walkway",
      80.0,
      @spongekit.Pavement,
    ),
    @spongekit.catchment_from_surface("quad lawn", 160.0, @spongekit.Lawn),
  ]
  let spec = @spongekit.default_garden_spec()
  match @spongekit.size_rain_garden(catchments, event, spec) {
    Ok(plan) => {
      println("status=" + plan.status.label())
      println("recommended_area_m2=" + plan.recommended_area_m2.to_string())
      println(plan.to_json())
      match @spongekit.recommend_facility_mix(catchments, event, 36.0) {
        Ok(train) => {
          println("train_capture_ratio=" + train.capture_ratio.to_string())
          match
            @spongekit.estimate_treatment_train_cost(
              train,
              @spongekit.default_cost_profile(),
            ) {
            Ok(cost) =>
              println(
                "train_capital_cost=" + cost.total_capital_cost.to_string(),
              )
            Err(error) => println("cost_error=" + error.label())
          }
        }
        Err(error) => println("train_error=" + error.label())
      }
      match
        @spongekit.compare_retrofit_scenarios(
          catchments,
          event,
          spec,
          @spongekit.default_stress_scenarios(36.0),
        ) {
        Ok(comparison) => {
          println("best_scenario=" + comparison.best_name)
          println(
            "average_scenario_score=" + comparison.average_score.to_string(),
          )
        }
        Err(error) => println("scenario_error=" + error.label())
      }
    }
    Err(error) => println("error=" + error.label())
  }
}