#!/bin/sh

rand()
{
    od -An -N2 -i /dev/urandom | tr -d ' '
}

exit_script(){
    printf "\e[?25l"
    clear
    reset
    exit 0
}

printTree()
{
    printf "\e[32m"
    size=$1
    for i in $(seq 1 "$size"); do
        printf "%$((size - i + 3 ))s" ""
        remain=$((i*2-1))
        while [ "$remain" -gt 0 ]; do
            lenght=$(($(rand) % 16))
            new_remain=$((remain - lenght))
            if [ "$new_remain" -gt 0 ]; then
                printf "%${lenght}s" "" | tr " " "*"
                printf "\e[3%dm*\e[32m" $(($(rand) % 8))
                remain=$((new_remain-1))
            else
                printf "%${remain}s" "" | tr " " "*"
                remain=0
            fi
        done
        printf "\n"
    done

    printf "\e[33m"
    root=$(
        printf "%$((size+5))s" "|***|"
    );
    printf "%s\n" "$root"
    printf "%s\n" "$root"
    printf "%s\n" "$root"
}

trap 'exit_script' INT TERM

main()
{
    size="${1:-20}"
    printf "\e[?25l"
    clear
    tree00=$(printTree "$size")
    tree01=$(printTree "$size")
    tree02=$(printTree "$size")
    while true; do
        sleep 0.5 &
        printf "\e[2;1H%s" "$tree00"
        wait
        sleep 0.5 &
        printf "\e[2;1H%s" "$tree01"
        wait
        sleep 0.5 &
        printf "\e[2;1H%s" "$tree02"
        wait
    done
}

main "$1"
