#!/bin/bash
set -e

VERSION="0.9.13"
DIGEST="e9937bea4709762dfb69c16e40b27be5e908efa897ecd75d029cccd65a7eefed"
SIGNATURE="h3xbMikcpqwkIj6vAJrkQwH+5paUxSrGaWhTV2JJDTg+5K6FotAW3RKeoS+U2I+y2Be9tIpchLQrg+ZkuWnzDg=="
SOBJ_ID="sobj-113ff48a-c"
MANAGER="http://127.0.0.1:19088"
TOKEN="dev-admin-token"
ARTIFACT_ID="artifact-56c16c03-1"

echo "=== 1. Update artifact via PUT API ==="
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\": 10524419,
    \"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 "=== 2. 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 "=== 3. Wait for upgrade ==="
sleep 25

echo ""
echo "=== 4. 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
