#!/bin/sh

set -e

function top_line() {
  echo -e "${white}"
  echo -e " ┌────────────────────────────────────────────────────────────────┐"
}

function hr() {
  echo -e " │                                                                │"
}

function inner_line() {
  echo -e " ├────────────────────────────────────────────────────────────────┤"
}

function bottom_line() {
  echo -e " └────────────────────────────────────────────────────────────────┘"
  echo -e "${white}"
}

function blank_line() {
  echo -e " "
}

function title() {
  local text=$1
  local color=$2
  local max_length=64
  local text_length=${#text}
  local padding_left=$(((max_length - text_length) / 2))
  local padding_right=$((max_length - text_length - padding_left))
  printf " │%*s${color}%s${white}%*s│\n" $padding_left '' "$text" $padding_right ''
}

function subtitle() {
  local menu_text1=$1
  local max_length=63
  local padding=$((max_length - ${#menu_text1}))
  printf " │ ${blue}${menu_text1}%-${padding}s${white}│\n" ''
}

function main_menu_option() {
  local menu_number=$1
  local menu_text1=$2
  local menu_text2=$3
  local max_length=58
  local total_text_length=$(( ${#menu_text1} + ${#menu_text2} ))
  local padding=$((max_length - total_text_length))
  printf " │  ${yellow}${menu_number}${white}) ${green}${menu_text1} ${white}${menu_text2}%-${padding}s${white}│\n" ''
}

function menu_option() {
  local menu_number=$1
  local menu_text1=$2
  local menu_text2=$3
  local max_length=62
  local total_text_length=$(( ${#menu_text1} + ${#menu_text2} + ${#menu_number} + 4 ))
  local padding=$((max_length - total_text_length))
  printf " │   ${yellow}${menu_number}${white}) ${white}${menu_text1} ${green}${menu_text2}%-${padding}s${white}│\n" ''
}

function bottom_menu_option() {
  local menu_number=$1
  local menu_text=$2
  local color=$3
  local max_length=59
  local padding=$((max_length - ${#menu_text}))
  printf " │  $color${menu_number}${white}) ${white}${menu_text}%-${padding}s${white}│\n" ''
}

function info_line() {
  local status=$1
  local text=$2
  local color=$3
  local max_length=68
  local total_text_length=$(( ${#status} + ${#text} ))
  local padding=$((max_length - total_text_length))
  printf " │   $color${status} ${white}${text}%-${padding}s${white}│\n" ''
}

function system_line() {
  local title="$1"
  local value="$2"
  local max_length=63
  local title_length=${#title}
  local separator=": "
  local value_length=${#value}
  local value_padding=$((max_length - title_length - ${#separator} - value_length))
  printf " │ ${green}%s${white}%s${white}\e[97m%s%-*s%s${white}│\n" "$title" "$separator" "$value" $value_padding ''
}

function install_msg() {
  read -p "${white} Are you sure you want to install ${green}${1} ${white}? (${yellow}y${white}/${yellow}n${white}): ${yellow}" $2
}

function remove_msg() {
  read -p "${white} Are you sure you want to remove ${green}${1} ${white}? (${yellow}y${white}/${yellow}n${white}): ${yellow}" $2
}

function restore_msg() {
  read -p "${white} Are you sure you want to restore ${green}${1} ${white}? (${yellow}y${white}/${yellow}n${white}): ${yellow}" $2
}

function backup_msg() {
  read -p "${white} Are you sure you want to backup ${green}${1} ${white}? (${yellow}y${white}/${yellow}n${white}): ${yellow}" $2
}

function restart_msg() {
  read -p "${white} Are you sure you want to restart ${green}${1} ${white}? (${yellow}y${white}/${yellow}n${white}): ${yellow}" $2
}

function ok_msg() {
  echo
  echo -e "${white}${green} ✓ ${1}${white}"
  echo
}

function error_msg() {
  echo
  echo -e "${white}${darkred} ✗ ${1}${white}"
  echo
}

function run() {
  clear
  # $1 - Action performed
  $1
  # $2 - Menu launched after action is completed
  $2
}

function check_ipaddress() {
  eth0_ip=$(ip -4 addr show eth0 2>/dev/null | grep -o -E '(inet\s)([0-9]+\.){3}[0-9]+' | cut -d ' ' -f 2 | head -n 1)
  wlan0_ip=$(ip -4 addr show wlan0 | grep -o -E '(inet\s)([0-9]+\.){3}[0-9]+' | cut -d ' ' -f 2 | head -n 1)
  if [ -n "$eth0_ip" ]; then
    echo -e "$eth0_ip"
  elif [ -n "$wlan0_ip" ]; then
    echo -e "$wlan0_ip"
  else
    echo -e "xxx.xxx.xxx.xxx"
  fi
}

function start_moonraker() {
  set +e
  /etc/init.d/S56moonraker_service start
  sleep 1
  set -e
}

function stop_moonraker() {
  set +e
  /etc/init.d/S56moonraker_service stop
  sleep 1
  set -e
}

function start_nginx() {
  set +e
  /etc/init.d/S50nginx start
  sleep 1
  set -e
}

function stop_nginx() {
  set +e
  /etc/init.d/S50nginx stop
  sleep 1
  set -e
}

function restart_nginx() {
  set +e
  /etc/init.d/S50nginx restart
  sleep 1
  set -e
}

function start_klipper() {
  set +e
  /etc/init.d/S55klipper_service start
  set -e
}

function stop_klipper() {
  set +e
  /etc/init.d/S55klipper_service stop
  set -e
}

function restart_klipper() {
  set +e
  /etc/init.d/S55klipper_service restart
  set -e
}

function disabled_feature() {
  error_msg "Due to some compatibility issues, this feature is temporarily disabled!"
}