#!/bin/bash

# Copyright (C) 2013-2025 Marcin Krol <hawk@tld-linux.org>
# All Rights Reserved

press_any_key () {
  echo "Press any key to continue."
  read -s -n 1 1>/dev/null 2>/dev/null
}

cmd_status () {
  if [ "${1}" -eq "${2}" ]; then
    echo "[1;32mOK[0m"
    return 0
  else
    echo "[1;31mFailed[0m"
    return 1
  fi
}

confirm_net_restart () {
   dialog \
      --backtitle "${dialog_backtitle}" \
      --title "${dialog_title}" \
      --colors \
      --yesno "\nSave network configuration and restart networking?\n\n\Z1Warning!\Zn Existing configuration of interface(s) $@ will be modified!" \
      10 65 \
    2>/tmp/$(basename "${0}.dialog" 2>/dev/null)
  return $?
}

netif_is_bond_slave () {
  test -d "/sys/class/net/${1}/master/bonding"
  return $?
}

netif_is_bridge_member () {
  test -d "/sys/class/net/${1}/master/bridge"
  return $?
}

netif_exists () {
  ip -br link show dev ${1} 1>/dev/null 2>/dev/null
  return $?
}

netif_is_up () {
  [ $(ip -br -j -p link show dev eth0 2>/dev/null | jq -r '.[0].operstate // ""' 2>/dev/null) = "UP" ]
  return $?
}

netif_get_mac () {
  ip -br -j -p link show dev ${1} 2>/dev/null | jq -r '.[0].address // ""' 2>/dev/null
}

netif_get_peer () {
  ip -br -j -p addr show dev ${1} 2>/dev/null | jq -r '.[0].addr_info[0].address // ""' 2>/dev/null
}

netif_get_ips () {
  int="${1}"
  shift
  ip -br -j -p $@ addr show dev ${int} 2>/dev/null | jq -r '.[0].addr_info[] | select(.local and .prefixlen) | select((.local | startswith("169.254") | not) and (.local | startswith("fe80::") | not)) | "\(.local)/\(.prefixlen)"' 2>/dev/null
}

netif_num_ips () {
  netif_get_ips $@ | wc -l 2>/dev/null
}

netif_has_ips () {
  if [ "$(netif_num_ips $@)" -gt 0 ]; then
    return 0
  fi
  return 1
}

netif_get_default_gw () {
  if [ "${1}" = "dev" ]; then
    ip -br -j -p route list default 2>/dev/null | jq -r '.[0].dev // ""' 2>/dev/null
  else
    ip -br -j -p route list default 2>/dev/null | jq -r '.[0].gateway // ""' 2>/dev/null
    echo "${gw_ip}"
  fi
}
