#!/bin/bash

PACKAGES=(
    'nginx'
    'redis-server' 'redis-tools' 'nats-server'
    'etcd' 'etcd2' 'etcd-client' 'etcd-server'
    'tarantool-http' 'tarantool-common' 'tarantool'
    'memcached' 'pgbouncer' 'mongodb*'
)

SERVICES=(
    'nginx'
    'nats-server'
    'etcd*'
    'memcached'
    'redis-server'
    'postgresql*'
    'fkvideo*'
    'video-worker'
    'tarantool@shard*'
    'tarantool@example.service'
    'tarantool*'
    'ntls'
    'pgbouncer'
    'findface-*.service'
    'mongod'
)

findface_pkg=$(sudo dpkg -l | grep -E "videopipe-data|findface|fkvideo|ntls|ffsecurity|ntech" | awk '{print $2}')

now=$(date +"%m_%d_%Y.%H:%M")
bdir=ffmulti_bak_${now}
GREEN='\033[0;32m'
RED='\033[0;31m'
NC='\033[0m'

printf "
##############################################################################
#                                                                            #
# ${RED}! This script will remove FindFace Multi instance from current server ! ${NC}#
#                                                                            #
  Config files and DB will be backed up to ~/$bdir/.
#                                                                            #
##############################################################################
"

backupCfg() {
    mkdir $HOME/${bdir}/etc/
    mkdir $HOME/${bdir}/etc/findface-security/
    mv /etc/findface-security/* $HOME/${bdir}/etc/findface-security/
    for cfg in /etc/{{fkvideo*,video-worker*,findface-*}.ini,findface-video*.conf,findface*.*,findface-*.cfg};
    do
        if [[ -f "$cfg" ]]; then
            mv "$cfg" "$HOME/$bdir/$cfg.bak"
            echo "File $cfg found and deleted. Backup created."
        else
            echo "NO such file or directory $cfg"
        fi
    done
}

backupFfupload() {
    tar -cvzf $HOME/${bdir}/var_lib_ffmulti_uploads.tar.gz /var/lib/findface-security/uploads
    tar -cvzf $HOME/${bdir}/var_lib_ffupload.tar.gz /var/lib/ffupload/
}

backupPostgresDB() {
    sudo -u postgres pg_dump ffsecurity > $HOME/${bdir}/ffmulti_postgres_backup.sql
    printf "${GREEN}Database (postgres ffmulti) backup created in${NC} ~/${bdir}/."
}

backupNginxCfg() {
    mkdir $HOME/${bdir}/etc/nginx/
    mkdir $HOME/${bdir}/etc/nginx/sites-enabled/
    cp /etc/nginx/sites-enabled/ntls $HOME/${bdir}/etc/nginx/sites-enabled/
    cp /etc/nginx/sites-enabled/ffsecurity-nginx.conf $HOME/${bdir}/etc/nginx/sites-enabled/
}

backupTarantool() {
    mkdir $HOME/${bdir}/tarantool
    findface-storage-api-dump -config /etc/findface-sf-api.ini
    mv ./*.json $HOME/${bdir}/tarantool/
}

backupMongoDB() {
    mongodump -o=$HOME/${bdir}/mongodb_backup
}

backup() {
    mkdir $HOME/${bdir}/
    backupPostgresDB
    backupTarantool
    backupMongoDB
    for i in "${SERVICES[@]}"
    do
      echo systemctl stop ${i}
      systemctl stop ${i}
    done

    backupCfg
    backupNginxCfg
    backupFfupload

    uninstallAll
}

uninstallAll() {
    for i in "${SERVICES[@]}"
    do
      echo systemctl stop ${i}
      sudo systemctl stop ${i}
    done

    echo "#######################################################"

    sudo systemctl restart postgresql
    sudo -u postgres dropdb -i ffsecurity
    sudo -u postgres dropdb -i ffcounter
    sudo -u postgres dropuser -i ntech

    apt-get purge ${findface_pkg}

    for i in "${PACKAGES[@]}"
    do
        echo apt-get purge -y ${i}
        apt-get purge -y ${i}
    done

    for cfg in /etc/{{fkvideo*,video-worker*,findface-*}.ini,findface-video*.conf,findface-*.cfg};
    do
        if [[ -f "$cfg" ]]; then
            rm "$cfg"
        else
            echo "NO such file or directory $cfg"
        fi
    done

    rm /etc/nginx/ntls.htpasswd
    rm -rf /opt/ntech
    rm -rf /var/findface-security-repo
    rm -rf /var/lib/findface-security
    rm -rf /var/lib/ffupload
    rm -rf /etc/findface-security
    rm -rf /usr/share/ffsecurity-ui
    rm -rf /opt/ffsecurity
    rm -rf /var/lib/etcd/default
    rm -rf /var/cache/findface
    rm -rf /var/log/mongodb
    rm -rf /var/lib/mongodb
    rm /etc/nginx/sites-enabled/ntls
    rm /etc/nginx/sites-enabled/ffsecurity-nginx.conf
    rm /etc/nginx/sites-available/ntls
    rm /etc/nginx/sites-available/ffsecurity-nginx.conf
    rm /etc/apt/sources.list.d/ntechlab.list
    rm /etc/systemd/system/multi-user.target.wants/{findface,tarantool,etcd,ntls,memcached,redis-server}*.service

    service nginx start
    apt-get update
    systemctl daemon-reload
}

while true; do
    read -p "
>backup  = backup objects (postgres/tarantool) and settings then remove all server components and wipe all saved objects. Be sure you have enough free disk space!
>all     = remove all server components and wipe all saved objects and settings.
>no      = cancel operation.
Please select one:

> " asc
    case ${asc} in
    backup ) backup; break;;
    all ) uninstallAll; break;;
    no ) exit;;
        * ) echo "

############################
Please answer backup/all/no.";;
    esac
done

echo "Done"


