#!/usr/bin/env python3
"""ドメイン層 services テスト用共通フィクスチャ

ProgressiveCheckManager 及び関連サービスのテストで使用する共通フィクスチャ
"""

import shutil
from pathlib import Path
from tempfile import TemporaryDirectory

import pytest


@pytest.fixture
def temp_project_root():
    """テスト用一時プロジェクトディレクトリ

    品質チェック関連テストで使用する一時的なプロジェクト構造を作成します。
    - manuscripts/ ディレクトリと sample manuscript file
    - check_tasks.yaml の設定ファイル
    - デフォルトプロジェクト設定（プロジェクト設定.yaml）
    """
    with TemporaryDirectory() as temp_dir:
        project_root = Path(temp_dir)

        # manuscripts ディレクトリ作成
        manuscripts_dir = project_root / "manuscripts"
        manuscripts_dir.mkdir(parents=True, exist_ok=True)

        # テスト用原稿ファイル作成
        test_manuscript = manuscripts_dir / "episode_001.md"
        test_manuscript.write_text(
            "テスト原稿内容です。これは品質チェック用のサンプルテキストです。",
            encoding="utf-8",
        )

        # 40_原稿 ディレクトリ（レガシー互換）を作成し同じ原稿を配置
        legacy_manuscripts_dir = project_root / "40_原稿"
        legacy_manuscripts_dir.mkdir(parents=True, exist_ok=True)
        shutil.copy2(test_manuscript, legacy_manuscripts_dir / "episode_001.md")

        # check_tasks.yaml をテスト環境にコピー
        config_dir = project_root / "src" / "noveler" / "infrastructure" / "config"
        config_dir.mkdir(parents=True, exist_ok=True)

        config_candidates = [
            Path(__file__).resolve().parents[4] / "src" / "noveler" / "infrastructure" / "config" / "check_tasks.yaml",
            Path("/mnt/c/Users/bamboocity/OneDrive/Documents/9_小説/00_ガイド/src/noveler/infrastructure/config/check_tasks.yaml"),
        ]

        for config_path in config_candidates:
            if config_path.exists():
                shutil.copy2(config_path, config_dir / "check_tasks.yaml")
                break

        # デフォルトプロジェクト設定作成
        project_config = project_root / "プロジェクト設定.yaml"
        default_config = "\n".join([
            "writing:",
            "  episode:",
            "    target_length:",
            "      min: 6000",
            "      max: 10000",
        ]) + "\n"
        project_config.write_text(default_config, encoding="utf-8")

        yield project_root
