from __future__ import absolute_import, division, unicode_literals

import logging

from .stream import TCPStatsClient, UnixSocketStatsClient  # noqa
from .udp import StatsClient  # noqa

HOST = 'localhost'
PORT = 8125
IPV6 = False
PREFIX = None
MAXUDPSIZE = 512

log = logging.getLogger('rhodecode.statsd')


def statsd_config(config, prefix='statsd.'):
    _config = {}
    for key in config.keys():
        if key.startswith(prefix):
            _config[key[len(prefix):]] = config[key]
    return _config


def client_from_config(configuration, prefix='statsd.', **kwargs):
    from pyramid.settings import asbool

    _config = statsd_config(configuration, prefix)
    statsd_enabled = asbool(_config.pop('enabled', False))
    if not statsd_enabled:
        log.debug('statsd client not enabled by statsd.enabled =  flag, skipping...')
        return

    host = _config.pop('statsd_host', HOST)
    port = _config.pop('statsd_port', PORT)
    prefix = _config.pop('statsd_prefix', PREFIX)
    maxudpsize = _config.pop('statsd_maxudpsize', MAXUDPSIZE)
    ipv6 = asbool(_config.pop('statsd_ipv6', IPV6))
    log.debug('configured statsd client %s:%s', host, port)

    return StatsClient(
        host=host, port=port, prefix=prefix, maxudpsize=maxudpsize, ipv6=ipv6)


def get_statsd_client(request):
    return client_from_config(request.registry.settings)