#!/bin/bash
set -e

VERSION="0.9.13"
DIGEST="0eb0ac225791d6ce32e5183949bec596651de65ff16745529d1bf69f0cda3fe5"
SIGNATURE="OV7JufqS79PNLu+tNRRL55ThNKRRapymI+RYdZEGswvCfsFO6iwB0t6OFG9/Rbt0lTKG0a8hQr+eSlKK6YjFBg=="
MANAGER="http://127.0.0.1:19088"
TOKEN="dev-admin-token"
ARTIFACT_ID="artifact-56c16c03-1"
STORAGE_POOL="spool-3b376d8f-1"

echo "=== 1. Upload binary to storage pool ==="
OBJ_NAME="friend-agent-${VERSION}-linux-amd64"
UPLOAD_RESULT=$(curl -sS -X POST -H "Authorization: Bearer $TOKEN" \
  -F "file=@/tmp/friend-agent-v0.9.13" \
  -F "kind=file" \
  -F "name=$OBJ_NAME" \
  "$MANAGER/api/v1/storage-pools/$STORAGE_POOL/objects" 2>/dev/null)
echo "$UPLOAD_RESULT" | python3 -c "
import json,sys
d=json.load(sys.stdin)
print('Storage object ID:', d.get('id',''))
print('Digest:', d.get('digest',''))
print('Size:', d.get('size_bytes',''))
" 2>/dev/null || echo "$UPLOAD_RESULT"

SOBJ_ID=$(echo "$UPLOAD_RESULT" | python3 -c "import json,sys; print(json.load(sys.stdin).get('id',''))" 2>/dev/null)
echo "sobj_id=$SOBJ_ID"

echo ""
echo "=== 2. Update artifact via PUT API ==="
SIZE=$(stat -c%s /tmp/friend-agent-v0.9.13 2>/dev/null || stat -f%z /tmp/friend-agent-v0.9.13)
curl -sS -X PUT -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
  -d "{
    \"digest\": \"sha256:$DIGEST\",
    \"signature\": \"$SIGNATURE\",
    \"key_id\": \"release-2026\",
    \"storage_object_id\": \"$SOBJ_ID\",
    \"size_bytes\": $SIZE,
    \"signed\": true
  }" \
  "$MANAGER/api/v1/artifacts/$ARTIFACT_ID" 2>/dev/null | python3 -c "
import json,sys
d=json.load(sys.stdin)
print('Artifact updated:', d.get('id',''), 'status:', d.get('status',''), 'digest:', d.get('digest','')[:20])
" 2>/dev/null

echo ""
echo "=== 3. Trigger agent.upgrade on both instances ==="
for INSTANCE in friend-043bd076 friend-4f864178; do
  echo "Upgrading $INSTANCE..."
  curl -sS -X POST -H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
    -d "{
      \"action\": \"agent.upgrade\",
      \"payload\": {
        \"program\": \"friend-agent\",
        \"version\": \"$VERSION\",
        \"source_url\": \"http://10.200.0.10:19088/artifact-content/$ARTIFACT_ID/$DIGEST\",
        \"digest\": \"sha256:$DIGEST\",
        \"signature\": \"$SIGNATURE\",
        \"key_id\": \"release-2026\"
      }
    }" \
    "$MANAGER/api/v1/instances/$INSTANCE/commands" 2>/dev/null | python3 -c "
import json,sys
d=json.load(sys.stdin)
print('  Command:', d.get('id',''), 'status:', d.get('status',''))
" 2>/dev/null
done

echo ""
echo "=== 4. Wait for upgrade ==="
sleep 20

echo ""
echo "=== 5. Check instance status ==="
for INSTANCE in friend-043bd076 friend-4f864178; do
  echo "--- $INSTANCE ---"
  curl -sS -H "Authorization: Bearer $TOKEN" "$MANAGER/api/v1/instances/$INSTANCE" 2>/dev/null | python3 -c "
import json,sys
d=json.load(sys.stdin)
inst=d.get('instance',d)
print('  config_state:', inst.get('config_state',''))
print('  health_state:', inst.get('health_state',''))
print('  agent_version:', inst.get('agent_version',''))
print('  last_error:', str(inst.get('last_error',''))[:200])
"
done
