#!/bin/bash
 
# clidmanager simple management a docker container    
# Author: Désiré Werner Menrath                       
# Email: polunga40@unity-mail.de                      
# Translate German to English with LibreTranslate     
# Translatefiles edit with Poedit                     
# Use without warranty!        

NORMAL='\033[0m'
GREEN='\033[1;32m'
RED='\033[31;1;42m'
BLUE='\033[30;1;34m'
ZYAN='\033[30;1;36m'
LBLUE='\033[1;34m'
YELLOW='\033[1;33m'                   
    
# 1 = 1. Year, 09 = Month of the Year, 2924 = Day and Year of the Year
 
version=$(echo -e $GREEN"v. 1.03.2325"$LBLUE)
cmname=$(echo -e $YELLOW"containermanager"$LBLUE)
info=$(echo -e $GREEN"Im Terminal dw eingeben um direkt")
info2=$(echo -e $GREEN"in das Docker Verzeichnis zu kommen."$LBLUE)
one=$(echo -e $YELLOW"1"$LBLUE)
two=$(echo -e $YELLOW"2"$LBLUE)
three=$(echo -e $YELLOW"3"$LBLUE)
four=$(echo -e $YELLOW"4"$LBLUE)
five=$(echo -e $YELLOW"5"$LBLUE)
six=$(echo -e $YELLOW"6"$LBLUE)
seven=$(echo -e $YELLOW"7"$LBLUE)
eight=$(echo -e $YELLOW"8"$LBLUE)
Encoding=UTF-8

# i18n - Internationalization - Internationalisierung

export TEXTDOMAIN=clidmanager
export TEXTDOMAINDIR="/usr/share/locale"

