import sys
from .base_service import Base_service


class media_opensips(Base_service):

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

    async def get_requests(self, prefix_env: str = "MEDIA", dialog: list = None, external:bool = False, **kwarg):
        dialogs = dialog if isinstance(dialog, list) else [
            {
                "env": f'{prefix_env}_OPENSIPS_HOST',
                "enable": None,
                "msg": (
                    f'Установка Р7-Команда медиа сервера::\n\nВведите адрес {"внешнего " if external else ""}сервера Opensips',
                    f'Адрес {"внешнего " if external else ""}сервера Opensips обязателен к заполнению.',
                    f'Адрес {"внешнего " if external else ""}сервера Opensips не может содержать спецсимволы, кроме "-" и "."'
                ),
                "func_check": self.check_hostname(),
                "func_visibility": self.visibility_detalization(),
                "detalization": 3
            },            {
                "env": f'{prefix_env}_OPENSIPS_PORT',
                "enable": None,
                "msg": (
                    f'Установка Р7-Команда медиа сервера::\n\nВведите номер открытого порта {"внешнего " if external else ""}сервера Opensips',
                    f'Номер порта {"внешнего " if external else ""}сервера Opensips обязателен к заполнению.',
                    f'Номер порта {"внешнего " if external else ""}сервера Opensips должен состоять из чисел, буквы и спецсимволы не допустимы.'
                ),
                "func_check": self.check_port(),
                "func_visibility": self.visibility_detalization(),
                "detalization": 3
            },
            {
                "env": (f'{prefix_env}_OPENSIPS_IMAGE_NAME',f'{prefix_env}_OPENSIPS_IMAGE_VERSION'),
                "default": f"{self.MEDIA_OPENSIPS_IMAGE_NAME[0]}:{self.MEDIA_OPENSIPS_IMAGE_VERSION[0]}",
                "enable": None,
                "msg": (
                    f'Установка Р7-Команда медиа сервера::\n\nВведите имя docker-образа в формате image:tag для сервера Opensips',
                    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('media_',''): {
            'networks': ['external','internal'],
            'image': f'{self.MEDIA_OPENSIPS_IMAGE_NAME[-1]}:{self.MEDIA_OPENSIPS_IMAGE_VERSION[-1]}',
            'container_name': self.MEDIA_OPENSIPS_CONTAINER_NAME[-1],
            'hostname': self.MEDIA_OPENSIPS_HOST[-1],
            'depends_on': ['redis','media'],
            'restart': 'always',
            'volumes':[
                {'type': 'bind', 'source': f'{self.INSTALL_CONF_PATH}/application.conf', 'target': '/etc/gate/gate.conf.d/applications.conf'}
            ],
            'ports' : [
                {'target': '5060',
                'published': self.MEDIA_OPENSIPS_PORT[-1],
                'protocol': 'udp',
                'mode': 'host'},
            ],
            'logging': {
                'driver': 'json-file',
                'options': {'max-file':'5',
                            'max-size': '10m'},
            }                
        }
        };
