///|
// Return the remote debugging target configured for examples.
fn example_target() -> String {
  match @env.get_env_var("MBT_CDP_TARGET") {
    Some(value) if value != "" => value
    _ => "9222"
  }
}

///|
// Return the selected example name.
fn example_name() -> String {
  match @env.get_env_var("MBT_CDP_EXAMPLE") {
    Some(value) if value != "" => value
    _ => "discover_version"
  }
}

///|
// Build a small Runtime.evaluate request for the current page.
fn evaluate_params() -> @typed.RuntimeEvaluateParams {
  {
    expression: "1 + 1",
    object_group: None,
    include_command_line_api: None,
    silent: None,
    context_id: None,
    return_by_value: Some(true),
    generate_preview: None,
    user_gesture: None,
    await_promise: None,
    throw_on_side_effect: None,
    timeout: None,
    disable_breaks: None,
    repl_mode: None,
    allow_unsafe_eval_blocked_by_csp: None,
    unique_context_id: None,
    serialization_options: None,
  }
}

///|
// Print browser metadata from `/json/version`.
async fn run_discover_version() -> Unit {
  let target = @client.parse_cdp_target(example_target())
  let version = @client.discover_version(target)
  println("browser: \{version.browser}")
  println("protocol: \{version.protocol_version}")
  println("websocket: \{version.web_socket_debugger_url}")
}

///|
// Evaluate a JavaScript expression on the first page target.
async fn run_runtime_evaluate() -> Unit {
  let target = @client.parse_cdp_target(example_target())
  let client = @client.connect_cdp_page_target(target)
  defer client.close()
  let command = @typed.runtime_evaluate_command(id=1, evaluate_params())
  let response = client.send_cdp_message(command)
  let result = @typed.RuntimeEvaluateResult::from_json(
    @client.cdp_response_result_json(response),
  )
  println("Runtime.evaluate result type: \{result.result.type_}")
}

///|
async fn main {
  match example_name() {
    "discover_version" => run_discover_version()
    "runtime_evaluate" => run_runtime_evaluate()
    other =>
      fail(
        "unknown example \{other}; set MBT_CDP_EXAMPLE=discover_version or runtime_evaluate",
      )
  }
}