"""路径工具：安全地把文件名解析到指定目录内，防止路径穿越。"""
import re
from pathlib import Path

from app.core.response import AppError


def safe_join(base: str | Path, name: str) -> Path:
    """把用户输入的文件名安全地解析到指定目录内，防止路径穿越。"""
    base = Path(base).resolve()
    path = (base / name).resolve()
    if not path.is_relative_to(base):
        raise AppError("非法路径", code=400, status_code=400)
    return path


def safe_filename(name: str) -> str:
    """把名称净化为安全文件名片段：空白→下划线，去掉路径/非法字符。"""
    name = re.sub(r"\s+", "_", name.strip())
    name = re.sub(r'[\\/:*?"<>|]', "_", name)
    return name
