# -*- coding: utf-8 -*-
"""
P1-2 单元测试公共配置（conftest.py）

职责：
  1. 把 skill/code/web/ 加入 sys.path，让 tests/ 下测试可直接 import safety_filter 等模块
  2. autouse fixture：把 search_engine.SEARCH_INDEX_PATHS 指向仓库内 deploy/搜索索引.json 副本，
     避免 SearchEngine() 在本地开发环境抛 FileNotFoundError（生产环境靠 /opt/troubleshoot/搜索索引.json 加载）

参考：HANDOFF.md 坑 6 —— 永远以实际代码为准；本文件不复制大索引、不污染源码。
"""

import sys
from pathlib import Path

# ============================================================
# 路径定位
# ============================================================
# conftest.py 位于 skill/code/tests/conftest.py
TESTS_DIR = Path(__file__).resolve().parent          # .../skill/code/tests
WEB_DIR = TESTS_DIR.parent / "web"                   # .../skill/code/web
REPO_ROOT = TESTS_DIR.parents[2]                     # .../troubleshoot-ai-assistant（仓库根）
INDEX_FILE = REPO_ROOT / "deploy" / "搜索索引.json"   # 仓库内现成索引副本（357 条）

# 把 web/ 加入 sys.path（置顶，优先于其它路径）
if str(WEB_DIR) not in sys.path:
    sys.path.insert(0, str(WEB_DIR))

import pytest  # noqa: E402  (sys.path 已就位后才 import)


@pytest.fixture(autouse=True)
def _patch_search_index(monkeypatch):
    """
    autouse：每个测试前，把 search_engine 的索引查找路径替换为仓库内副本。

    作用对象：search_engine.SEARCH_INDEX_PATHS（模块级常量，find_search_index() 内部遍历它）。
    对不涉及 search_engine 的测试（safety_filter / cache_manager）无副作用。
    """
    import search_engine
    monkeypatch.setattr(search_engine, "SEARCH_INDEX_PATHS", [INDEX_FILE])


@pytest.fixture
def index_file():
    """返回仓库内索引副本路径，供测试断言可用性"""
    return INDEX_FILE
