#!/usr/bin/env bash

JSON_HELPER="${_CTX_ROOT}/core/json_helper.py"

function json::get()                    { python3 "$JSON_HELPER" get                    "$@" </dev/null; }
function json::set()                    { python3 "$JSON_HELPER" set                    "$@" </dev/null; }
function json::delete()                 { python3 "$JSON_HELPER" delete                 "$@" </dev/null; }
function json::append()                 { python3 "$JSON_HELPER" append                 "$@" </dev/null; }
function json::remove()                 { python3 "$JSON_HELPER" remove                 "$@" </dev/null; }
function json::cat()                    { python3 "$JSON_HELPER" cat                    "$@" </dev/null; }
function json::has_key()                { python3 "$JSON_HELPER" has_key                "$@" </dev/null; }
function json::filter_values()          { python3 "$JSON_HELPER" filter_values          "$@" </dev/null; }
function json::last_event()             { python3 "$JSON_HELPER" last_event             "$@" </dev/null; }
function json::events_for()             { python3 "$JSON_HELPER" events_for             "$@" </dev/null; }
function json::fw_events()              { WGCTL_DATETIME_FMT="$FMT_DATETIME" python3 "$JSON_HELPER" fw_events   "$@" </dev/null; }
function json::wg_events()              { WGCTL_DATETIME_FMT="$FMT_DATETIME" python3 "$JSON_HELPER" wg_events   "$@" </dev/null; }
function json::format_fw_event()        { echo "$1" | python3 "$JSON_HELPER" format_fw_event "$2"; }
function json::format_wg_event()        { echo "$1" | python3 "$JSON_HELPER" format_wg_event; }
function json::remove_events()          { python3 "$JSON_HELPER" remove_events          "$@" </dev/null; }
function json::follow_logs()            { WGCTL_DATETIME_FMT="$FMT_DATETIME" python3 "$JSON_HELPER" follow_logs "$@"; }
function json::count()                  { python3 "$JSON_HELPER" count                  "$@" </dev/null; }
function json::audit_fw_counts()        { python3 "$JSON_HELPER" audit_fw_counts        "$@" </dev/null; }
function json::peer_group_map()         { python3 "$JSON_HELPER" peer_group_map         "$@" </dev/null; }
function json::peer_groups()            { python3 "$JSON_HELPER" peer_groups            "$@" </dev/null; }
function json::peer_data()              { WGCTL_DATETIME_FMT="$FMT_DATETIME" python3 "$JSON_HELPER" peer_data   "$@" </dev/null; }
function json::iso_to_ts()              { python3 "$JSON_HELPER" iso_to_ts              "$@" </dev/null; }
function json::rule_list_data()         { python3 "$JSON_HELPER" rule_list_data         "$@" </dev/null; }
function json::group_list_data()        { python3 "$JSON_HELPER" group_list_data        "$@" </dev/null; }
function json::fmt_datetime()           { python3 "$JSON_HELPER" fmt_datetime           "$@" </dev/null; }
function json::create_rule()            { python3 "$JSON_HELPER" create_rule            "$@" </dev/null; }
function json::cleanup_config()         { python3 "$JSON_HELPER" cleanup_config         "$@" </dev/null; }
function json::remove_peer_block()      { python3 "$JSON_HELPER" remove_peer_block      "$@" </dev/null; }
function json::create_group()           { python3 "$JSON_HELPER" create_group           "$@" </dev/null; }
function json::parse_event()            { python3 "$JSON_HELPER" parse_event            "$@" </dev/null; }
function json::parse_fw_event()         { python3 "$JSON_HELPER" parse_fw_event         "$@" </dev/null; }
function json::remove_events_filtered() { python3 "$JSON_HELPER" remove_events_filtered "$@" </dev/null; }
function json::rule_resolve()           { python3 "$JSON_HELPER" rule_resolve           "$@" </dev/null; }
function json::rule_resolve_field()     { python3 "$JSON_HELPER" rule_resolve_field     "$@" </dev/null; }
function json::rule_inspect()           { python3 "$JSON_HELPER" rule_inspect           "$@" </dev/null; }
function json::find_rule_file()         { python3 "$JSON_HELPER" find_rule_file         "$@" </dev/null; }
function json::get_raw()                { python3 "$JSON_HELPER" get_raw                "$@" </dev/null; }
function json::count_resolved()         { python3 "$JSON_HELPER" count_resolved "$(ctx::rules)" "$@" </dev/null; }
function json::block_get()              { python3 "$JSON_HELPER" block_get              "$@" </dev/null; }
function json::block_is_blocked()       { python3 "$JSON_HELPER" block_is_blocked       "$@" </dev/null; }
function json::block_set_direct()       { python3 "$JSON_HELPER" block_set_direct       "$@" </dev/null; }
function json::block_add_group()        { python3 "$JSON_HELPER" block_add_group        "$@" </dev/null; }
function json::block_remove_group()     { python3 "$JSON_HELPER" block_remove_group     "$@" </dev/null; }
function json::block_add_rule()         { python3 "$JSON_HELPER" block_add_rule         "$@" </dev/null; }
function json::block_remove_rule()      { python3 "$JSON_HELPER" block_remove_rule      "$@" </dev/null; }
function json::block_get_rules()        { python3 "$JSON_HELPER" block_get_rules        "$@" </dev/null; }
function json::block_get_groups()       { python3 "$JSON_HELPER" block_get_groups       "$@" </dev/null; }
function json::block_get_direct()       { python3 "$JSON_HELPER" block_get_direct       "$@" </dev/null; }
function json::net_list()               { python3 "$JSON_HELPER" net_list               "$@" </dev/null; }
function json::net_show()               { python3 "$JSON_HELPER" net_show               "$@" </dev/null; }
function json::net_exists()             { python3 "$JSON_HELPER" net_exists             "$@" </dev/null; }
function json::net_add_service()        { python3 "$JSON_HELPER" net_add_service        "$@" </dev/null; }
function json::net_add_port()           { python3 "$JSON_HELPER" net_add_port           "$@" </dev/null; }
function json::net_remove()             { python3 "$JSON_HELPER" net_remove             "$@" </dev/null; }
function json::net_resolve()            { python3 "$JSON_HELPER" net_resolve            "$@" </dev/null; }
function json::net_reverse_lookup()     { python3 "$JSON_HELPER" net_reverse_lookup     "$@" </dev/null; }
function json::block_is_empty()         { python3 "$JSON_HELPER" block_is_empty         "$@" </dev/null; }
function json::group_has_peer()         { python3 "$JSON_HELPER" group_has_peer         "$@" </dev/null; }

function json::peer_transfer() {
  ACTIVITY_TOTAL_LOW="$(config::activity_total_low)" \
  ACTIVITY_TOTAL_MED="$(config::activity_total_med)" \
  ACTIVITY_TOTAL_HIGH="$(config::activity_total_high)" \
  python3 "$JSON_HELPER" peer_transfer "$@" </dev/null
}
function json::peer_transfer_delta() {
  ACTIVITY_CURRENT_LOW="$(config::activity_current_low)" \
  ACTIVITY_CURRENT_MED="$(config::activity_current_med)" \
  ACTIVITY_CURRENT_HIGH="$(config::activity_current_high)" \
  python3 "$JSON_HELPER" peer_transfer_delta "$@" </dev/null
}

