# Setup UI and prompting helpers for setup.sh # setup.sh -> scripts/bash/lib/common.sh (shared colors/logging) if [ -n "${SCRIPT_DIR:-}" ] && [ -f "$SCRIPT_DIR/scripts/bash/lib/common.sh" ]; then source "$SCRIPT_DIR/scripts/bash/lib/common.sh" fi # Extra UI colors not in common.sh MAGENTA='\033[0;35m' BOLD='\033[1m' : "${RED:=\033[0;31m}" : "${GREEN:=\033[0;32m}" : "${YELLOW:=\033[1;33m}" : "${BLUE:=\033[0;34m}" : "${CYAN:=\033[0;36m}" : "${NC:=\033[0m}" say(){ local t=$1 shift case "$t" in INFO) echo -e "${BLUE}ℹ️ $*${NC}";; SUCCESS) echo -e "${GREEN}✅ $*${NC}";; WARNING) echo -e "${YELLOW}⚠️ $*${NC}";; ERROR) echo -e "${RED}❌ $*${NC}";; HEADER) echo -e "\n${MAGENTA}=== $* ===${NC}";; esac } validate_ip(){ [[ $1 =~ ^[0-9]{1,3}(\.[0-9]{1,3}){3}$ ]]; } validate_port(){ [[ $1 =~ ^[0-9]+$ ]] && [ $1 -ge 1 ] && [ $1 -le 65535 ]; } validate_number(){ [[ $1 =~ ^[0-9]+$ ]]; } ask(){ local prompt="$1"; local def="$2"; local validator="$3"; local v while true; do if [ "$NON_INTERACTIVE" = "1" ]; then v="$def" else if [ -n "$def" ]; then read -p "$(echo -e "${YELLOW}🔧 ${prompt} [${def}]: ${NC}")" v; v=${v:-$def} else read -p "$(echo -e "${YELLOW}🔧 ${prompt}: ${NC}")" v fi fi if [ -z "$v" ] && [ "$NON_INTERACTIVE" = "1" ]; then say ERROR "Non-interactive mode requires a value for '${prompt}'." exit 1 fi if [ -z "$validator" ] || $validator "$v"; then echo "$v" return 0 fi if [ "$NON_INTERACTIVE" = "1" ]; then say ERROR "Invalid value '${v}' provided for '${prompt}' in non-interactive mode." exit 1 fi say ERROR "Invalid input. Please try again." done } ask_yn(){ local p="$1"; local d="$2"; local v if [ "$NON_INTERACTIVE" = "1" ]; then if [ "$d" = "y" ]; then echo 1 else echo 0 fi return 0 fi while true; do if [ "$d" = "y" ]; then read -p "$(echo -e "${YELLOW}🔧 ${p} [Y/n]: ${NC}")" v; v=${v:-y} else read -p "$(echo -e "${YELLOW}🔧 ${p} [y/N]: ${NC}")" v; v=${v:-n} fi case "$v" in [Yy]*) echo 1; return 0;; [Nn]*) echo 0; return 0;; esac say ERROR "Please answer y or n" done } show_wow_header() { if [ -t 1 ] && command -v clear >/dev/null 2>&1; then clear >/dev/null 2>&1 || true fi echo -e "${RED}" cat <<'ASCII' ## ### :* ##### .**# ###### ***## ****###* *****##. ******##- ******###. .*********###= ********### ************##### #****###:+* ********#### ***********+****##########**********##**# ********##### ********=+***********######**********######*#**+*******###+ -+*****=**************#######*******####**#####**##*****####- ++**++****************#########**####***####***#####****####: :++*******************#*******####*****#****######***##*****####### *= -++++++******************************###**********###******###### .+***. :++++++++***************************#+*#*-*******************#**+ ++*****= =+++=+++***************************+**###**************++*#####* -++*****+++- -=++++++++*********+++++**###**+++=+*###**+*********##+++*+++## +++*********+++=-=+++++++++****+++***+++++*####***+++**=**#*==***#####*++***+*+ +++++***********++=-=++++++++*++****=++*++*#######**+=-=+****+*#########***==+*#* =+++++++*****++++===-++++++++=+++++=++*+=-+#**#**=####****#**+-+**************##* ++++++++++++++======++++++++=====+++++=-+++*+##########*****==*######*****#### +++++++=++++++====++++++++++========---++++*****#######**==***#*******####* ++===++++++++=====+++++++=+++:::--:::.++++++*****####**+=**************# =+++++=: =+=====-+++++++++++++++++++++==+++--==----:-++++++****####****+=+*+*******: ++++++++++++++++==+++++++++++++++++++++=+=-===-----:+++++++++**+++****####***+++ =++++++++++++++++++++++++++++++++++++=++++======----==+++++++=+************: :++++++++++++++=+++++++++++++++++++======-------:-====+****************. =----=+++-==++++++*******++++++++++++++===============****************= -=---==-=====--+++++++++++++++++++++++++++===+++++++********++#***#++****** +++++========+=====----++++++++++++++++===+++++===--=**********+=++*++******** +++==========-=============-----:-=++=====+++++++++++++++=-=***********+********* ==----=+===+=================+++++++++++++++++++++++++=-******************** .======++++++===============---:::::==++++++++++++++++++++++=**********++*******: +++==--::-=+++++++++++++========+===--=+- :::=-=++++++++++++++++++++++ +*****++**+*** .-----::::-=++++++++++++++++++==::-----++. :=+++++++++++++++++++*..-+*********= :=+++++++++++++++++==.:--===-+++++++++++**++++++:::-******** ++++++++++++++++++=+++++++++++++**+++++*****==****** .++++++++++++=-:.-+++++++++***++++************+ +++=========:.=+=-::++*****+************* -++++++++==+: ..::=-. ..::::=******** .+========+==+++==========---::-+*- ++++++++++++=======-====== ++++++++++++++======++ -=======++++++: ... :::. :::::::::.,:::::: :::::::.. ... :::::::::::: :: .: .,-::::: ... :::::::.. .,:::::: ;;`;; '`````;;;;;;;'''' ;;;;``;;;; .;;;;;;;.;;;;;;;;'''',;; ;;, ,;;;'````' .;;;;;;;. ;;;;``;;;; ;;;;'''' ,[[ '[[, .n[[' [[cccc [[[,/[[[' ,[[ \[[, [[ ,[[[,,,[[[ [[[ ,[[ \[[,[[[,/[[[' [[cccc c$$$cc$$$c ,$$P" $$"""" $$$$$$c $$$, $$$ $$ "$$$"""$$$ $$$ $$$, $$$$$$$$$c $$"""" 888 888,,888bo,_ 888oo,__ 888b "88bo,"888,_ _,88P 88, 888 "88o`88bo,__,o,"888,_ _,88P888b "88bo,888oo,__ YMM ""` `""*UMM """"YUMMMMMMM "W" "YMMMMMP" MMM MMM YMM "YUMMMMMP" "YMMMMMP" MMMM "W" """"\MMM ASCII echo -e "${NC}" } show_realm_configured(){ echo -e "\n${GREEN}⚔️ Your realm configuration has been forged! ⚔️${NC}" echo -e "${GREEN}🏰 Ready to deploy your World of Warcraft server${NC}" echo -e "${GREEN}🗡️ May your realm bring epic adventures!${NC}\n" }