#!/bin/bash
set -e

MANAGER="http://127.0.0.1:19088"
TOKEN="dev-admin-token"
DIGEST="0e4e5b5ff9bd5ebb50130a77773e8e6309093799a10895f90dfa41ef2f868d40"
SIGNATURE="MHD7SW2BW05BMsSUY1/SL3wW83DUjfs4Lmwh4KomaCJnW6n8Q9xVzyNeA1pa5Ux0P14LasWt+tzGa7xxFYWEAQ=="
SIZE=10518539

echo "=== 上传 agent 二进制到存储池 ==="
UPLOAD_RESP=$(curl -sS -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/octet-stream" \
  --data-binary @/tmp/friend-agent-linux-amd64 \
  "$MANAGER/api/v1/storage-pools/spool-3b376d8f-1/objects?kind=file&name=friend-agent-0.9.10-linux-amd64" 2>/dev/null)
echo "$UPLOAD_RESP"
OBJ_ID=$(echo "$UPLOAD_RESP" | python3 -c "import json,sys;print(json.load(sys.stdin).get('id',''))")
echo "OBJ_ID=$OBJ_ID"

echo ""
echo "=== 创建 agent artifact (kind=friend) ==="
ARTIFACT_RESP=$(curl -sS -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d "{
    \"kind\": \"friend\",
    \"name\": \"friend-agent\",
    \"version\": \"0.9.10\",
    \"platform\": \"linux/amd64\",
    \"storage_object_id\": \"$OBJ_ID\",
    \"size_bytes\": $SIZE,
    \"digest\": \"$DIGEST\",
    \"signature\": \"$SIGNATURE\",
    \"key_id\": \"release-2026\",
    \"signed\": true
  }" "$MANAGER/api/v1/artifacts" 2>/dev/null)
echo "$ARTIFACT_RESP"
ARTIFACT_ID=$(echo "$ARTIFACT_RESP" | python3 -c "import json,sys;print(json.load(sys.stdin).get('id',''))")
echo "ARTIFACT_ID=$ARTIFACT_ID"

echo ""
echo "=== 触发 agent.upgrade ==="
UPGRADE_RESP=$(curl -sS -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d "{\"action\":\"agent.upgrade\",\"artifact_id\":\"$ARTIFACT_ID\"}" \
  "$MANAGER/api/v1/instances/friend-043bd076/commands" 2>/dev/null)
echo "$UPGRADE_RESP"

echo ""
echo "等待升级完成..."
sleep 30

echo "=== 检查实例状态 ==="
curl -sS -H "Authorization: Bearer $TOKEN" "$MANAGER/api/v1/instances/friend-043bd076" 2>/dev/null | python3 -c "
import json,sys
d=json.load(sys.stdin)
inst=d.get('instance',d)
print('process_state:', inst.get('process_state',''))
print('health_state:', inst.get('health_state',''))
print('config_state:', inst.get('config_state',''))
print('desired_config_generation:', inst.get('desired_config_generation',''))
print('applied_config_generation:', inst.get('applied_config_generation',''))
print('last_error:', inst.get('last_error','')[:200])
"

echo ""
echo "=== 检查 agent 日志 ==="
docker logs --tail 20 friend-deploy-8ee3dbd3-24b 2>&1 | tail -15

echo ""
echo "=== 检查命令状态 ==="
python3 << 'PYEOF'
import sqlite3
conn = sqlite3.connect("/opt/friend-cluster/data/friend-cluster-v1.db")
cur = conn.cursor()
cur.execute("SELECT id,action,status,result FROM commands WHERE action LIKE '%upgrade%' ORDER BY created_at DESC LIMIT 3")
for r in cur.fetchall(): print("CMD:", r)
conn.close()
PYEOF