list_dir_with_numbers() {

    unset dcname

    # Here Is is used to store all folders of a directory in an array
    array=($(ls))

    # This loop outputs the directory numbered 
    typeset -i i=0 max=${#array[*]}
    while (( i < max ))
    do
       echo -e $LBLUE[$YELLOW$i$LBLUE] $LBLUE"${array[$i]}"$NORMAL
       i=i+1
    done

    # Loop that only allows numbers 

    while read -p "Ordner Nummer eingeben: " entrynumber
        do
	        if [[ "$entrynumber" =~ ^[0-9]+$ && "$entrynumber" -lt "$i" ]]      
                then
                    dcname=${array[entrynumber]}
                    break 
            fi     
        done

}

newdir() {
    clear
    echo 
    echo -e $BLUE"Wird hier ein Name eingegeben,\nerstellt dies einen Ordner in /opt/containers/."$NORMAL
    echo 
    echo -e $GREEN"Achtung hier bitte nur einen Ordner angeben!"$NORMAL
    read -p "Containername eingeben: " dcname 
    sudo mkdir -p /opt/containers/$dcname
    while [ -z $dcname ]
         do    
            echo -e $GREEN"Ups da wurde kein Ordnername eingegeben..."$NORMAL
            echo 
            read -p "Containername eingeben: " dcname
            sudo mkdir -p /opt/containers/$dcname
         done
    if [ -d /opt/containers/$dcname ]
         then
            clear
            echo 
	        echo -e $GREEN"Ordner"$BLUE ${dcname} $GREEN"wurde erfolreich erstellt."$NORMAL
            echo 
            echo "Sollen in dem erstellten Ordner weitere Ordner erstellt werden?" 
            echo "Für weitere Ordner y und Enter drücken. Mit Enter geht es zurück zum Programm."
            read -p "" response
            if [ "$response" == "y" ]
                then 
                    clear
                    echo -e $GREEN"Beispiel für 2 weitere Ordner in dem erstellen Ordner:"
                    echo 
                    echo -e $BLUE"data config"$NORMAL
                    echo 
                    echo -e $GREEN"Hier können auch mehr als 2 Ordner angegeben werden,"$NORMAL
                    read -p "Ordnernamen eingeben: " subfolders 
                    for item in ${subfolders[*]}
                        do
                        sudo mkdir -p /opt/containers/$dcname/$item
                        done
                    while [ -z $item ]
                        do
                            echo -e $GREEN"Ups es wurden keine weiteren Ordner angegeben..."
                            echo -e $GREEN"Bitte nochmal"$NORMAL
                            read -p "Ordnernamen eingeben: " subfolders
                            for item in ${subfolders[*]}
                                do
                                sudo mkdir -p /opt/containers/$dcname/$item
                                done                            
                        done
                    clear
                    echo -e $GREEN"Ordner ...$BLUE"
                    echo 
                    ls -x /opt/containers/$dcname/
                    echo 
                    echo -e $GREEN"wurden erstellt."
                    echo 
                    read -p "Weiter mit Enter."
                    sudo clidmanager
            else 
                sudo clidmanager 
            fi
      else
	    echo -e $RED"Es trat ein fehler auf...\nBitte im Pfad nachsehen ob der Ordner existiert."$NORMAL

    fi 
}

list_containers() {

    clear
    echo -e $ZYAN
    docker ps --format 'table {{.Names}}\t{{.Status}}' 
    echo -e $NORMAL
}

# dcname = Docker Container Name
    
log() {

    unset dcname
    clear
    echo -e ""$NORMAL
    echo -e $BLUE"    -----Docker Compose Logs-----"$NORMAL
    echo -e $GREEN"Unten sehen sie eine Liste der Container"$NORMAL
    echo -e ""$ZYAN
    cd /opt/containers/ && list_dir_with_numbers
    cd $dcname && docker compose logs
}

# dcstart = docker compose start

dcstart() {

    unset dcname
    clear
    echo -e ""$NORMAL
    echo -e $BLUE"Hier wird der angegebene Container bei änderung der yml Datei, neu erstellt."
    echo -e "Und bei einem neuen Container wird dieser runtergeladen und gestartet."$NORMAL
    echo 
    echo -e $BLUE"    -----Docker Compose start-----"
    echo -e $GREEN"Unten sehen sie eine Liste der Container"$NORMAL
    echo -e ""$ZYAN
    cd /opt/containers/ && list_dir_with_numbers 
    cd $dcname && docker compose up -d
    
}

edit_yml() {

    unset dcname
    clear 
    echo -e ""$NORMAL
    echo -e $BLUE"      -----yml File edit-----"
    echo -e $GREEN"Unten sehen sie eine Liste der Container"$NORMAL
    echo -e ""$ZYAN
    cd /opt/containers/ && list_dir_with_numbers
    cd $dcname && nano docker-compose.yml
    sudo clidmanager
}

all_stop() {
	
	docker stop $(docker ps -a -q)
}	

all_start() {
	
	docker start $(docker ps -a -q)
}	

stack_update() {

	cd /opt/containers/traefik-crowdsec-stack/ && wait && \
    docker compose restart crowdsec && wait && \
	docker compose down && wait && \
	docker compose pull && wait && \
	docker compose up -d
}

clear
echo -e $LBLUE""
read -n 1 -s -r -p "$version    | $cmname |

[$one] Neuen Container Ordner erstellen

[$two] yml Datei bearbeiten/erstellen

[$three] Container mit up -d starten/neustarten

[$four] Log Datei einsehen

[$five] Alle Container stoppen

[$six] Alle Container starten

[$seven] Docker Spezial \"Crownsec-Treafik-Stack\" updaten

[$eight] Laufende Container anzeigen

$info
$info2
======================================================
Bitte eine Zahl von 1-8 wählen.

Abbruch mit jeder anderen Taste ..." entry
clear
  case $entry in
       [1]* ) clear; newdir; exit;;
       [2]* ) clear; edit_yml; exit;;
       [3]* ) clear; dcstart; exit;;
       [4]* ) clear; log; exit;;
       [5]* ) clear; all_stop; exit;;
       [6]* ) clear; all_start; exit;;
       [7]* ) clear; stack_update; exit;;
       [8]* ) clear; list_containers; exit;;
  esac

################ENDE#######################