#!/bin/bash

# Title......: xs
# Description: Terminal screen saver wrapper with random feature
# Author.....: Mitchell Johnston - uid 0
# Contact....: mitch@crn.hopto.org
# Updated....: Fri 31 Jan 2025 05:34:03 AM CST
#----------------------------------

# ==== PLEASE NOTE ====
#
# This is a "work in progress"

trap "ending" 2     # allows you to break a bad connection

# variables
#----------------------------------
[ "$1" == "-D" ] && DEBUG=1 && shift 1     # -D to turn on debug mode
PS4='$SECONDS $LINENO: '                   # debug prompt
DOW=$(date +%a)                            # day of week: Thu
TODAY=$(date +%m/%d)                       # month/day: 03/25
DOM=$(date +%d)                            # day of month: 25
OS=$(uname -s)                             # OS type: SunOS Linux
NAME=${0##*/}                              # name of the script
TIMEOUT=3m                                 # Time between switches

# Colors - uncomment if needed
R=$(tput setaf 1)                          # red
BR=$(tput setaf 1; tput bold)              # bold red
G=$(tput setaf 2)                          # green
BG=$(tput setaf 2; tput bold)              # bold green
Y=$(tput setaf 3)                          # yellow
BY=$(tput setaf 3; tput bold)              # bold yellow
B=$(tput setaf 4)                          # blue
BM=$(tput setaf 5; tput bold)              # bold magenta
BC=$(tput setaf 6; tput bold)              # bold cyan
C=$(tput setaf 6)                          # cyan
BL=$(tput setaf 7; tput bold)              # bold light grey
BLD=$(tput bold)                           # bold
N=$(tput sgr0)                             # normal
SIT=$(tput sitm)                           # italics
RIT=$(tput ritm)                           # remove italics
UL=$(tput smul)                            # turn underline on
NL=$(tput rmul)                            # turn underline off
RV=$(tput rev)                             # turn on reverse mode
ROWS=$(tput lines)
COLS=$(tput cols)

# functions
#----------------------------------

bl(){ ## write a blank line
    # Use: bl
    [ "$DEBUG" == "1" ] && set -x
    echo ""
}

html(){ ## mark up code
    vim -f +"syn on" +"set nonu" +"set foldenable!" +"set nospell" +"run! syntax/2html.vim" +"wq" +"q" $1
}

log(){ ## creates a basic log entry $LOG must be defined
    # Use: log {entry}  
    [ "$DEBUG" == "1" ] && set -x
    logger -i -t "$NAME" "$*"
}

pause(){ ## simple pause routine
    # Use: pause  {optional number of seconds} or "-nt" for no time out 
    [ "$DEBUG" == "1" ] && set -x
    [ "$1" == "-nt" ] && TMOUT="" && shift
    echo "$BY";
    if [ $# -gt 0 ]
    then
        read -t $1 -r -p "${C}Hit any key (${BY}$1${C} second timeout)${N}" -n 1 FOO;
    else
        read -r -p "${C}Hit any key${N}" -n 1 FOO;
    fi;
    bl
}

strip-tags(){ ## remove HTML tags
  # Use: curl https://linuxhint.com/bash_cut_command/ --silent | strip-tags
  sed -e 's/<[^>]*.//g' -
}

xtitle(){ ## set window title
    # Use: xtitle "Text to display"
    printf "\033]0;%s\007" "${*}🌀${HOSTNAME}"
}

ending(){ ## exit and clean up
    reset
    exit
}

# setup
#----------------------------------

# this provides a quick way to edit all my scripts on the fly
if [ "$1" == "-E" ]
then
    vim $0
    sed -i -e "7s/.*/# Updated....: $(date)/" $0
    log "Updated $0"
    html $0
    cp $0 /var/www/unix
    mv $0.html /var/www/unix
    exit
fi

# display help if needed
if [ "$1" == "-h" ] || [ "$1" == "--help" ]
then
fmt -s -w $(tput cols) <<END
$NAME

No options

END
exit
fi

# listing of required apps
command -v bash >/dev/null || sudo apt install bash -qyy
command -v cmatrix >/dev/null || sudo apt install cmatrix -yyq
command -v tty-clock >/dev/null || sudo apt install tty-clock -yyq
# **NOTE:All the rest are script from my website.**

# directory check
#[[ "$(pwd)" != *"foo"* ]] && echo "$NAME: directory error" && exit 1

# main
#--------------------------- 
[ "$DEBUG" == 1 ] && set -x


# warning
echo -n "${BG}Time between savers: ${BY}${TIMEOUT}${BG} Ctrl-C to end${N} ";spinit sleep 3

while :
do
    #[ "$(date +%H)" -eq 14 ] && [ "$(date +%M)" -gt 30 ] && exit 1
    NUM=$((RANDOM % 10))
    case $NUM in
        0) xtitle "pipesX.sh";timeout --foreground $TIMEOUT pipesX.sh -t $((RANDOM % 4)) ;;
        1) xtitle "pipes";timeout --foreground $TIMEOUT pipes -t $((0 + RANDOM % 9)) ;;
        2) xtitle "asciiquarium";timeout --foreground $TIMEOUT /home/mitch/bin/asciiquarium ;;
        3) xtitle "maze.py";timeout --foreground $TIMEOUT maze.py ;;
        4) xtitle "neo";timeout --foreground $TIMEOUT neo -c green -s -m "$(tag -p)" ;;
        #4) xtitle "cmatrix";timeout --foreground $TIMEOUT cmatrix -b -C "$(shuf -e green red blue white yellow cyan magenta -n 1)" ;;
        5) xtitle "tty-clock";timeout --foreground $TIMEOUT tty-clock -sxtrB -C $(( ( RANDOM % 6 ) + 1 )) ;;
        6) xtitle "glsr";timeout --foreground $TIMEOUT glsr ;;
        8) xtitle "bclock";timeout --foreground $TIMEOUT bclock ;;
        9) xtitle "cbonsai";timeout --foreground $TIMEOUT cbonsai -S  -m "$(quote -p)" ;;
    esac
done