from .base import Base
import os
import sys
import shutil
#from .__init__ import Init

class Whiptail_installer(Base):

#    def __init__(self, **kwargs):
#        for name, value in kwargs.items():
#            self.__setattr__(name,value);
#        super().__init__(logger_name = self.__class__.__name__);
#        return self;

    def __enter__(self):
        self.semaphore = None;
        super().__enter__();
        self.install_whiptail();
        return self;
## For Python 3.8+
#        asyncio.run(self.install_docker());
#        self.docker_installed = False

    def install_whiptail(self):
        self.logger.info("Проверяю наличие Whiptail")
        if os.path.isfile("/usr/bin/whiptail"):
            self.logger.info("Библиотека Whiptail установлена в системе")
        else:
            while True:
                confirm = input('Для продолжения работы лаунчера требуется библиотека Whiptail. Установить? [Y(Yes)/N(No)]');
                if confirm.lower() in ["y","yes"]:
#                if True:
                    try:
                        self.logger.info("Библиотека Whiptail не установлена. Произвожу копирование бинарного файла whiptail в /usr/bin/whiptail")
                        shutil.copy2(f'{sys.path[0]}/runtime/whiptail/whiptail', "/usr/bin/whiptail");
                        self.logger.debug('Проверяю наличие директории /usr/lib/x86_64-linux-gnu в дебианподобных системах')
                        if os.path.isdir("/usr/lib/x86_64-linux-gnu"):
                            self.logger.info("Устанавливаю cpp-модуль libnewt52. Произвожу копирование libnewt.so.0.52 в /usr/lib/x86_64-linux-gnu/")
                            shutil.copy2(f'{sys.path[0]}/runtime/whiptail/libnewt.so.0.52.24', "/usr/lib/x86_64-linux-gnu/libnewt.so.0.52.24");
                            shutil.copy2(f'{sys.path[0]}/runtime/whiptail/libnewt.so.0.52', "/usr/lib/x86_64-linux-gnu/libnewt.so.0.52");
                        else:
                            self.logger.info("Устанавливаю cpp-модуль libnewt52. Произвожу копирование libnewt.so.0.52 в /lib64/")
                            shutil.copy2(f'{sys.path[0]}/runtime/whiptail/libnewt.so.0.52.24', "/lib64/libnewt.so.0.52.24");
                            shutil.copy2(f'{sys.path[0]}/runtime/whiptail/libnewt.so.0.52', "/lib64/libnewt.so.0.52");
                        self.logger.info("whiptail и libnewt52 были установлены.")
                        self.logger.info("Установка Whiptail и libnewt52 в систему выполнена.")
                        break
#                else:
                    except:
                        self.logger.error("Произошла ошибка при установке whiptail")
                        print('Произошла ошибка при установке whiptail')
                        sys.exit()
                elif confirm.lower() in ["n","no"]:
                    print('Продолжение работы невозможно. Завершаю работу лаунчера...')
                    sys.exit();
                else:
                    print(f'Введено некорректное значение: {confirm}\nВведите Y, Yes, N или No')
