# -*- coding: utf-8 -*-
import datetime
from redis import Redis
from rq import Queue

from tracim_backend.config import CFG

DATETIME_FORMAT = '%Y-%m-%dT%H:%M:%SZ'
DEFAULT_WEBDAV_CONFIG_FILE = "wsgidav.conf"
DEFAULT_TRACIM_CONFIG_FILE = "development.ini"


def get_redis_connection(config: CFG) -> Redis:
    """
    :param config: current app_config
    :return: redis connection
    """
    return Redis(
        host=config.EMAIL_SENDER_REDIS_HOST,
        port=config.EMAIL_SENDER_REDIS_PORT,
        db=config.EMAIL_SENDER_REDIS_DB,
    )


def get_rq_queue(redis_connection: Redis, queue_name: str ='default') -> Queue:
    """
    :param queue_name: name of queue
    :return: wanted queue
    """

    return Queue(name=queue_name, connection=redis_connection)


def cmp_to_key(mycmp):
    """
    List sort related function

    Convert a cmp= function into a key= function
    """
    class K(object):
        def __init__(self, obj, *args):
            self.obj = obj

        def __lt__(self, other):
            return mycmp(self.obj, other.obj) < 0

        def __gt__(self, other):
            return mycmp(self.obj, other.obj) > 0

        def __eq__(self, other):
            return mycmp(self.obj, other.obj) == 0

        def __le__(self, other):
            return mycmp(self.obj, other.obj) <= 0

        def __ge__(self, other):
            return mycmp(self.obj, other.obj) >= 0

        def __ne__(self, other):
            return mycmp(self.obj, other.obj) != 0

    return K


def current_date_for_filename() -> str:
    """
    ISO8601 current date, adapted to be used in filename (for
    webdav feature for example), with trouble-free characters.
    :return: current date as string like "2018-03-19T15.49.27.246592"
    """
    # INFO - G.M - 19-03-2018 - As ':' is in transform_to_bdd method in
    # webdav utils, it may cause trouble. So, it should be replaced to
    # a character which will not change in bdd.
    return datetime.datetime.now().isoformat().replace(':', '.')
