from .base_service import Base_service

class ds_redis(Base_service):

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

    async def get_requests(self, prefix_env: str = "DS", dialog: list = None, external:bool = False, **kwarg):
        dialogs = dialog if isinstance(dialog, list) else [
            {
                "env": 'DS_REDIS_HOST',
                "enable": None,
                "msg": (
                    f'Р7-Сервер документов:\n\nВведите адрес {"внешнего " if external else ""}сервера Redis',
                    f'Адрес {"внешнего " if external else ""}сервера Redis обязателен к заполнению.',
                    f'Адрес {"внешнего " if external else ""}сервера Redis не может содержать спецсимволы, кроме "-" и "."'
                ),
                "func_check": self.check_hostname(),
                "func_visibility": self.visibility_detalization(),
                "detalization": 3
            },
            {
                "env": 'DS_REDIS_PORT',
                "enable": None,
                "msg": (
                    f'Р7-Сервер документов:\n\nВведите номер открытого порта {"внешнего " if external else ""}сервера Redis',
                    f'Номер порта {"внешнего " if external else ""}сервера Redis обязателен к заполнению.',
                    f'Номер порта {"внешнего " if external else ""}сервера RabbitMQ должен состоять из чисел, буквы и спецсимволы не допустимы.'
                ),
                "func_check": self.check_port(),
                "func_visibility": self.visibility_detalization(),
                "detalization": 4
            },
            {
                "env": ('DS_REDIS_IMAGE_NAME','DS_REDIS_IMAGE_VERSION'),
                "default": f"{self.DS_REDIS_IMAGE_NAME[0]}:{self.DS_REDIS_IMAGE_VERSION[0]}",
                "enable": None,
                "msg": (
                    f'Р7-Сервер документов:\n\nВведите имя docker-образа в формате image:tag для сервера Redis',
                    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)

#        for request in dialogs:
#            if request["enable"]:
#                self.get_request(
#                    env_name = request["env"],
#                    msg = request['msg'],
#                    func_check = request["func_check"],
#                    password = request["env"].endswith("_PWD") or request["env"].endswith("_KEY")
#                );
#            else:
#                self.env_is_default(request["env"]);

    def add_service(self):
        self.env_is_default([
            'DS_REDIS_IMAGE_NAME',
            'DS_REDIS_IMAGE_VERSION',
            'DS_REDIS_CONTAINER_NAME',
            'DS_REDIS_HOST'
        ]);

        self.service = {self.__class__.__name__.replace('_','-'): {
                'networks': [f'net-{self.PREFIX_DS[0]}'],
                'image': f'{self.DS_REDIS_IMAGE_NAME[-1]}:{self.DS_REDIS_IMAGE_VERSION[-1]}',
                'hostname': self.DS_REDIS_HOST[-1],
                'container_name': self.DS_REDIS_CONTAINER_NAME[-1],
                'restart': 'unless-stopped',
            }
        };
