import argparse
import re

def parse_args() -> argparse.Namespace:
    parser = argparse.ArgumentParser(description="提取UP分组信息")
    parser.add_argument(
        "--input",
        default="./source/19_53_no_titles.md",
        help="输入报告路径",
    )
    parser.add_argument(
        "--output",
        help="输出报告路径（默认覆盖输入）",
    )
    return parser.parse_args()

def main():
    args = parse_args()
    input_file = args.input
    output_file = args.output or input_file

    with open(input_file, 'r', encoding='utf-8') as f:
        content = f.read()

    lines = content.split('\n')
    section_starts = []
    for i, line in enumerate(lines):
        if line.startswith('## '):
            section_starts.append(i)

    if len(section_starts) < 2:
        print('No sections found')
        return 1

    header = '\n'.join(lines[:section_starts[0]])
    sections = []

    for idx in range(len(section_starts)):
        start = section_starts[idx]
        end = section_starts[idx + 1] if idx + 1 < len(section_starts) else len(lines)
        section = '\n'.join(lines[start:end])
        sections.append(section)

    sections = sections[1:]

    parsed = []
    for sec in sections:
        match = re.match(r'^## (\d+)\. (.+) \(mid: (\d+)\)', sec)
        if match:
            num = int(match.group(1))
            name = match.group(2)
            mid = match.group(3)
            
            group_m = re.search(r'- 预设分组: (.+)', sec)
            action_m = re.search(r'- 建议动作: (.+)', sec)
            reason_m = re.search(r'- 判断依据: (.+)', sec)
            error_m = re.search(r'AI返回未知group: (.+)', sec)
            
            group = group_m.group(1).strip() if group_m else ""
            action = action_m.group(1).strip() if action_m else ""
            reason = reason_m.group(1).strip() if reason_m else ""
            error = error_m.group(1).strip() if error_m else ""
            
            parsed.append({
                'num': num,
                'name': name,
                'mid': mid,
                'group': group,
                'action': action,
                'reason': reason,
                'error': error
            })

    parsed.sort(key=lambda x: (x['name'].casefold(), int(x['mid'])))

    lines_out = [header, ""]

    for p in parsed:
        lines_out.append(f"## {p['num']}. {p['name']} (mid: {p['mid']})")
        lines_out.append("")
        if p['group']:
            lines_out.append(f"- 预设分组: {p['group']}")
        if p['action']:
            lines_out.append(f"- 建议动作: {p['action']}")
        if p['reason']:
            lines_out.append(f"- 判断依据: {p['reason']}")
        if p['error']:
            lines_out.append(f"- 异常: {p['error']}")
        lines_out.append("")

    result = '\n'.join(lines_out)
    result = re.sub(r'\n{3,}', '\n\n', result)

    with open(output_file, 'w', encoding='utf-8') as f:
        f.write(result)

    print(f'Extracted {len(parsed)} sections')
    return 0

if __name__ == "__main__":
    raise SystemExit(main())