import logging
import os
from ceph_volume import terminal
from ceph_volume import conf

BASE_FORMAT = "[%(name)s][%(levelname)-6s] %(message)s"
FILE_FORMAT = "[%(asctime)s]" + BASE_FORMAT


def setup(name='ceph-volume.log', log_path=None, log_level=None):
    log_path = log_path or conf.log_path
    # if a non-root user calls help or other no-sudo-required command the
    # logger will fail to write to /var/lib/ceph/ so this /tmp/ path is used as
    # a fallback
    tmp_log_file = os.path.join('/tmp/', name)
    root_logger = logging.getLogger()
    # The default path is where all ceph log files are, and will get rotated by
    # Ceph's logrotate rules.
    log_level = log_level or "DEBUG"
    log_level = getattr(logging, log_level.upper())
    root_logger.setLevel(log_level)

    try:
        fh = logging.FileHandler(log_path)
    except (OSError, IOError) as err:
        terminal.warning("Falling back to /tmp/ for logging. Can't use %s" % log_path)
        terminal.warning(str(err))
        conf.log_path = tmp_log_file
        fh = logging.FileHandler(tmp_log_file)

    fh.setLevel(log_level)
    fh.setFormatter(logging.Formatter(FILE_FORMAT))

    root_logger.addHandler(fh)


def setup_console():
    # TODO: At some point ceph-volume should stop using the custom logger
    # interface that exists in terminal.py and use the logging module to
    # produce output for the terminal
    # Console Logger
    sh = logging.StreamHandler()
    sh.setFormatter(logging.Formatter('[terminal] %(message)s'))
    sh.setLevel(logging.DEBUG)

    terminal_logger = logging.getLogger('terminal')

    # allow all levels at root_logger, handlers control individual levels
    terminal_logger.addHandler(sh)
