# Review Report Template

审查报告模板。

## Template Structure

```markdown
# Code Review Report

## 审查概览

| 项目 | 值 |
|------|------|
| 目标路径 | `{{target_path}}` |
| 文件数量 | {{file_count}} |
| 代码行数 | {{total_lines}} |
| 主要语言 | {{language}} |
| 框架 | {{framework}} |
| 审查时间 | {{review_duration}} |

## 问题统计

| 严重程度 | 数量 |
|----------|------|
| 🔴 Critical | {{critical_count}} |
| 🟠 High | {{high_count}} |
| 🟡 Medium | {{medium_count}} |
| 🔵 Low | {{low_count}} |
| ⚪ Info | {{info_count}} |
| **总计** | **{{total_issues}}** |

### 按维度统计

| 维度 | 问题数 |
|------|--------|
| Correctness (正确性) | {{correctness_count}} |
| Security (安全性) | {{security_count}} |
| Performance (性能) | {{performance_count}} |
| Readability (可读性) | {{readability_count}} |
| Testing (测试) | {{testing_count}} |
| Architecture (架构) | {{architecture_count}} |

---

## 高风险区域

{{#if risk_areas}}
| 文件 | 原因 | 优先级 |
|------|------|--------|
{{#each risk_areas}}
| `{{this.file}}` | {{this.reason}} | {{this.priority}} |
{{/each}}
{{else}}
未发现明显的高风险区域。
{{/if}}

---

## 问题详情

{{#each dimensions}}
### {{this.name}}

{{#each this.findings}}
#### {{severity_emoji this.severity}} [{{this.id}}] {{this.category}}

- **严重程度**: {{this.severity}}
- **文件**: `{{this.file}}`{{#if this.line}}:{{this.line}}{{/if}}
- **描述**: {{this.description}}

{{#if this.code_snippet}}
```
{{this.code_snippet}}
```
{{/if}}

**建议**: {{this.recommendation}}

{{#if this.fix_example}}
**修复示例**:
```
{{this.fix_example}}
```
{{/if}}

---

{{/each}}
{{/each}}

## 审查建议

### 必须修复 (Must Fix)

{{must_fix_summary}}

### 建议改进 (Should Fix)

{{should_fix_summary}}

### 可选优化 (Nice to Have)

{{nice_to_have_summary}}

---

*报告生成时间: {{generated_at}}*
```

## Variable Definitions

| Variable | Type | Source |
|----------|------|--------|
| `{{target_path}}` | string | state.context.target_path |
| `{{file_count}}` | number | state.context.file_count |
| `{{total_lines}}` | number | state.context.total_lines |
| `{{language}}` | string | state.context.language |
| `{{framework}}` | string | state.context.framework |
| `{{review_duration}}` | string | Formatted duration |
| `{{critical_count}}` | number | Count of critical findings |
| `{{high_count}}` | number | Count of high findings |
| `{{medium_count}}` | number | Count of medium findings |
| `{{low_count}}` | number | Count of low findings |
| `{{info_count}}` | number | Count of info findings |
| `{{total_issues}}` | number | Total findings |
| `{{risk_areas}}` | array | state.scan_summary.risk_areas |
| `{{dimensions}}` | array | Grouped findings by dimension |
| `{{generated_at}}` | string | ISO timestamp |

## Helper Functions

```javascript
function severity_emoji(severity) {
  const emojis = {
    critical: '🔴',
    high: '🟠',
    medium: '🟡',
    low: '🔵',
    info: '⚪'
  };
  return emojis[severity] || '⚪';
}

function formatDuration(ms) {
  const minutes = Math.floor(ms / 60000);
  const seconds = Math.floor((ms % 60000) / 1000);
  return `${minutes}分${seconds}秒`;
}

function generateMustFixSummary(findings) {
  const critical = findings.filter(f => f.severity === 'critical');
  const high = findings.filter(f => f.severity === 'high');
  
  if (critical.length + high.length === 0) {
    return '未发现必须立即修复的问题。';
  }
  
  return `发现 ${critical.length} 个严重问题和 ${high.length} 个高优先级问题，建议在合并前修复。`;
}
```

## Usage Example

```javascript
const report = generateReport({
  context: state.context,
  summary: state.summary,
  findings: state.findings,
  scanSummary: state.scan_summary
});

Write(`${workDir}/review-report.md`, report);
```
