from django.core.exceptions import ValidationError
from django.utils.translation import gettext_lazy as _


class PortRangeValidator:
    def __init__(self, start=1, end=65535):
        self.start = start
        self.end = end
        self.error_message = _("Invalid port range, should be like and within {}-{}").format(start, end)

    def __call__(self, data):
        try:
            _range = data.split('-')
            if len(_range) != 2:
                raise ValueError('')
            _range = [int(i) for i in _range]
            if _range[0] > _range[1]:
                raise ValueError('')
            if _range[0] < self.start or _range[1] > self.end:
                raise ValueError('')
        except ValueError:
            raise ValidationError(self.error_message)