#!/bin/bash
COMMAND_COM="${1,,}"

if [ -f /etc/default/termidesk-vdi ]; then
    . /etc/default/termidesk-vdi
else
    echo "Внимание! Файл '/etc/default/termidesk-vdi' не найден в системе. Скорее всего, Termidesk не установлен."
    exit 1
fi
function check_cmd() {
    [ -z "$(command -v ${1})" ] && COMMAND_COM="nocmd" && echo "Внимание! Команда '${1}' не найдена в системе"
}
function restart_daemon() {
    [ -z "${1}" ] && return
    if [ "$(sudo systemctl | grep "${1}" | grep active | grep running)" ]; then
        echo "Перезапускается ${1}"
        sudo systemctl restart ${1}
    else
        echo "Демон ${1} не запущен. Пропуск."
    fi
}

check_cmd unzip
check_cmd realpath
check_cmd basename
check_cmd dirname
check_cmd grep
check_cmd cut
case "${COMMAND_COM}" in
    install)
        shift
        # Фильтруем список файлов от не *.whl
        [ ${1} ] && PACKAGES_LIST=$(realpath ${@} | grep -e '.whl$')
        if [ -z "${PACKAGES_LIST}" ]; then
            echo "Файлы .whl не найдены"
            exit 1
        fi
        . ${HOME}/venv/bin/activate
        # пробегаемся по подходящим файлам
        for package in ${PACKAGES_LIST}; do
            #echo "File $package"
            #echo "Package $(basename ${package})"
            #echo "Path $(dirname ${package})"
            echo -n "Найден пакет '$(basename ${package})'."
            if [ -z "$(basename ${package} | grep -e "^termidesk_")" ]; then
                echo " Это не плагин Termidesk. Пропускаем."
                continue
            else
                echo ""
            fi
            #Пытаемся распаковать файл метаданных из whl-пакета и из поля Name узнать название пакета. Это название подставляем в качестве названия пакета в инсталлятор
            PACKAGE_NAME=$(unzip -p ${package} *.dist-info/METADATA | grep "Name:" | cut -f2- -d' ')
            if [ -z "${PACKAGE_NAME}" ]; then
                echo "Имя пакета не найдено в файле метаданных"
                continue
            fi
            pip install --upgrade --no-index --force-reinstall --disable-pip-version-check --find-links $(dirname ${package}) ${package}
#${PACKAGE_NAME}
        done
        deactivate
        ;;
    uninstall)
        shift
        if [ -z "${1}" ]; then
            echo "Не указаны пакеты для удаления"
            exit 1
        fi
        . ${HOME}/venv/bin/activate
        for package in ${@}; do
            pip uninstall ${package}
        done
        deactivate
        ;;
    nocmd)
        echo "Установите требуемые программы и перезапустите скрипт."
        exit
        ;;
    *)
        echo "Установщик плагинов в Termidesk."
        echo "Использование: ${0} install package_file_name.whl"
        echo "               ${0} uninstall package_name"
        exit
        ;;
esac
echo "Миграция БД"
sudo /opt/termidesk/sbin/termidesk-vdi-manage migrate
yes "yes" | sudo /opt/termidesk/sbin/termidesk-vdi-manage collectstatic
echo "Перезапуск демонов"
restart_daemon termidesk-vdi
restart_daemon termidesk-taskman
restart_daemon termidesk-wsproxy
restart_daemon termidesk-celery-beat
restart_daemon termidesk-celery-worker
echo "Готово"
