"""The module contains miscellaneous helpers.
It's not considered part of the public ufoLib API.
"""
from __future__ import absolute_import, unicode_literals
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()