"""The module contains miscellaneous helpers.
It's not considered part of the public ufoLib API.
"""
import sys
import warnings
import functools
from datetime import datetime
from fontTools.misc.py23 import tounicode


if hasattr(datetime, "timestamp"):  # python >= 3.3

    def datetimeAsTimestamp(dt):
        return dt.timestamp()

else:
    from datetime import tzinfo, timedelta

    ZERO = timedelta(0)

    class UTC(tzinfo):

        def utcoffset(self, dt):
            return ZERO

        def tzname(self, dt):
            return "UTC"

        def dst(self, dt):
            return ZERO

    utc = UTC()

    EPOCH = datetime.fromtimestamp(0, tz=utc)

    def datetimeAsTimestamp(dt):
        return (dt - EPOCH).total_seconds()


# TODO: should import from fontTools.misc.py23
try:
	long = long
except NameError:
	long = int

integerTypes = (int, long)
numberTypes = (int, float, long)


def deprecated(msg=""):
    """Decorator factory to mark functions as deprecated with given message.

    >>> @deprecated("Enough!")
    ... def some_function():
    ...    "I just print 'hello world'."
    ...    print("hello world")
    >>> some_function()
    hello world
    >>> some_function.__doc__ == "I just print 'hello world'."
    True
    """

    def deprecated_decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            warnings.warn(
                "{} function is a deprecated. {}".format(func.__name__, msg),
                category=DeprecationWarning,
                stacklevel=2,
            )
            return func(*args, **kwargs)

        return wrapper

    return deprecated_decorator


def fsdecode(path, encoding=sys.getfilesystemencoding()):
    return tounicode(path, encoding=encoding)


if __name__ == "__main__":
    import doctest

    doctest.testmod()
