
import os
import glob


def get_project_root():
    """获取项目根目录
    
    Returns:
        项目根目录的绝对路径
    """
    current_file = os.path.abspath(__file__)
    src_dir = os.path.dirname(current_file)
    project_root = os.path.dirname(src_dir)
    return project_root


def find_latest_model(project_dir='runs/detect', name='my_model'):
    """查找最新的最佳模型
    
    Args:
        project_dir: 项目目录
        name: 实验名称
    
    Returns:
        最新的 best.pt 路径，如果找不到则返回 None
    """
    project_root = get_project_root()
    
    # 尝试在多个可能的位置查找
    possible_paths = [
        # 1. 默认位置
        os.path.join(project_root, project_dir, name, 'weights', 'best.pt'),
        # 2. 查找所有可能的 best.pt
        *glob.glob(os.path.join(project_root, 'runs', '**', 'best.pt'), recursive=True)
    ]
    
    # 过滤存在的文件
    existing_models = [p for p in possible_paths if os.path.exists(p)]
    
    if not existing_models:
        return None
    
    # 去重，保持优先级（同一文件可能出现在多个路径中）
    unique_models = list(dict.fromkeys(existing_models))
    
    # 返回最新修改的那个
    unique_models.sort(key=lambda x: os.path.getmtime(x), reverse=True)
    return unique_models[0]
