#!/usr/bin/env python3
"""
批量合规审查脚本
遍历指定日期所有发布版本，执行合规检查，生成汇总报告
"""

import json
import re
from pathlib import Path
from datetime import datetime
import sys

PROJECT_ROOT = Path(__file__).parent.parent
sys.path.insert(0, str(PROJECT_ROOT))
from scripts.compliance_checker import check_article

# 配置
RELEASE_DIR = PROJECT_ROOT / "automation" / "data" / "releases"
TOPICS_FILE = PROJECT_ROOT / "automation" / "data" / "sustainability_topics.json"
TODAY = "2026-04-16"  # 可参数化

def load_topics():
    with open(TOPICS_FILE, 'r', encoding='utf-8') as f:
        return json.load(f)

def extract_topic_id(filename: str) -> str:
    """从文件名提取 topic ID，如 zhihu_A01_zhihu.html -> A01"""
    parts = filename.stem.split('_')
    if len(parts) >= 2:
        return parts[1]
    return None

def main():
    topics = load_topics()
    topics_by_id = {t['id']: t for t in topics}

    release_path = RELEASE_DIR / TODAY
    if not release_path.exists():
        print(f"错误：发布日期目录不存在 {release_path}")
        return

    html_files = list(release_path.rglob("*.html"))
    print(f"找到 {len(html_files)} 个HTML文件，开始合规审查...\n")

    results = []
    for html_file in html_files:
        platform = html_file.parent.name
        topic_id = extract_topic_id(html_file)
        topic_data = topics_by_id.get(topic_id) if topic_id else None

        # 读取HTML
        with open(html_file, 'r', encoding='utf-8') as f:
            html_content = f.read()

        # 执行合规检查
        result = check_article(html_content, platform, topic_data)
        result['file'] = str(html_file.relative_to(PROJECT_ROOT))
        result['platform'] = platform
        result['topic_id'] = topic_id
        result['topic_title'] = topic_data.get('title') if topic_data else "未知"
        results.append(result)

        status = "✅ PASS" if result['passed'] else "❌ FAIL"
        print(f"{status} {topic_id} {platform:12} {result['topic_title'][:30]:30} 问题数: {len(result['issues'])} 得分: {result['score']}")

    # 汇总报告
    passed = sum(1 for r in results if r['passed'])
    failed = len(results) - passed
    avg_score = sum(r['score'] for r in results) / len(results) if results else 0

    print(f"\n========== 合规审查汇总 ==========")
    print(f"总计: {len(results)} 篇")
    print(f"通过: {passed} 篇")
    print(f"失败: {failed} 篇")
    print(f"平均分: {avg_score:.1f}")

    # 保存详细报告
    report = {
        "date": TODAY,
        "summary": {
            "total": len(results),
            "passed": passed,
            "failed": failed,
            "average_score": avg_score
        },
        "details": results
    }
    report_file = PROJECT_ROOT / "automation" / "data" / "drafts" / TODAY / "compliance_summary.json"
    report_file.parent.mkdir(parents=True, exist_ok=True)
    with open(report_file, 'w', encoding='utf-8') as f:
        json.dump(report, f, ensure_ascii=False, indent=2)
    print(f"\n📁 详细报告已保存: {report_file}")

    # 列出失败项
    if failed > 0:
        print("\n⚠️ 需要修复的文章:")
        for r in results:
            if not r['passed']:
                print(f"  {r['file']}")
                for issue in r['issues'][:3]:  # 只显示前3个问题
                    print(f"    - {issue['type']}/{issue.get('category','')}: {issue.get('suggestion','')}")
                if len(r['issues']) > 3:
                    print(f"    ... 等共{len(r['issues'])}个问题")
    else:
        print("\n🎉 所有文章均通过合规审查！")

if __name__ == "__main__":
    main()
