# -*- coding: utf-8 -*-
import re
import utils
from cerberus import Validator as BaseValidator
from dateutil import parser


class Validator(BaseValidator):

    def __validate_datetime_string(self, value):
        try:
            parser.parse(value)
            return True
        except Exception:
            pass

    def _validate_type_url_safe_string(self, value):
        if isinstance(value, basestring) and re.match(r'^[a-zA-Z0-9_\-/]*$', value):
            return True

    def _validate_type_optional_datetime_string(self, value):
        if value is not None:
            return self.__validate_datetime_string(value)
        return True


def coerce_string_to_utc_string(value):
    if value is not None:
        try:
            return utils.string_to_utc_string(value)
        except Exception:
            # dateutil.parser is going to throw an error when try to parse the value
            pass

    return value
