# -*- coding: utf-8 -*-
"""
paths.py — 路径常量集中管理

把原散落在 server.py 顶部的路径常量集中到此，避免各层各自重算 Path(__file__).parent
导致路径偏移。所有层统一 from utils.paths import SCRIPT_DIR, ... 取用。

路径锚定：utils/paths.py 位于 .../web/utils/paths.py
  - SCRIPT_DIR = Path(__file__).resolve().parent.parent  → .../web（与原 server.py 一致）
  - DATA_DIR   = SCRIPT_DIR.parent                        → 部署时即 /opt/troubleshoot
"""

import os
from pathlib import Path

# ============================================================
# 基础路径
# ============================================================

SCRIPT_DIR = Path(__file__).resolve().parent.parent  # .../web
DATA_DIR = SCRIPT_DIR.parent  # 部署时即 /opt/troubleshoot（web 上级目录）

# ============================================================
# 项目根目录（优先使用环境变量，否则自动检测）
# ============================================================

PROJECT_ROOT = os.environ.get('TROUBLESHOOT_ROOT')
if PROJECT_ROOT:
    PROJECT_ROOT = Path(PROJECT_ROOT)
elif (DATA_DIR / "Docs" / "PRD" / "问题知识库").exists():
    # 开发环境：项目仓库中
    PROJECT_ROOT = DATA_DIR  # code/ 的上级即项目根
    # 但 DATA_DIR 指向 code/，需要再往上找。
    # 实际项目根：从 code/web/ 往上 4 级 → 仓库根
    for _ in range(4):
        if (PROJECT_ROOT / "CLAUDE.md").exists():
            break
        PROJECT_ROOT = PROJECT_ROOT.parent
else:
    # 部署环境：PROJECT_ROOT 即 DATA_DIR（/opt/troubleshoot）
    PROJECT_ROOT = DATA_DIR

# ============================================================
# 派生路径
# ============================================================

# 问题记录输出目录
RECORDS_DIR = PROJECT_ROOT / "Docs" / "PRD" / "问题知识库" / "问题记录"
if not RECORDS_DIR.exists():
    # 部署环境降级：使用 DATA_DIR 下的 问题记录/
    RECORDS_DIR = DATA_DIR / "问题记录"

# 系统 API 配置文件
CONFIG_FILE = SCRIPT_DIR / "config.json"

# 审计日志文件
AUDIT_LOG_FILE = SCRIPT_DIR / "audit.log"

# 向量索引文件名（与搜索索引同目录部署）
VECTOR_INDEX_FILENAME = "搜索向量.json"

# 搜索索引目录（优先使用环境变量，否则自动检测）
# 容器化部署时 TROUBLESHOOT_ROOT=/app，索引文件在 /app/data/ 下
SEARCH_INDEX_DIR = os.environ.get('SEARCH_INDEX_DIR')
if SEARCH_INDEX_DIR:
    SEARCH_INDEX_DIR = Path(SEARCH_INDEX_DIR)
elif (DATA_DIR / "data" / "搜索索引.json").exists():
    # 容器化部署：/app/data/搜索索引.json
    SEARCH_INDEX_DIR = DATA_DIR / "data"
elif (DATA_DIR / "搜索索引.json").exists():
    # 裸机部署：/opt/troubleshoot/搜索索引.json
    SEARCH_INDEX_DIR = DATA_DIR
else:
    # 默认：与 DATA_DIR 同级
    SEARCH_INDEX_DIR = DATA_DIR

# ============================================================
# 服务管理数据目录
# ============================================================

SERVICE_MANAGE_DATA_DIR = DATA_DIR / "service_manage_data"
SERVICE_MANAGE_DATA_DIR.mkdir(parents=True, exist_ok=True)

MANAGE_TARGETS_FILE = SERVICE_MANAGE_DATA_DIR / "targets.json"
MANAGE_PROJECTS_FILE = SERVICE_MANAGE_DATA_DIR / "projects.json"
MANAGE_UPLOADS_DIR = SERVICE_MANAGE_DATA_DIR / "uploads"
MANAGE_UPLOADS_DIR.mkdir(parents=True, exist_ok=True)
