#!/bin/bash

# 获取当前时间戳
now=$(date -u +%s)

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

echo "=== 任务分配健康检查报告 ==="
echo "检查时间: $(date -u '+%Y-%m-%d %H:%M:%S UTC')"
echo ""

# 获取所有未完成任务
issues=$(multica issue list --output json | jq -r '.issues[] | select(.status != "done" and .status != "cancelled" and .status != "backlog")')

if [ -z "$issues" ]; then
  echo "✅ 所有任务已完成或已取消"
  exit 0
fi

# 统计
total=$(echo "$issues" | jq -s 'length')
echo "📊 未完成任务总数: $total"
echo ""

# 检查 in_review 状态的任务
echo "## 1. 检查 in_review 状态任务"
echo "规则: 必须分配给代码评审专家 ($REVIEWER_ID)"
echo ""

in_review=$(echo "$issues" | jq -s ".[] | select(.status == \"in_review\")")
in_review_count=$(echo "$in_review" | jq -s 'length')

if [ "$in_review_count" -eq 0 ]; then
  echo "✅ 无 in_review 任务"
else
  echo "发现 $in_review_count 个 in_review 任务："
  echo "$in_review" | jq -r '"  - \(.identifier): assignee=\(.assignee_id // "null"), type=\(.assignee_type // "null")"'
  
  # 检查是否分配错误
  wrong_review=$(echo "$in_review" | jq -s ".[] | select(.assignee_id != \"$REVIEWER_ID\")")
  wrong_count=$(echo "$wrong_review" | jq -s 'length')
  
  if [ "$wrong_count" -gt 0 ]; then
    echo ""
    echo "❌ 发现 $wrong_count 个分配错误的 in_review 任务（将自动修复）:"
    echo "$wrong_review" | jq -r '.identifier'
  fi
fi
echo ""

# 检查 todo 状态超时任务
echo "## 2. 检查 todo 状态超时任务"
echo "规则: 超过2小时未更新 → 发送 mention 提醒"
echo ""

todo_tasks=$(echo "$issues" | jq -s ".[] | select(.status == \"todo\" and .assignee_id != null)")
todo_count=$(echo "$todo_tasks" | jq -s 'length')

if [ "$todo_count" -eq 0 ]; then
  echo "✅ 无 todo 状态任务"
else
  echo "发现 $todo_count 个 todo 任务"
  
  # 检查超时（2小时 = 7200秒）
  timeout=7200
  todo_timeout=$(echo "$todo_tasks" | jq -s --arg now "$now" --arg timeout "$timeout" '
    .[] | 
    select((($now | tonumber) - (.updated_at | fromdateiso8601)) > ($timeout | tonumber))
  ')
  
  timeout_count=$(echo "$todo_timeout" | jq -s 'length')
  
  if [ "$timeout_count" -eq 0 ]; then
    echo "✅ 所有 todo 任务都在2小时内"
  else
    echo "⚠️  发现 $timeout_count 个超过2小时的 todo 任务（将发送提醒）:"
    echo "$todo_timeout" | jq -r '"  - \(.identifier): 最后更新 \(.updated_at), assignee=\(.assignee_id)"'
  fi
fi
echo ""

# 检查 in_progress 状态超时任务
echo "## 3. 检查 in_progress 状态超时任务"
echo "规则: 超过48小时未更新 → 发送 mention 提醒"
echo ""

progress_tasks=$(echo "$issues" | jq -s ".[] | select(.status == \"in_progress\")")
progress_count=$(echo "$progress_tasks" | jq -s 'length')

if [ "$progress_count" -eq 0 ]; then
  echo "✅ 无 in_progress 状态任务"
else
  echo "发现 $progress_count 个 in_progress 任务"
  
  # 检查超时（48小时 = 172800秒）
  timeout=172800
  progress_timeout=$(echo "$progress_tasks" | jq -s --arg now "$now" --arg timeout "$timeout" '
    .[] | 
    select((($now | tonumber) - (.updated_at | fromdateiso8601)) > ($timeout | tonumber))
  ')
  
  timeout_count=$(echo "$progress_timeout" | jq -s 'length')
  
  if [ "$timeout_count" -eq 0 ]; then
    echo "✅ 所有 in_progress 任务都在48小时内更新"
  else
    echo "⚠️  发现 $timeout_count 个超过48小时的 in_progress 任务（将发送提醒）:"
    echo "$progress_timeout" | jq -r '"  - \(.identifier): 最后更新 \(.updated_at), assignee=\(.assignee_id)"'
  fi
fi
echo ""

# 检查无 assignee 的任务
echo "## 4. 检查无 assignee 的任务"
echo ""

no_assignee=$(echo "$issues" | jq -s '.[] | select(.assignee_id == null)')
no_assignee_count=$(echo "$no_assignee" | jq -s 'length')

if [ "$no_assignee_count" -eq 0 ]; then
  echo "✅ 所有任务都有负责人"
else
  echo "⚠️  发现 $no_assignee_count 个无负责人的任务:"
  echo "$no_assignee" | jq -r '"  - \(.identifier): status=\(.status)"'
fi
echo ""

