// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license.
use crate::permissions::Permissions;
use deno_websocket::op_ws_check_permission;
use deno_websocket::op_ws_close;
use deno_websocket::op_ws_create;
use deno_websocket::op_ws_next_event;
use deno_websocket::op_ws_send;
use deno_websocket::WsCaData;
use deno_websocket::WsUserAgent;

pub fn init(
  rt: &mut deno_core::JsRuntime,
  user_agent: String,
  ca_data: Option<Vec<u8>>,
) {
  {
    let op_state = rt.op_state();
    let mut state = op_state.borrow_mut();
    state.put::<WsUserAgent>(WsUserAgent(user_agent));
    if let Some(ca_data) = ca_data {
      state.put::<WsCaData>(WsCaData(ca_data));
    }
  }
  super::reg_json_sync(
    rt,
    "op_ws_check_permission",
    op_ws_check_permission::<Permissions>,
  );
  super::reg_json_async(rt, "op_ws_create", op_ws_create::<Permissions>);
  super::reg_json_async(rt, "op_ws_send", op_ws_send);
  super::reg_json_async(rt, "op_ws_close", op_ws_close);
  super::reg_json_async(rt, "op_ws_next_event", op_ws_next_event);
}