import json
from datetime import datetime, timezone, timedelta

# 读取issue数据
with open('/home/multica/.claude/projects/-home-multica-multica-workspaces-b5fdce19-2a82-455d-b644-5b83da2b3078-e5610528-workdir/30384f11-6f7a-48a8-806b-c2ae104bab28/tool-results/bi7axfqaa.txt', 'r') as f:
    data = json.load(f)

issues = data['issues']
now = datetime.now(timezone.utc)

# 代码评审专家ID
CODE_REVIEWER_ID = "34d7c53d-bd70-45a8-bbbb-77dbb1da16b5"

# 筛选未完成的任务
active_issues = [
    issue for issue in issues 
    if issue['status'] not in ['done', 'cancelled', 'backlog']
]

print(f"总任务数: {len(issues)}")
print(f"未完成任务数: {len(active_issues)}")
print("="*80)

# 分类统计
issues_by_status = {
    'todo': [],
    'in_progress': [],
    'in_review': [],
    'blocked': []
}

for issue in active_issues:
    status = issue['status']
    if status in issues_by_status:
        issues_by_status[status].append(issue)

print("\n状态分布:")
for status, issues_list in issues_by_status.items():
    print(f"  {status}: {len(issues_list)}")

# 问题列表
problems = []

print("\n" + "="*80)
print("检查结果:")
print("="*80)

# 1. 检查 in_review 状态的任务
print("\n【检查1】in_review 状态任务分配")
in_review_issues = issues_by_status['in_review']
if in_review_issues:
    for issue in in_review_issues:
        assignee_id = issue.get('assignee_id')
        if assignee_id != CODE_REVIEWER_ID:
            problems.append({
                'type': 'wrong_reviewer',
                'issue': issue,
                'action': 'reassign',
                'message': f"❌ {issue['identifier']} 处于 in_review 但未分配给代码评审专家"
            })
            print(f"  ❌ {issue['identifier']}: {issue['title']}")
            print(f"     当前分配: {assignee_id or 'null'}")
            print(f"     应该分配给: {CODE_REVIEWER_ID}")
        else:
            print(f"  ✓ {issue['identifier']}: 正确分配给评审专家")
else:
    print("  无 in_review 任务")

# 2. 检查 todo 状态超过2小时未更新的任务
print("\n【检查2】todo 状态超时任务（>2小时未更新）")
todo_issues = issues_by_status['todo']
if todo_issues:
    for issue in todo_issues:
        updated_at = datetime.fromisoformat(issue['updated_at'].replace('Z', '+00:00'))
        hours_since_update = (now - updated_at).total_seconds() / 3600
        
        if issue.get('assignee_id') and hours_since_update > 2:
            problems.append({
                'type': 'todo_timeout',
                'issue': issue,
                'action': 'mention',
                'hours': hours_since_update,
                'message': f"⏰ {issue['identifier']} todo状态已{hours_since_update:.1f}小时未更新"
            })
            print(f"  ⏰ {issue['identifier']}: {issue['title']}")
            print(f"     分配给: {issue['assignee_type']}({issue['assignee_id'][:8]}...)")
            print(f"     未更新时长: {hours_since_update:.1f} 小时")
        elif not issue.get('assignee_id'):
            print(f"  ℹ {issue['identifier']}: 无assignee，跳过检查")
else:
    print("  无 todo 任务")

# 3. 检查 in_progress 状态超过48小时未更新的任务
print("\n【检查3】in_progress 状态超时任务（>48小时未更新）")
in_progress_issues = issues_by_status['in_progress']
if in_progress_issues:
    for issue in in_progress_issues:
        updated_at = datetime.fromisoformat(issue['updated_at'].replace('Z', '+00:00'))
        hours_since_update = (now - updated_at).total_seconds() / 3600
        
        if hours_since_update > 48:
            problems.append({
                'type': 'in_progress_timeout',
                'issue': issue,
                'action': 'mention',
                'hours': hours_since_update,
                'message': f"⚠️ {issue['identifier']} in_progress状态已{hours_since_update:.1f}小时未更新"
            })
            print(f"  ⚠️ {issue['identifier']}: {issue['title']}")
            print(f"     分配给: {issue.get('assignee_type')}({issue.get('assignee_id', 'null')[:8] if issue.get('assignee_id') else 'null'}...)")
            print(f"     未更新时长: {hours_since_update:.1f} 小时")
else:
    print("  无 in_progress 任务")

# 4. 检查无 assignee 的任务
print("\n【检查4】无 assignee 的活动任务")
no_assignee_issues = [issue for issue in active_issues if not issue.get('assignee_id')]
if no_assignee_issues:
    for issue in no_assignee_issues:
        # in_review 应该有 assignee
        if issue['status'] == 'in_review':
            problems.append({
                'type': 'no_assignee',
                'issue': issue,
                'action': 'comment',
                'message': f"❗ {issue['identifier']} in_review状态但无assignee"
            })
            print(f"  ❗ {issue['identifier']}: {issue['title']} (status: {issue['status']})")
        else:
            print(f"  ℹ {issue['identifier']}: {issue['title']} (status: {issue['status']}) - 可能正常")
else:
    print("  所有活动任务都有 assignee")

# 生成总结
print("\n" + "="*80)
print("检查总结:")
print("="*80)
print(f"发现问题数: {len(problems)}")

problem_types = {}
for p in problems:
    problem_types[p['type']] = problem_types.get(p['type'], 0) + 1

for ptype, count in problem_types.items():
    print(f"  {ptype}: {count}")

# 输出需要采取的行动
print("\n" + "="*80)
print("需要采取的行动:")
print("="*80)

actions = {
    'reassign': [],
    'mention': [],
    'comment': []
}

for p in problems:
    actions[p['action']].append(p)

if actions['reassign']:
    print(f"\n需要重新分配的任务 ({len(actions['reassign'])}个):")
    for p in actions['reassign']:
        print(f"  - {p['issue']['identifier']}: {p['issue']['title']}")
        print(f"    命令: multica issue update {p['issue']['id']} --assignee-id {CODE_REVIEWER_ID}")

if actions['mention']:
    print(f"\n需要添加mention提醒的任务 ({len(actions['mention'])}个):")
    for p in actions['mention']:
        print(f"  - {p['issue']['identifier']}: {p['issue']['title']}")
        assignee_type = p['issue'].get('assignee_type')
        assignee_id = p['issue'].get('assignee_id')
        if assignee_type == 'agent' and assignee_id:
            print(f"    mention链接: [@Agent](mention://agent/{assignee_id})")

if actions['comment']:
    print(f"\n需要添加评论的任务 ({len(actions['comment'])}个):")
    for p in actions['comment']:
        print(f"  - {p['issue']['identifier']}: {p['issue']['title']}")

# 保存结果到JSON
result = {
    'check_time': now.isoformat(),
    'total_issues': len(issues),
    'active_issues': len(active_issues),
    'problems_found': len(problems),
    'problems': problems,
    'actions': actions
}

with open('/tmp/health_check_result.json', 'w') as f:
    json.dump(result, f, indent=2, default=str)

print("\n详细结果已保存到: /tmp/health_check_result.json")

