# -*- coding: utf-8 -*-
"""
@file : custom_log.py
@author: hsj100
@license: DAOOLDNS
@brief: 
@section Modify History
- 2024-05-08 오후 2:33 hsj100 base
"""

# import ai_config
import datetime
import os
import logging

from custom_logger.colorlog.colorlog import ColoredFormatter

custom_logger = None
_now = datetime.datetime.now()

LOGGER_NAME = 'fermat'
LOGGER_LEVEL = logging.INFO
LOGGER_DIR = "log/"
LOGGER_FILE_NAME = f'{_now.strftime("%Y-%m-%d %H_%M_%S")}_{LOGGER_NAME}.log'

__LOGGER_FILE_PATH = LOGGER_DIR + LOGGER_FILE_NAME
# __LOGGER_FILE_PATH = None


def logger_init(logger,
                level=logging.DEBUG,
                # color_log_format = "%(log_color)s%(levelname)s [%(asctime)s] [%(module)s::%(funcName)s()] %(message)s",
                color_log_format='%(log_color)s%(levelname)s: [%(module)s::%(funcName)s()] %(message)s',
                file_log_path=None,
                file_log_format='[%(levelname)s][%(asctime)s][%(module)s::%(funcName)s()] %(message)s'):
    """
    로그 정보 초기화
    :param logger: 로거 객체
    :param level: 스트림 로그 출력 레벨 (지정 레벨 이상의 로그 정보만 출력됨)
    :param color_log_format: 스트림 로그 출력 형식
    :param file_log_path: 파일 로그 저장 경로 (경로 지정이 없을 경우에는 파일로그는 기록되지 않음)
    :param file_log_format: 파일 로그 출력 형식
    :return:
    """

    # stream handler
    color_stream_handler = logging.StreamHandler()
    color_stream_handler.setLevel(level)
    formatter = ColoredFormatter(
        color_log_format,
        datefmt=None,
        reset=True,
        log_colors={
            'DEBUG': 'cyan',
            'INFO': 'white,bold',
            'INFOV': 'cyan,bold',
            'WARNING': 'yellow',
            'ERROR': 'red,bold',
            'CRITICAL': 'red,bg_white',
        },
        secondary_log_colors={},
        style='%'
    )
    color_stream_handler.setFormatter(formatter)

    logger.setLevel(level)
    logger.handlers = []  # No duplicated handlers
    logger.propagate = False  # workaround for duplicated logs in ipython
    logger.addHandler(color_stream_handler)

    logging.addLevelName(logging.INFO + 1, 'INFOV')

    # file handler
    if file_log_path:
        file_handler = logging.FileHandler(file_log_path)
        formatter = logging.Formatter(file_log_format)
        file_handler.setFormatter(formatter)
        logger.addHandler(file_handler)


# def _infov(self, msg, *args, **kwargs):
#     self.log(logging.INFO + 1, msg, *args, **kwargs)


def get_logger():
    """
    로거 객체 반환
    로거 객체가 없을 경우에는 로그 초기화를 진행하고 생성된 로그 객체를 반환함
    :return: 로그 객체
    """

    if not custom_logger.handlers:
        logger_init(custom_logger)

    return custom_logger


# if custom_logger is None:
#     custom_logger = logging.getLogger(LOGGER_NAME)
    
#     if not os.path.exists(LOGGER_DIR):
#         os.makedirs(LOGGER_DIR)

#     if not __LOGGER_FILE_PATH:
#         logger_init(custom_logger, level=LOGGER_LEVEL)
#     else:
#         if not os.path.exists(LOGGER_DIR):
#             os.makedirs(LOGGER_DIR)
#         logger_init(custom_logger, level=LOGGER_LEVEL, file_log_path=__LOGGER_FILE_PATH)

def test():
    custom_logger.info('Module: custom_log.py')


if __name__ == '__main__':
    test()