#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
海外中国投资项目分析简报 - Word 文档生成脚本
"""

from docx import Document
from docx.shared import Pt, Cm, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.style import WD_STYLE_TYPE
from docx.oxml.ns import qn
from datetime import datetime
import sys

def set_cell_border(cell, **kwargs):
    """设置单元格边框"""
    tc = cell._tc
    tcPr = tc.get_or_add_tcPr()
    
    for edge in ('top', 'left', 'bottom', 'right'):
        edge_data = kwargs.get(edge)
        if edge_data:
            tag = 'w:{}'.format(edge)
            element = tcPr.find(qn(tag))
            if element is None:
                element = tcPr.makeelement(qn(tag))
                tcPr.append(element)
            
            for key in edge_data:
                element.set(qn('w:{}'.format(key)), str(edge_data[key]))


def generate_word_report(markdown_path, output_path):
    """从 Markdown 生成 Word 文档"""
    
    doc = Document()
    
    # 设置页面
    section = doc.sections[0]
    section.page_width = Cm(21)
    section.page_height = Cm(29.7)
    section.top_margin = Cm(3.7)
    section.bottom_margin = Cm(3.5)
    section.left_margin = Cm(2.8)
    section.right_margin = Cm(2.6)
    
    # 标题样式
    title = doc.add_heading('海外中国投资项目分析简报', 0)
    title.alignment = WD_ALIGN_PARAGRAPH.CENTER
    title_run = title.runs[0]
    title_run.font.name = '方正小标宋简体'
    title_run.font.size = Pt(22)
    title_run.font.bold = True
    
    # 基本信息
    info = [
        ('期号：', '2026 年第 082 期'),
        ('生成时间：', '2026-03-23 19:30'),
        ('数据时段：', '2026-03-20 至 2026-03-23'),
        ('密级：', '内部参考'),
    ]
    
    for label, value in info:
        p = doc.add_paragraph()
        run_label = p.add_run(label)
        run_label.font.bold = True
        run_label.font.name = '仿宋_GB2312'
        run_label.font.size = Pt(16)
        run_value = p.add_run(value)
        run_value.font.name = '仿宋_GB2312'
        run_value.font.size = Pt(16)
    
    doc.add_paragraph('─' * 50)
    
    # 一、项目概况
    doc.add_heading('一、项目概况', level=1)
    doc.add_paragraph('本期监测覆盖以下 4 个核心项目：')
    
    # 项目表格
    table = doc.add_table(rows=1, cols=7)
    table.style = 'Table Grid'
    
    # 表头
    headers = ['序号', '项目名称', '所在国/地区', '项目类型', '投资规模', '建设周期', '当前状态']
    header_cells = table.rows[0].cells
    for i, h in enumerate(headers):
        header_cells[i].text = h
        header_cells[i].paragraphs[0].runs[0].font.bold = True
        header_cells[i].paragraphs[0].runs[0].font.name = '黑体'
        header_cells[i].paragraphs[0].runs[0].font.size = Pt(16)
        header_cells[i].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
    
    # 数据
    projects = [
        ['1', '尼贝石油管道', '尼日尔 - 贝宁', '能源基础设施', '37 亿美元', '2023-2026', '施工后期'],
        ['2', '莱比塘铜矿', '缅甸', '矿产资源开发', '10 亿美元', '2013-持续', '运营中'],
        ['3', '德崇扶南运河', '柬埔寨', '交通基础设施', '17 亿美元', '2026-2028', '已开工'],
        ['4', '中缅石油管道', '缅甸 - 中国', '能源基础设施', '25 亿美元', '2013-持续', '运营中'],
    ]
    
    for p in projects:
        row = table.add_row()
        for i, cell in enumerate(row.cells):
            cell.text = p[i]
            cell.paragraphs[0].runs[0].font.name = '仿宋_GB2312'
            cell.paragraphs[0].runs[0].font.size = Pt(16)
            cell.paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER
    
    # 采集统计
    stats = [
        ('本期采集：', '84 条'),
        ('有效信息：', '23 条'),
        ('高危信息：', '1 条'),
        ('中危信息：', '3 条'),
    ]
    
    for label, value in stats:
        p = doc.add_paragraph()
        run_label = p.add_run(label)
        run_label.font.bold = True
        run_label.font.name = '仿宋_GB2312'
        run_label.font.size = Pt(16)
        run_value = p.add_run(value)
        run_value.font.name = '仿宋_GB2312'
        run_value.font.size = Pt(16)
    
    # 二、项目的开发风险分析
    doc.add_heading('二、项目的开发风险分析', level=1)
    
    # 政治风险
    doc.add_heading('（一）政治风险', level=2)
    
    doc.add_paragraph('1. 大选临近或成为政治表演的舞台', style='List Number')
    p = doc.add_paragraph()
    p.add_run('尼日尔：').bold = True
    p.add_run('军政府 2023 年政变上台，原定选举时间表未明确；欧盟议会通过决议要求释放前总统巴祖姆')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    p = doc.add_paragraph()
    p.add_run('缅甸：').bold = True
    p.add_run('2023 年政变后军政府执政，反对派组建民族团结政府')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    p = doc.add_paragraph()
    p.add_run('柬埔寨：').bold = True
    p.add_run('2023 年大选已完成，人民党继续执政，下次大选 2028 年')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    doc.add_paragraph('2. 执政党内部对项目的态度褒贬不一', style='List Number')
    p = doc.add_paragraph()
    p.add_run('尼日尔：').bold = True
    p.add_run('军政府高层一致支持，将项目定位为"战略资产"')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    p = doc.add_paragraph()
    p.add_run('柬埔寨：').bold = True
    p.add_run('政府高层一致支持，洪玛奈首相出席德崇扶南运河奠基仪式')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    doc.add_paragraph('3. 反对党引导民意抹黑项目的积极意义', style='List Number')
    p = doc.add_paragraph()
    p.add_run('缅甸：').bold = True
    p.add_run('全国民主联盟（NLD）批评莱比塘铜矿股权分配不公，声称资源利益未能充分惠及当地民众')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    # 社会风险
    doc.add_heading('（二）社会风险', level=2)
    
    doc.add_paragraph('1. 非法罢工运动影响项目进展', style='List Number')
    p = doc.add_paragraph()
    p.add_run('本期监测：').bold = True
    p.add_run('未发现大规模罢工事件')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    doc.add_paragraph('2. 附近社区反华情绪较为浓烈', style='List Number')
    p = doc.add_paragraph()
    p.add_run('缅甸（莱比塘）：').bold = True
    p.add_run('历史遗留反华情绪，经多年努力有所缓解；环保团体持续关注项目环境影响')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    doc.add_paragraph('3. 资源民族主义在 NMBY 有升温趋势', style='List Number')
    p = doc.add_paragraph()
    p.add_run('缅甸：').bold = True
    p.add_run('部分民间组织呼吁提高资源收益本地化比例')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    # 生态风险
    doc.add_heading('（三）生态风险', level=2)
    
    doc.add_paragraph('1. 生态事故削弱当地居民对项目的认可', style='List Number')
    p = doc.add_paragraph()
    p.add_run('本期监测：').bold = True
    p.add_run('未发生生态事故')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    p = doc.add_paragraph()
    p.add_run('莱比塘铜矿：').bold = True
    p.add_run('环保整改措施获缅甸环保部认可，废水处理和植被恢复达国际标准')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    doc.add_paragraph('2. 附近的生态变化或会放大项目的质疑声', style='List Number')
    p = doc.add_paragraph()
    p.add_run('柬埔寨（德崇扶南运河）：').bold = True
    p.add_run('环保组织"地球之友"呼吁加强环评，关注对湄公河生态系统的影响')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    # 三、项目周边的安全环境分析
    doc.add_heading('三、项目周边的安全环境分析', level=1)
    
    doc.add_heading('（一）恐怖袭击风险', level=2)
    table = doc.add_table(rows=1, cols=4)
    table.style = 'Table Grid'
    headers = ['区域', '风险等级', '主要威胁', '活跃组织']
    for i, h in enumerate(headers):
        table.rows[0].cells[i].text = h
        table.rows[0].cells[i].paragraphs[0].runs[0].font.bold = True
    
    risks = [
        ['西非（尼贝）', '中等', '伊斯兰极端主义', '伊斯兰马格里布基地组织'],
        ['缅甸', '低', '地方武装', '多支民族武装'],
        ['柬埔寨', '低', '无显著威胁', '-'],
    ]
    for r in risks:
        row = table.add_row()
        for i, cell in enumerate(row.cells):
            cell.text = r[i]
    
    doc.add_heading('（二）公共安全风险', level=2)
    table = doc.add_table(rows=1, cols=4)
    table.style = 'Table Grid'
    headers = ['国家', '治安状况', '针对中国公民', '建议措施']
    for i, h in enumerate(headers):
        table.rows[0].cells[i].text = h
        table.rows[0].cells[i].paragraphs[0].runs[0].font.bold = True
    
    risks = [
        ['尼日尔', '中等', '偶有绑架', '减少外出，配备安保'],
        ['贝宁', '较好', '较少', '常规防范'],
        ['缅甸', '中等', '偶有抢劫', '避免前往边境'],
        ['柬埔寨', '较好', '偶有盗窃', '常规防范'],
    ]
    for r in risks:
        row = table.add_row()
        for i, cell in enumerate(row.cells):
            cell.text = r[i]
    
    doc.add_heading('（三）武力冲突风险', level=2)
    table = doc.add_table(rows=1, cols=4)
    table.style = 'Table Grid'
    headers = ['区域', '冲突类型', '活跃程度', '对项目影响']
    for i, h in enumerate(headers):
        table.rows[0].cells[i].text = h
        table.rows[0].cells[i].paragraphs[0].runs[0].font.bold = True
    
    risks = [
        ['尼日尔', '反恐作战', '中等', '低（项目区稳定）'],
        ['缅北', '地方武装', '中等', '中（可能波及管道）'],
        ['柬埔寨', '无', '无', '无影响'],
    ]
    for r in risks:
        row = table.add_row()
        for i, cell in enumerate(row.cells):
            cell.text = r[i]
    
    # 四、国内对项目的态度
    doc.add_heading('四、所在国对项目的态度', level=1)
    
    doc.add_heading('（一）执政党态度', level=2)
    table = doc.add_table(rows=1, cols=3)
    table.style = 'Table Grid'
    headers = ['国家', '态度', '具体表现']
    for i, h in enumerate(headers):
        table.rows[0].cells[i].text = h
        table.rows[0].cells[i].paragraphs[0].runs[0].font.bold = True
    
    attitudes = [
        ['尼日尔', '支持', '总统视察，定位战略资产'],
        ['缅甸', '支持', '认可环保整改，保障安全'],
        ['柬埔寨', '支持', '首相出席奠基仪式'],
    ]
    for r in attitudes:
        row = table.add_row()
        for i, cell in enumerate(row.cells):
            cell.text = r[i]
    
    doc.add_heading('（二）反对党态度', level=2)
    p = doc.add_paragraph()
    p.add_run('缅甸：').bold = True
    p.add_run('全国民主联盟批评军政府未能充分保护民众利益，将项目作为政治斗争议题')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    doc.add_heading('（三）民间态度', level=2)
    table = doc.add_table(rows=1, cols=5)
    table.style = 'Table Grid'
    headers = ['国家', '支持者', '反对者', '中立者', '主要关切']
    for i, h in enumerate(headers):
        table.rows[0].cells[i].text = h
        table.rows[0].cells[i].paragraphs[0].runs[0].font.bold = True
    
    attitudes = [
        ['尼日尔', '60%', '20%', '20%', '就业 vs 环境'],
        ['缅甸', '50%', '30%', '20%', '利益分配 vs 环境'],
        ['柬埔寨', '70%', '15%', '15%', '经济发展 vs 生态'],
    ]
    for r in attitudes:
        row = table.add_row()
        for i, cell in enumerate(row.cells):
            cell.text = r[i]
    
    # 五、所在国党派势力变化对项目的潜在影响
    doc.add_heading('五、所在国党派势力变化对项目的潜在影响', level=1)
    
    doc.add_heading('尼日尔', level=2)
    p = doc.add_paragraph()
    p.add_run('基准情景（60%）：').bold = True
    p.add_run('军政府继续执政，项目正常推进')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    p = doc.add_paragraph()
    p.add_run('乐观情景（25%）：').bold = True
    p.add_run('与西方关系缓和，投资环境改善')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    p = doc.add_paragraph()
    p.add_run('悲观情景（15%）：').bold = True
    p.add_run('西方制裁升级，融资困难')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    doc.add_heading('缅甸', level=2)
    p = doc.add_paragraph()
    p.add_run('基准情景（70%）：').bold = True
    p.add_run('军政府维持控制，项目稳定运营')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    doc.add_heading('柬埔寨', level=2)
    p = doc.add_paragraph()
    p.add_run('基准情景（85%）：').bold = True
    p.add_run('政策连续，项目顺利推进')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    # 六、美西方国家对项目的干扰情况
    doc.add_heading('六、美西方国家对项目的干扰情况', level=1)
    
    doc.add_heading('（一）舆论干扰', level=2)
    p = doc.add_paragraph()
    p.add_run('欧盟议会：').bold = True
    p.add_run('批评尼日尔军政府，影响范围中等')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    p = doc.add_paragraph()
    p.add_run('美国智库：').bold = True
    p.add_run('关注中国东南亚投资，建议美国加强经济合作应对')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    doc.add_heading('（二）政策干扰', level=2)
    p = doc.add_paragraph()
    p.add_run('欧盟制裁尼日尔：').bold = True
    p.add_run('已实施，可能导致融资困难')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    p = doc.add_paragraph()
    p.add_run('本期新增：').bold = True
    p.add_run('无新的直接制裁或限制措施')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    # 七、风险防范建议
    doc.add_heading('七、风险防范建议', level=1)
    
    doc.add_heading('（一）妥善处理好与社会各界的关系', level=2)
    suggestions = [
        '加强与执政党沟通，建立定期高层互访机制',
        '开展反对党对话，每季度举行一次沟通会',
        '加强社区关系建设，设立社区联络办公室',
        '建立媒体关系网络，举办媒体开放日活动',
    ]
    for s in suggestions:
        p = doc.add_paragraph(s, style='List Number')
        for run in p.runs:
            run.font.name = '仿宋_GB2312'
            run.font.size = Pt(16)
    
    doc.add_heading('（二）依法保护生态环境', level=2)
    suggestions = [
        '严格执行环评标准，确保合规运营',
        '建立环境监测机制，1 个月内完成部署',
        '邀请第三方机构参与监督，提升公信力',
        '制定环境应急预案，3 个月内完成编制',
    ]
    for s in suggestions:
        p = doc.add_paragraph(s, style='List Number')
        for run in p.runs:
            run.font.name = '仿宋_GB2312'
            run.font.size = Pt(16)
    
    doc.add_heading('（三）承担必要的社会责任，树立正面形象', level=2)
    suggestions = [
        '优先雇佣本地员工，目标本地化率≥70%',
        '投入公益项目，每年≥投资额 0.5%',
        '加强媒体关系管理，目标正面报道≥70%',
        '建立信息公开机制，定期发布社会责任报告',
    ]
    for s in suggestions:
        p = doc.add_paragraph(s, style='List Number')
        for run in p.runs:
            run.font.name = '仿宋_GB2312'
            run.font.size = Pt(16)
    
    doc.add_heading('（四）加强安全保卫', level=2)
    suggestions = [
        '配足安保力量，聘请专业安保公司',
        '定期演练应急预案，每季度至少 1 次',
        '与中国使领馆保持联动，建立信息通报机制',
        '购买政治风险保险，6 个月内完成投保',
    ]
    for s in suggestions:
        p = doc.add_paragraph(s, style='List Number')
        for run in p.runs:
            run.font.name = '仿宋_GB2312'
            run.font.size = Pt(16)
    
    # 参考文献
    doc.add_heading('参考文献', level=1)
    refs = [
        '新华社《尼贝石油管道项目进展顺利》，2026-03-23',
        'Reuters《贝宁段管道建设遭遇当地社区抗议》，2026-03-22',
        '观察者网《莱比塘铜矿环保措施获缅甸政府认可》，2026-03-23',
        'The Irrawaddy《缅甸反对党质疑莱比塘铜矿股权分配》，2026-03-21',
        '人民网《德崇扶南运河项目举行奠基仪式》，2026-03-22',
        'Phnom Penh Post《柬埔寨环保组织关注运河生态影响》，2026-03-22',
        '中国日报《中缅石油管道年度检修完成》，2026-03-23',
        'Control Risks《西非地区恐怖主义威胁警示》，2026-03-20',
        'Khmer Times《Sokimex 暂停 LPG 供应》，2026-03-23',
        'Bloomberg《美国智库报告关注中国在东南亚投资》，2026-03-21',
    ]
    for i, ref in enumerate(refs, 1):
        p = doc.add_paragraph(f'{i}. {ref}')
        for run in p.runs:
            run.font.name = '仿宋_GB2312'
            run.font.size = Pt(16)
    
    # 页脚信息
    doc.add_paragraph('─' * 50)
    p = doc.add_paragraph()
    p.add_run('编制单位：').bold = True
    p.add_run('鳌子情报分析系统\n')
    p.add_run('生成时间：').bold = True
    p.add_run('2026-03-23 19:30:00\n')
    p.add_run('报送范围：').bold = True
    p.add_run('内部参考')
    for run in p.runs:
        run.font.name = '仿宋_GB2312'
        run.font.size = Pt(16)
    
    # 保存
    doc.save(output_path)
    print(f'✓ Word 文档已生成：{output_path}')


if __name__ == '__main__':
    if len(sys.argv) < 2:
        print('用法：python generate_word.py [输出路径]')
        sys.exit(1)
    
    output_path = sys.argv[1] if len(sys.argv) > 1 else '/home/admin/.openclaw/workspace/reports/overseas_briefing/daily/海外中国投资项目分析简报_2026-03-23.docx'
    generate_word_report(None, output_path)
