#!/bin/bash
action=$1
target=$2
args=$@

BASE_DIR=/etc
ORIGINAL_PORT=9999
ORIGINAL_VERSION=v1.2.5
ORIGINAL_ENTRANCE=entrance
ORIGINAL_USERNAME=username
ORIGINAL_PASSWORD=password

function usage() {
    echo "iContainer linha de comandos"
    echo
    echo "Uso: "
    echo "  ./icp [COMANDO] [ARGS...]"
    echo "  ./icp --help"
    echo
    echo "Comandos: "
    echo "  status              Verificar o status de execução do serviço iContainer"
    echo "  start               Iniciar o serviço iContainer"
    echo "  stop                Parar o serviço iContainer"
    echo "  restart             Reiniciar o serviço iContainer"
    echo "  uninstall           Desinstalar o serviço iContainer"
    echo "  user-info           Obter informações do usuário iContainer"
    echo "  listen-ip           Alternar IP de escuta do iContainer"
    echo "  version             Verificar informações da versão do iContainer"
    echo "  update              Modificar informações do sistema iContainer"
    echo "  reset               Redefinir informações do sistema iContainer"
    echo "  restore             Restaurar o serviço e dados do iContainer"
}
function status() {
    systemctl status icontainer.service
}
function start() {
    systemctl start icontainer.service
    status
}
function stop() {
    systemctl stop icontainer.service
    status
}
function restart() {
    systemctl restart icontainer.service
    status
}
function uninstall() {
    read -p "A desinstalação irá remover completamente o serviço iContainer e o diretório de dados, deseja continuar [y/n] : " yn
    if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then
        echo -e "================== Iniciando a desinstalação do iContainer existente no servidor  =================="
        echo -e ""
        echo -e "1) Parando o processo do serviço iContainer..."
        systemctl stop icontainer.service
        systemctl disable icontainer.service >/dev/null 2>&1
    else
        exit 0
    fi

    echo -e "2) Removendo o serviço iContainer e o diretório de dados..."
    rm -rf $BASE_DIR/icontainer /usr/local/bin/{icp,icontainer} /etc/systemd/system/icontainer.service

    echo -e "3) Recarregando arquivos de configuração do serviço..."
    systemctl daemon-reload
    systemctl reset-failed

    echo -e ""
    echo -e "================================== Desinstalação Concluída =================================="
}
function user-info() {
    icontainer user-info
}
function listen-ip() {
    icontainer listen-ip
}
function listen_ipv4() {
    icontainer listen-ip ipv4
    restart
}
function listen_ipv6() {
    icontainer listen-ip ipv6
    restart
}
function restore() {
    read -p "O iContainer será restaurado para a última versão estável, deseja continuar [y/n] : " yn
    if [ "$yn" == "Y" ] || [ "$yn" == "y" ]; then
        echo -e ""
        icontainer restore
        systemctl daemon-reload
        restart
        echo -e ""
        icontainer version
    else
        exit 0
    fi
}
function version() {
    icontainer version
}
function reset() {
    icontainer reset
}
function reset_domain() {
    icontainer reset domain
}
function reset_entrance() {
    icontainer reset entrance
}
function reset_https() {
    icontainer reset https
    restart
}
function reset_ips() {
    icontainer reset ips
}
function reset_mfa() {
    icontainer reset mfa
}
function update() {
    icontainer update
}
function update_username() {
    icontainer update username
}
function update_password() {
    icontainer update password
}
function update_port() {
    icontainer update port
}

function main() {
    case "${action}" in
        status)
            status
            ;;
        start)
            start
            ;;
        stop)
            stop
            ;;
        restart)
            restart
            ;;
        restore)
            restore
            ;;
        uninstall)
            uninstall
            ;;
        user-info)
            user-info
            ;;
        listen-ip)
            case "${target}" in
                ipv4)
                    listen_ipv4
                    ;;
                ipv6)
                    listen_ipv6
                    ;;
                *)
                    listen-ip
                    ;;
            esac
            ;;
        version)
            version
            ;;
        reset)
            case "${target}" in
                domain)
                    reset_domain
                    ;;
                entrance)
                    reset_entrance
                    ;;
                https)
                    reset_https
                    ;;
                ips)
                    reset_ips
                    ;;
                mfa)
                    reset_mfa
                    ;;
                *)
                    reset
                    ;;
            esac
            ;;
        update)
            case "${target}" in
                username)
                    update_username
                    ;;
                password)
                    update_password
                    ;;
                port)
                    update_port
                    ;;
                *)
                    update
                    ;;
            esac
            ;;
        help)
            usage
            ;;
        --help)
            usage
            ;;
        "")
            usage
            ;;
        *)
        echo "Parâmetro não suportado, por favor use os parâmetros help ou --help para obter ajuda"
    esac
}
main
