import logging
import os
import inspect
from datetime import datetime
from pathlib import Path

# MySQL 配置
db_config = {
    'host': '172.18.0.3',
    'user': 'root',
    'password': 'mysqlpw',
    'database': 'stockdb'
}

log_dir_prefix = '../log'

# 获取log目录
def get_log_directory():
    """
    获取项目根目录下的 log 目录路径。如果 log 目录不存在，则自动创建。
    """
    # 获取当前文件所在目录
    current_dir = Path(__file__).resolve().parent

    # 找到项目根目录，假设项目根目录下有一个 log 文件夹
    project_root = current_dir
    while project_root.name != 'src' and project_root != project_root.parent:
        project_root = project_root.parent
    project_root = project_root.parent  # 回到项目根目录
    
    # 确保 log 目录存在
    log_dir = project_root / 'log'
    log_dir.mkdir(parents=True, exist_ok=True)
    
    return log_dir

def get_caller_filename():
    # 获取调用 setup_logging 的脚本文件名
    caller_frame = inspect.stack()[2]
    caller_filename = os.path.splitext(os.path.basename(caller_frame.filename))[0]
    return caller_filename

# 设置日志配置
def setup_logging(log_filename=None):
    # 如果未传入 log_filename，则使用当前脚本名称作为日志文件名
    if log_filename is None:
        caller_filename = get_caller_filename()
        common_log_dir = get_log_directory()
        current_date = datetime.now().strftime('%Y%m%d')
        # 拼接 log 文件名，将日期加在扩展名前
        log_filename = f'{common_log_dir}/{caller_filename}_{current_date}.log'
    
    logging.basicConfig(level=logging.INFO, format='%(asctime)s %(levelname)s [%(filename)s:%(lineno)d] (%(funcName)s) - %(message)s',
                        handlers=[
                            logging.FileHandler(log_filename),
                            logging.StreamHandler()
                        ])