#!/usr/bin/env python3
import pytz
import requests
import hashlib
import logging

from typing import Tuple
from datetime import datetime
from dateutil import parser
from io import BytesIO
from PIL import Image
from .config import config

tz = pytz.timezone(config.get("timezone", "utc"))


def get_logger(name, level=None) -> logging.Logger:
    logging.basicConfig(format='[%(name)s] [%(levelname)s] %(message)s')
    logger = logging.getLogger(name)
    if level is None:
        level = logging.DEBUG if config.get("debug", False) else logging.INFO
    logger.setLevel(level)
    return logger


def get_now():
    return datetime.now(tz=tz)


def get_now_date_time():
    now = get_now()
    return now.strftime("%Y-%m-%d"), now.strftime("%H:%M:%S")


def timestamp_date_time(ts):
    d = datetime.fromtimestamp(ts, tz=tz)
    return d.strftime("%Y-%m-%d"), d.strftime("%H:%M:%S")


def string_date_time(dstr):
    d = parser.parse(dstr).astimezone(tz)
    return d.strftime("%Y-%m-%d"), d.strftime("%H:%M:%S")


def webp2png(webp_data):
    with BytesIO(webp_data) as fd:
        im = Image.open(fd)

    with BytesIO() as out:
        im.save(out, "PNG")
        out.seek(0)
        return out.read()


def md5(data):
    m = hashlib.md5()
    m.update(data)
    return m.hexdigest()


def download_file(url) -> Tuple[bytes, str]:
    logger = get_logger(__name__)
    try:
        r = requests.get(url, timeout=10)
    except requests.exceptions.Timeout:
        logger.error("Timeout downloading {}".format(url))
        return None, None
    except:
        logger.exception("Failed to download {}".format(url))
        return None, None

    return (r.content, r.headers.get('content-type'))


def plural(number: int, origin: str, plurals: str=None) -> str:
    # need lots of check, or not?
    if plurals is None:
        plurals = origin + "s"

    if number != 1:
        return "{} {}".format(number, plurals)
    else:
        return "{} {}".format(number, origin)

# vim: ts=4 sw=4 sts=4 expandtab