#! /usr/bin/env python
# -*- coding: utf-8 -*-
# vim:fenc=utf-8

import logging
from logging.handlers import RotatingFileHandler

import configs

COLORS = {
    'DEBUG': '\033[0m',    # 蓝色
    'INFO': '\033[32m',     # 绿色
    'WARNING': '\x1b[33;20m',  # 黄色
    'ERROR': '\033[91m',    # 红色
    'CRITICAL': '\033[95m', # 紫色
    'RESET': '\033[0m',     # 重置颜色
}

class ColoredFormatter(logging.Formatter):
    def format(self, record):
        # 获取原始日志消息
        message = super().format(record)
        # 根据日志等级添加颜色
        if record.levelname in COLORS:
            message = f"{COLORS[record.levelname]}{message}{COLORS['RESET']}"
        return message

def setup_root_logger(level=logging.DEBUG, logfile_name='service.log'):
    formatter = ColoredFormatter(
        '%(asctime)s - %(name)s %(funcName)s[%(lineno)d] - %(levelname)s - %(message)s'
    )
    console_handler = logging.StreamHandler()
    console_handler.setLevel(logging.DEBUG)
    console_handler.setFormatter(formatter)

    root_logger = logging.getLogger()
    root_logger.handlers.clear()
    root_logger.addHandler(console_handler)
    if configs.get_env() == 'prod':
        file_handler = RotatingFileHandler(
            f'/var/log/agent_service/{logfile_name}',
            maxBytes=64 * 1024 * 1024,
            backupCount=5,
            encoding='utf-8'
        )
        file_handler.setLevel(logging.DEBUG)
        file_handler.setFormatter(formatter)
        root_logger.addHandler(file_handler)

    agent_logger = logging.getLogger('agent')
    agent_logger.setLevel(level)

logger = logging.getLogger('agent')