"""测试 - 项目初始化功能"""

import json
import sys
import tempfile
from pathlib import Path
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))

from initializer import ProjectInitializer


def test_basic_initialization():
    """测试基础初始化功能"""
    with tempfile.TemporaryDirectory() as tmpdir:
        init = ProjectInitializer("test-proj", tmpdir)
        result = init.initialize()

        assert result["success"] is True, f"初始化应成功: {result['errors']}"
        assert result["dirs_created"] == 4, f"应创建4个目录: {result['dirs_created']}"
        assert result["files_created"] == 6, f"应创建6个文件: {result['files_created']}"

        # 验证关键文件存在
        assert Path(tmpdir, "src", "main.py").exists()
        assert Path(tmpdir, "tests", "test_main.py").exists()
        assert Path(tmpdir, "docs", "README.md").exists()
        assert Path(tmpdir, "config", "settings.json").exists()
        assert Path(tmpdir, "init_report.json").exists()

        # 验证报告内容
        with open(Path(tmpdir, "init_report.json")) as f:
            report = json.load(f)
        assert report["project"] == "test-proj"
        assert report["success"] is True

    print("✓ test_basic_initialization: 通过")


def test_existing_directory():
    """测试目录已存在时的幂等性"""
    with tempfile.TemporaryDirectory() as tmpdir:
        # 预先创建部分目录和文件
        Path(tmpdir, "src").mkdir()
        Path(tmpdir, "src", "main.py").touch()

        init = ProjectInitializer("idempotent", tmpdir)
        result = init.initialize()

        assert result["success"] is True
        # 已存在的目录和文件不应报错（幂等）

    print("✓ test_existing_directory: 通过")


def test_report_content():
    """测试报告包含完整元数据"""
    with tempfile.TemporaryDirectory() as tmpdir:
        init = ProjectInitializer("report-test", tmpdir)
        result = init.initialize()

        assert "started_at" in result
        assert "completed_at" in result
        assert "report_path" in result
        assert Path(result["report_path"]).exists()

    print("✓ test_report_content: 通过")


if __name__ == "__main__":
    test_basic_initialization()
    test_existing_directory()
    test_report_content()
    print("\n全部测试通过 ✓")
