#!/usr/bin/env python3
"""
Report Generator - 报告生成器

生成增强过程的详细报告
注意：这是一个轻量级实现，基本报告功能已集成在 EnhancementResult 中
"""

from dataclasses import dataclass
from typing import List, Dict, Optional
from datetime import datetime


@dataclass
class EnhancementReport:
    """增强报告数据结构"""
    document_type: str
    document_path: str
    initial_score: float
    final_score: float
    improvement: float
    iterations: int
    stopping_reason: str
    improvements_applied: List[Dict]
    timestamp: str
    gate_passed: Optional[bool] = None
    gate_threshold: Optional[float] = None


class ReportGenerator:
    """
    报告生成器
    
    生成 Markdown 格式的增强报告和质量摘要
    """
    
    def generate_enhancement_report(self, report_data: EnhancementReport) -> str:
        """
        生成增强报告
        
        Args:
            report_data: 报告数据
        
        Returns:
            Markdown 格式的报告
        """
        lines = []
        
        # 标题
        lines.append(f"# Enhancement Report: {report_data.document_type.upper()}")
        lines.append(f"\n**Generated**: {report_data.timestamp}")
        lines.append(f"**Document**: `{report_data.document_path}`\n")
        lines.append("---\n")
        
        # 摘要
        lines.append("## Summary\n")
        lines.append(f"- **Initial Score**: {report_data.initial_score:.2f}/10")
        lines.append(f"- **Final Score**: {report_data.final_score:.2f}/10")
        lines.append(f"- **Improvement**: +{report_data.improvement:.2f}")
        lines.append(f"- **Iterations**: {report_data.iterations}")
        lines.append(f"- **Stopping Reason**: {report_data.stopping_reason}\n")
        
        # 质量门结果
        if report_data.gate_passed is not None:
            lines.append("## Quality Gate\n")
            status = "✓ PASSED" if report_data.gate_passed else "✗ FAILED"
            lines.append(f"- **Status**: {status}")
            lines.append(f"- **Threshold**: {report_data.gate_threshold}/10")
            lines.append(f"- **Final Score**: {report_data.final_score:.2f}/10\n")
        
        # 改进详情
        if report_data.improvements_applied:
            lines.append("## Improvements Applied\n")
            for i, imp in enumerate(report_data.improvements_applied, 1):
                lines.append(f"{i}. **{imp.get('type', 'Unknown')}**")
                lines.append(f"   - Section: {imp.get('section', 'N/A')}")
                lines.append(f"   - Priority: {imp.get('priority', 'N/A')}")
                if imp.get('description'):
                    lines.append(f"   - Description: {imp['description']}")
                lines.append("")
        
        lines.append("---\n")
        lines.append(f"*Report generated by Ultrawork Enhancement System*\n")
        
        return '\n'.join(lines)
    
    def generate_quality_summary(self, reports: List[EnhancementReport]) -> str:
        """
        生成质量摘要（多个文档）
        
        Args:
            reports: 报告列表
        
        Returns:
            Markdown 格式的摘要
        """
        lines = []
        
        # 标题
        lines.append("# Quality Summary\n")
        lines.append(f"**Generated**: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
        lines.append(f"**Documents**: {len(reports)}\n")
        lines.append("---\n")
        
        # 总体统计
        total_improvement = sum(r.improvement for r in reports)
        avg_iterations = sum(r.iterations for r in reports) / len(reports) if reports else 0
        passed_gates = sum(1 for r in reports if r.gate_passed)
        
        lines.append("## Overall Statistics\n")
        lines.append(f"- **Total Improvement**: +{total_improvement:.2f}")
        lines.append(f"- **Average Iterations**: {avg_iterations:.1f}")
        if any(r.gate_passed is not None for r in reports):
            lines.append(f"- **Quality Gates Passed**: {passed_gates}/{len(reports)}\n")
        else:
            lines.append("")
        
        # 各文档详情
        lines.append("## Document Details\n")
        for report in reports:
            lines.append(f"### {report.document_type.upper()}\n")
            lines.append(f"- **Path**: `{report.document_path}`")
            lines.append(f"- **Score**: {report.initial_score:.2f} → {report.final_score:.2f} (+{report.improvement:.2f})")
            lines.append(f"- **Iterations**: {report.iterations}")
            
            if report.gate_passed is not None:
                status = "✓ PASSED" if report.gate_passed else "✗ FAILED"
                lines.append(f"- **Quality Gate**: {status}")
            
            lines.append("")
        
        lines.append("---\n")
        lines.append(f"*Summary generated by Ultrawork Enhancement System*\n")
        
        return '\n'.join(lines)
    
    def save_report(self, report: str, output_path: str):
        """
        保存报告到文件
        
        Args:
            report: 报告内容
            output_path: 输出路径
        """
        from pathlib import Path
        
        Path(output_path).parent.mkdir(parents=True, exist_ok=True)
        
        with open(output_path, 'w', encoding='utf-8') as f:
            f.write(report)


# 注意：基本报告功能已集成在 ultrawork_enhancer_v3.py 的 EnhancementResult 中
# 本类提供更详细的 Markdown 格式报告生成，可选使用
