import json
from datetime import datetime, timedelta

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

# 当前时间
now = datetime.fromisoformat('2026-06-12T00:00:00Z')

# 读取所有状态的任务
all_issues = []
for status in ['todo', 'in_progress', 'in_review', 'blocked']:
    try:
        with open(f'/tmp/{status}_issues.json', 'r') as f:
            data = json.load(f)
            all_issues.extend(data.get('issues', []))
    except:
        pass

print(f"总共检查 {len(all_issues)} 个活跃任务\n")

# 分类问题
problems = {
    'in_review_wrong_assignee': [],
    'todo_stale': [],
    'in_progress_stale': [],
    'no_assignee': []
}

actions_taken = []

for issue in all_issues:
    status = issue['status']
    issue_id = issue['id']
    identifier = issue['identifier']
    title = issue['title']
    assignee_id = issue.get('assignee_id')
    assignee_type = issue.get('assignee_type')
    updated_at = datetime.fromisoformat(issue['updated_at'].replace('Z', '+00:00'))
    hours_since_update = (now - updated_at).total_seconds() / 3600
    
    # 规则 1: in_review 必须分配给代码评审专家
    if status == 'in_review' and assignee_type == 'agent' and assignee_id != REVIEWER_ID:
        problems['in_review_wrong_assignee'].append({
            'identifier': identifier,
            'title': title,
            'assignee_id': assignee_id,
            'action': '自动重新分配给代码评审专家'
        })
        actions_taken.append(f"multica issue update {issue_id} --assignee-id {REVIEWER_ID}")
    
    # 规则 2: todo 状态有 assignee，超过2小时未更新
    elif status == 'todo' and assignee_id and hours_since_update > 2:
        problems['todo_stale'].append({
            'identifier': identifier,
            'title': title,
            'assignee_type': assignee_type,
            'hours': round(hours_since_update, 1),
            'action': '添加 mention 提醒 assignee 开始工作'
        })
        # 构建 mention 链接
        if assignee_type == 'agent':
            mention = f"[@Agent](mention://agent/{assignee_id})"
        else:
            mention = f"[@Member](mention://member/{assignee_id})"
        actions_taken.append(f"echo '提醒：此任务已超过2小时未开始，请尽快处理。{mention}' | multica issue comment add {issue_id} --content-stdin")
    
    # 规则 3: in_progress 超过48小时未更新
    elif status == 'in_progress' and hours_since_update > 48:
        problems['in_progress_stale'].append({
            'identifier': identifier,
            'title': title,
            'assignee_type': assignee_type,
            'hours': round(hours_since_update, 1),
            'action': '添加 mention 提醒 assignee'
        })
        if assignee_id:
            if assignee_type == 'agent':
                mention = f"[@Agent](mention://agent/{assignee_id})"
            else:
                mention = f"[@Member](mention://member/{assignee_id})"
            actions_taken.append(f"echo '此任务已超过48小时未更新，请提供进度更新。{mention}' | multica issue comment add {issue_id} --content-stdin")
    
    # 规则 4: 活跃状态但无 assignee
    elif status in ['todo', 'in_progress', 'in_review'] and not assignee_id:
        problems['no_assignee'].append({
            'identifier': identifier,
            'title': title,
            'status': status,
            'action': '添加评论提醒需要分配负责人'
        })
        actions_taken.append(f"echo '此任务状态为 {status} 但未分配负责人，请及时分配。' | multica issue comment add {issue_id} --content-stdin")

# 生成报告
print("=" * 60)
print("任务分配健康检查报告")
print("=" * 60)
print()

print(f"检查时间: 2026-06-12")
print(f"检查范围: todo, in_progress, in_review, blocked 状态的任务")
print()

total_problems = sum(len(v) for v in problems.values())
print(f"发现问题数: {total_problems}")
print()

if problems['in_review_wrong_assignee']:
    print(f"【问题1】in_review 状态分配错误 ({len(problems['in_review_wrong_assignee'])} 个)")
    for p in problems['in_review_wrong_assignee']:
        print(f"  - {p['identifier']}: {p['title']}")
        print(f"    → {p['action']}")
    print()

if problems['todo_stale']:
    print(f"【问题2】todo 状态超时未开始 ({len(problems['todo_stale'])} 个)")
    for p in problems['todo_stale']:
        print(f"  - {p['identifier']}: {p['title']}")
        print(f"    已等待 {p['hours']} 小时")
        print(f"    → {p['action']}")
    print()

if problems['in_progress_stale']:
    print(f"【问题3】in_progress 状态长时间无更新 ({len(problems['in_progress_stale'])} 个)")
    for p in problems['in_progress_stale']:
        print(f"  - {p['identifier']}: {p['title']}")
        print(f"    已 {p['hours']} 小时未更新")
        print(f"    → {p['action']}")
    print()

if problems['no_assignee']:
    print(f"【问题4】活跃任务未分配负责人 ({len(problems['no_assignee'])} 个)")
    for p in problems['no_assignee']:
        print(f"  - {p['identifier']}: {p['title']} (状态: {p['status']})")
        print(f"    → {p['action']}")
    print()

if total_problems == 0:
    print("✅ 所有任务分配状态正常，无需处理！")
else:
    print(f"已生成 {len(actions_taken)} 个修复命令")
    
    # 保存命令到文件
    with open('/tmp/fix_commands.sh', 'w') as f:
        f.write('#!/bin/bash\n\n')
        for cmd in actions_taken:
            f.write(cmd + '\n')
    print("修复命令已保存到 /tmp/fix_commands.sh")

