import logging
import logging.config
import sys

from izihawa_utils.exceptions import BaseError
from izihawa_utils.file import mkdir_p
from library.logging.formatters import (
    DefaultFormatter,
    DefaultHttpFormatter,
)
from library.logging.handlers import QueueHandler
from prometheus_client import Counter

error_counter = Counter('errors_total', 'counter for error.log')


def configure_logging(config, make_path=True):
    if config.get('application', {}).get('debug', False) or 'logging' not in config:
        logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
    else:
        if make_path:
            mkdir_p(config['log_path'])
        logging.config.dictConfig(config['logging'])


def error_log(e, level=logging.ERROR, **fields):
    level = getattr(e, 'level', level)
    if level == logging.ERROR:
        error_counter.inc()
    if isinstance(e, BaseError):
        e = e.as_internal_dict()
        e.update(fields)
    elif fields:
        e = {'error': repr(e), **fields}
    logging.getLogger('error').log(
        msg=e,
        level=level
    )


__all__ = [
    'DefaultFormatter', 'DefaultHttpFormatter',
    'QueueHandler', 'configure_logging', 'error_log',
]
