from .base_service import Base_service
import sys
class mgmt_postgres(Base_service):

    def go(self, **kwarg):
        self.async_runner(tasks=[self.load_images_async, self.get_requests], images=['postgres.img'], **kwarg)
#        self.get_requests(**kwarg);
        self.add_service();

    async def get_requests(self, prefix_env: str = "MGMT", dialog: list = None, external:bool = False, **kwarg):
        dialogs = dialog if isinstance(dialog, list) else [
            {
                "env": f'MGMT_PSQL_HOST',
                "enable": None,
                "msg": (
                    f'Установка Р7-Команда сервер управления:\n\nВведите адрес {"внешнего " if external else ""}сервера PostgreSQL',
                    f'Адрес {"внешнего " if external else ""}сервера PostgreSQL обязателен к заполнению.',
                    f'Адрес {"внешнего " if external else ""}сервера PostgreSQL не может содержать спецсимволы, кроме "-" и "."'
                ),
                "func_check": self.check_hostname(),
                "func_visibility": self.visibility_detalization(),
                "detalization": 3
            },
            {
                "env": f'MGMT_PSQL_PORT',
                "enable": None,
                "msg": (
                    f'Установка Р7-Команда сервер управления:\n\nВведите номер открытого порта {"внешнего " if external else ""}сервера PostgreSQL',
                    f'Номер порта {"внешнего " if external else ""}сервера PostgreSQL обязателен к заполнению.',
                    f'Номер порта {"внешнего " if external else ""}сервера PostgreSQL должен состоять из чисел, буквы и спецсимволы не допустимы.'
                ),
                "func_check": self.check_port(),
                "func_visibility": self.visibility_detalization(),
                "detalization": 5
            },
            {
                "env": f'MGMT_PSQL_DB',
                "enable": None,
                'msg': (
                    f'Установка Р7-Команда сервер управления:\n\nВведите имя базы данных {"внешнего " if external else ""}сервера PostgreSQL',
                    f'Имя базы данных {"внешнего " if external else ""}сервера PostgreSQL обязательно к заполнению.',
                    f'Имя базы данных {"внешнего " if external else ""}сервера PostgreSQL не может содержать спецсимволы, кроме "-" и "_"'
                ),
                "func_check": self.check_db(),
                "func_visibility": self.visibility_detalization(),
                "detalization": 2
            },
            {
                "env": f'MGMT_PSQL_USER',
                "enable": None,
                'msg': (
                    f'Установка Р7-Команда сервер управления:\n\nВведите имя пользователя {"внешнего " if external else ""}сервера PostgreSQL',
                    f'Имя пользователя {"внешнего " if external else ""}сервера PostgreSQL обязателен к заполнению.',
                    None
                ),
                "func_check": self.check_user(),
                "func_visibility": self.visibility_detalization(),
                "detalization": 1
            },
            {
                "env": f'MGMT_PSQL_PWD',
                "enable": None,
                'msg': (
                    f'Установка Р7-Команда сервер управления:\n\nВведите пароль пользователя {"внешнего " if external else ""}сервера PostgreSQL',
                    f'Пароль пользователя {"внешнего " if external else ""}сервера PostgreSQL обязателен к заполнению.',
                    f'Пароль не может быть пустым'
                ),
                "func_check": self.check_pwd(),
                "func_visibility": self.visibility_detalization(),
                "detalization": 1
            },
            {
                "env": f'MGMT_PSQL_STORAGE',
                "enable": None,
                'msg': (
                    f'Установка Р7-Команда сервер управления:\n\nВведите путь до директории хранения БД сервера PostgreSQL',
                    f'Путь до директории хранения БД обязателен к заполнению',
                    f'Указанный путь не найден'
                ),
                "func_parse": self.parse_path_dir(),
                "func_check": self.check_extended_dir(),
                "func_visibility": self.visibility_detalization(),
                "detalization": 2
            },
            {
                "env": (f'{prefix_env}_PSQL_IMAGE_NAME',f'{prefix_env}_PSQL_IMAGE_VERSION'),
                "enable": None,
                "msg": (
                    f'Установка Р7-Команда медиа сервера::\n\nВведите имя docker-образа в формате image:tag для сервера postgres',
                    f'Имя обязательно к заполнению.',
                    f'Имя docker-образа не может содержать спецсимволы, кроме "-", "." и ":"'
                ),
                "func_parse": self.parse_image_tag(),
                "func_check": self.check_image_tag(),
                "func_visibility": self.visibility_detalization(),
                "detalization": 6
            },
        ];
        self.get_dialogs(dialogs)


    def add_service(self):
        self.service = {self.__class__.__name__.replace('mgmt_',''): {
            'image': f'{self.MGMT_PSQL_IMAGE_NAME[-1]}:{self.MGMT_PSQL_IMAGE_VERSION[-1]}',
            'container_name': self.MGMT_PSQL_CONTAINER_NAME[-1],
            # 'hostname': self.MGMT_PSQL_HOST[-1],
            'environment': {
                'POSTGRES_USER': self.MGMT_PSQL_USER[-1],
                'POSTGRES_PASSWORD': self.MGMT_PSQL_PWD[-1],
            },
            'volumes':['postgres_data:/var/lib/postgresql/data'],                
            "healthcheck": {
                "test": ["CMD-SHELL", "pg_isready"],
                "interval": "10s",
                "timeout": "20s",
                "retries": 3
            },
            'restart': 'unless-stopped',
            'logging': {
                'driver': 'json-file',
                'options': {'max-file':'5',
                            'max-size': '10m'},
            }                
        }
    };
