#!/bin/bash
#
#Server-Manager: o_management (System Command: Installs the management system) [Power: 755]
#
#Version: 0.4.14
#Date:    2023.05.26
#Unix:    Debian 11
#Author:  P.Klapp
#Company: Omoti UG (haftungsbeschränkt)
#Website: https://omoti.de
#
#Path:    /Commands/


#Version
    version=$(sed -n '5p' ${0})
    version=${version#*\ }

#Temporary file
    tmp='/srv/omoti/tmp/o_management.tmp'

#Parameters
    install=${1}        # -i

#Functions
    ExecuteModule () {
        #Parameters
            em_level=${1}   #Module level
            em_name=${2}    #Module name

        #Dependencies
            #parameters
                if [[ -z ${em_level} ]] || [[ -z ${em_name} ]]; then
                    echo -e "\033[31mParameter error\033[0m"
                    o_log -d 'ExecuteModule' "Parameter error - (${em_level}|${em_name})"
                    exit 0
                fi

            #directory
                if ! [[ -d /srv/omoti/scripts/ ]]; then
                    mkdir -p /srv/omoti/scripts/
                    o_log -c 'Directory error'
                fi

            #file
                if [[ -f /srv/omoti/scripts/${em_name}.sh ]]; then
                    rm /srv/omoti/scripts/${em_name}.sh
                    o_log -d 'ExecuteModule' "Module ${em_name} already exists -> was deleted"
                fi

        #Variables
            #em_level       -> Parameters
            #em_name        -> Parameters
            em_version='1.0.5'

        #Main
            #get module
                cd /srv/omoti/scripts/
                o_download -a "https://mgmt.omoti.de/Modules/Level_${em_level}/${em_name}.sh"
                chmod 700 ${em_name}.sh
                cd

            #execute
                /srv/omoti/scripts/${em_name}.sh
    }

#Dependencies
    #parameters
        if [[ ${install} ]] && [[ ${install} != '-i' ]]
        then
            unset install
        fi

    #user
        if [[ ${USER} != 'root' ]] && [[ ${install} ]]
        then
            echo
            echo -e "\033[33mThis command requests root rights\033[0m"
            echo 'Please run the command as root or with sudo!'
            echo
            exit 0
        fi

    #config
        if ! [[ -f /etc/omoti/omoti.cfg ]]
        then
            echo
            echo -e "\033[33mOmoti config not available\033[0m"
            o_log -c 'Omoti config not available'
            echo
            exit 0
        fi

#Variables
    #level_1            -> Main/level 1 module
    #level_1m           -> Main/level 1 module
    #level_1v           -> Main/level 1 module
    #level_2            -> Main/level 2 module
    #level_2m           -> Main/level 2 module
    #level_2v           -> Main/level 2 module
    #level_3            -> Main/level 3 module
    #level_3m           -> Main/level 3 module
    #level_3v           -> Main/level 3 module
    #module             -> Main/installation

#Main
    #level 1 module
        level_1=$(sed -n "$(sed -n '/-level_1/=' /etc/omoti/omoti.cfg)p" /etc/omoti/omoti.cfg)
        level_1=${level_1#*=}

        level_1m=${level_1%-*}
        level_1m=$(printf '%-8s\n' ${level_1m})
        level_1v=${level_1#*-}
        if [[ ${level_1v} == 'n/a' ]]
        then
            level_1v='_____'
        fi

    #level 2 module
        level_2=$(sed -n "$(sed -n '/-level_2/=' /etc/omoti/omoti.cfg)p" /etc/omoti/omoti.cfg)
        level_2=${level_2#*=}

        level_2m=${level_2%-*}
        level_2m=$(printf '%-8s\n' ${level_2m})
        level_2v=${level_2#*-}
        if [[ ${level_2v} == 'n/a' ]]
        then
            level_2v='_____'
        fi

    #level 3 module
        level_3=$(sed -n "$(sed -n '/-level_3/=' /etc/omoti/omoti.cfg)p" /etc/omoti/omoti.cfg)
        level_3=${level_3#*=}

        level_3m=${level_3%-*}
        level_3m=$(printf '%-8s\n' ${level_3m})
        level_3v=${level_3#*-}
        if [[ ${level_3v} == 'n/a' ]]
        then
            level_3v='_____'
        fi

    #info
        if [[ -z ${install} ]]; then
            echo
            echo
            echo -e "\033[1mManagement system info\033[0m"
            echo
            echo "Currently installed modules:"

            #level 1
                if [[ ${level_1} == 'false' ]]
                then
                    echo -e " - Level 1: \033[33m n/a\033[0m"
                else
                    echo -e " - Level 1: \033[36m ${level_1m} v${level_1v}\033[0m"
                fi

            #level 2
                if [[ ${level_2} == 'false' ]]
                then
                    echo -e " - Level 2: \033[33m n/a\033[0m"
                else
                    echo -e " - Level 2: \033[36m ${level_2m} v${level_2v}\033[0m"
                fi

            #level 3
                if [[ ${level_3} == 'false' ]]
                then
                    echo -e " - Level 3: \033[33m n/a\033[0m"
                else
                    echo -e " - Level 3: \033[36m ${level_3m} v${level_3v}\033[0m"
                fi

            echo
            echo -e "To install a module, run \033[36mo_management -i\033[0m as root or with sudo"
            echo
            echo
        fi

    #installation
        if [[ ${install} ]]
        then
            history -c
            rm /root/.bash_history

            echo
            echo
            echo -e "\033[1mManagement system installation\033[0m"
            echo

            #level 1
                if [[ ${level_1} == 'false' ]]
                then
                    echo -e "\033[32mLevel 1\033[0m"
                    echo
                    echo -e "\033[33mLevel 1 module was not installed correctly\033[0m"
                    echo "Please contact an administrator!"
                    echo
                fi

            #level 2
                if [[ ${level_2} == 'false' ]] && [[ ${level_1} != 'false' ]]
                then
                    echo -e "\033[32mLevel 2\033[0m"
                    echo
                    echo -e "Select the Level 2 module to be installed:"
                    echo -e "\033[36m amp \033[0m"
                    echo -e "\033[36m checkmk \033[0m"
                    echo -e "\033[36m game \033[0m"
                    echo -e '\033[36m gitlab \033[0m'
                    echo -e '\033[36m mattermost \033[0m'
                    echo -e "\033[36m mysql \033[0m"
                    echo -e "\033[36m new \033[0m"
                    echo -e "\033[36m node \033[0m"
                    echo -e "\033[36m panel \033[0m"
                    echo -e "\033[36m voice \033[0m"
                    echo
                    read -p 'Module: ' module

                    if [[ ${module} == 'amp' ]]
                    then
                        ExecuteModule '2' 'amp'

                    #checkmk
                    elif [[ ${module} == 'checkmk' ]]
                    then
                        ExecuteModule '2' 'checkmk'

                    #game
                    elif [[ ${module} == 'game' ]]
                    then
                        ExecuteModule '2' 'game'

                    #gitlab
                    elif [[ ${module} == 'gitlab' ]]
                    then
                        ExecuteModule '2' 'gitlab'

                    #mattermost
                    elif [[ ${module} == 'mattermost' ]]
                    then
                        ExecuteModule '2' 'mattermost'

                    #mysql
                    elif [[ ${module} == 'mysql' ]]
                    then
                        ExecuteModule '2' 'mysql'

                    #new
                    elif [[ ${module} == 'new' ]]
                    then
                        ExecuteModule '2' 'new'

                    #node
                    elif [[ ${module} == 'node' ]]
                    then
                        ExecuteModule '2' 'node'

                    #panel
                    elif [[ ${module} == 'panel' ]]
                    then
                        ExecuteModule '2' 'panel'

                    #voice
                    elif [[ ${module} == 'voice' ]]
                    then
                        ExecuteModule '2' 'voice'

                    #incorrect entry
                    else
                        echo -e "\033[33mUnknown input! Please restart\033[0m"
                    fi
                fi

            #level 3
                if [[ ${level_3} == 'false' ]] && [[ ${level_2} != 'false' ]]
                then
                    echo -e "\033[32m Level 3 \033[0m"
                    echo
                    echo -e "Select the Level 3 module to be installed:"
                    echo -e "\033[36m fah \033[0m"
                    echo
                    read -p 'Module: ' module

                    #fah
                    if [[ ${module} == 'fah' ]]
                    then
                        ExecuteModule '3' 'fah'

                    #incorrect entry
                    else
                        echo -e "\033[33mUnknown input! Please restart\033[0m"
                    fi
                fi

            #no modules
                if [[ ${level_1} != 'false' ]] && [[ ${level_2} != 'false' ]] && [[ ${level_3} != 'false' ]]
                then
                    echo -e "\033[33mNo module available\033[0m"
                fi
        fi