# -*- coding: utf-8 -*-
import pytz
from dateutil import parser
from datetime import datetime, date


def utc_date_to_string(utc_date):
    return utc_date.strftime("%Y-%m-%dT%H:%M:%S.%fZ")


def string_to_utc_date(from_date=None):
    if from_date is None:
        return datetime.utcnow().replace(tzinfo=pytz.utc)

    dt = parser.parse(from_date)
    utc_formatted_time = dt.replace(tzinfo=pytz.utc)
    if dt.utcoffset() is not None:
        utc_formatted_time += dt.utcoffset()
    return utc_formatted_time


def string_to_utc_string(from_date):
    return utc_date_to_string(string_to_utc_date(from_date))


def json_serializer(obj):
    """JSON serializer for objects not serializable by default json code"""

    if isinstance(obj, (datetime, date)):
        return obj.isoformat()
    raise TypeError("Type %s not serializable" % type(obj))
