#!/usr/bin/env python3
"""
Excel 导出脚本 - excel-exporter skill
用法: python3 export_excel.py --title "标题" --data '[{...}]' --output "输出路径"
"""
import sys
import os
import argparse
import json

# 确保依赖路径在 sys.path 中
sys.path.insert(0, '/workspace/.local/lib/python3.11/site-packages')

import openpyxl
from openpyxl.styles import Font, PatternFill, Alignment, Border, Side
from openpyxl.utils import get_column_letter


def export_excel(title: str, data: list, output_path: str) -> str:
    """将数据导出为 Excel 文档"""
    wb = openpyxl.Workbook()
    ws = wb.active
    ws.title = title[:31]  # Excel 工作表名称最长 31 字符

    if not data:
        wb.save(output_path)
        return output_path

    # 写入表头
    headers = list(data[0].keys())
    header_fill = PatternFill(start_color='366092', end_color='366092', fill_type='solid')
    header_font = Font(color='FFFFFF', bold=True)

    for col_idx, header in enumerate(headers, 1):
        cell = ws.cell(row=1, column=col_idx, value=header)
        cell.fill = header_fill
        cell.font = header_font
        cell.alignment = Alignment(horizontal='center', vertical='center')

    # 写入数据行
    for row_idx, row_data in enumerate(data, 2):
        for col_idx, header in enumerate(headers, 1):
            cell = ws.cell(row=row_idx, column=col_idx, value=row_data.get(header, ''))
            cell.alignment = Alignment(horizontal='left', vertical='center')
            # 斑马纹
            if row_idx % 2 == 0:
                cell.fill = PatternFill(start_color='EBF1DE', end_color='EBF1DE', fill_type='solid')

    # 自动调整列宽
    for col_idx, header in enumerate(headers, 1):
        max_len = len(str(header))
        for row_data in data:
            val = str(row_data.get(header, ''))
            # 中文字符宽度约为英文的2倍
            char_len = sum(2 if ord(c) > 127 else 1 for c in val)
            max_len = max(max_len, char_len)
        ws.column_dimensions[get_column_letter(col_idx)].width = min(max_len + 4, 50)

    # 确保输出目录存在
    os.makedirs(os.path.dirname(output_path), exist_ok=True)

    wb.save(output_path)
    return output_path


if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='导出 Excel 文档')
    parser.add_argument('--title', required=True, help='工作表标题')
    parser.add_argument('--data', required=True, help='JSON 格式的数据列表')
    parser.add_argument('--output', required=True, help='输出文件路径')
    args = parser.parse_args()

    data = json.loads(args.data)
    output = export_excel(args.title, data, args.output)
    print(f'output_path: {output}')
    print('Excel 文档导出成功')
