# app/config/path_conf.py
import os
import sys
from pathlib import Path

# ===================== 关键：检测打包环境 =====================
# PyInstaller 打包后会设置 sys.frozen 属性，sys._MEIPASS 是临时解压目录
is_packaged = getattr(sys, 'frozen', False)
MEIPASS_DIR = Path(sys._MEIPASS) if is_packaged else Path('.')

# ===================== 适配 BASE_DIR =====================
if is_packaged:
    # 打包后：BASE_DIR 指向可执行文件所在目录（而非临时目录，方便读取外部配置）
    BASE_DIR = Path(os.path.dirname(os.path.abspath(sys.executable)))
else:
    # 开发环境：沿用原逻辑（基于__file__推导项目根目录）
    BASE_DIR = Path(__file__).parent.parent.parent

# ===================== 原有路径定义（仅适配静态文件/配置路径） =====================
# alembic 迁移文件存放路径（打包后若需迁移，需手动复制到BASE_DIR）
ALEMBIC_VERSION_DIR = BASE_DIR / 'app' / 'alembic' / 'versions'

# 日志文件路径（打包后日志输出到可执行文件同级logs目录）
LOG_DIR = BASE_DIR / 'logs'

# 静态资源目录（优先级：1.可执行文件同级static 2.临时目录内static）
STATIC_DIR = BASE_DIR / 'static'
if is_packaged and not STATIC_DIR.exists():
    STATIC_DIR = MEIPASS_DIR / 'static'

# 上传/下载文件目录
UPLOAD_DIR = STATIC_DIR / 'upload'
DOWNLOAD_DIR = STATIC_DIR / 'download'

# 环境配置目录（核心：打包后读取可执行文件同级的env文件夹）
ENV_DIR = BASE_DIR / 'env'
# 兜底：若外部无env文件夹，读取打包嵌入的env（临时目录内）
if is_packaged and not ENV_DIR.exists():
    ENV_DIR = MEIPASS_DIR / 'env'

# 初始化脚本（打包后仅保留临时目录内的脚本，若需运行时修改需手动复制）
SCRIPT_DIR: Path = MEIPASS_DIR / 'app' / 'scripts' / 'data' if is_packaged else BASE_DIR / 'app' / 'scripts' / 'data'

# 模版文件配置（打包后从临时目录读取，静态模版无需外部修改）
TEMPLATE_DIR: Path = MEIPASS_DIR / 'app' / 'api' / 'v1' / 'module_generator' / 'gencode' / 'templates' if is_packaged else BASE_DIR / 'app' / 'api' / 'v1' / 'module_generator' / 'gencode' / 'templates'

# banner.txt 文件路径（优先级：1.外部BASE_DIR 2.临时目录）
BANNER_FILE = BASE_DIR / 'banner.txt' if (BASE_DIR / 'banner.txt').exists() else MEIPASS_DIR / 'banner.txt'

# ===================== 自动创建必要目录（避免运行时报错） =====================
for dir_path in [LOG_DIR, STATIC_DIR, UPLOAD_DIR, DOWNLOAD_DIR, ENV_DIR]:
    dir_path.mkdir(exist_ok=True, parents=True)