#!/usr/bin/env bash
# Schema Registry REST API 操作集合 — 复制即可执行
# 假设 SR 监听在 http://localhost:8081
# 依赖：curl、jq
set -euo pipefail

SR=${SR:-http://localhost:8081}
SUB=${SUB:-learn.18.users-value}

# ---------- 0. 健康检查 ----------
echo "==> [0] Schema Registry 健康检查"
curl -sf "$SR/subjects" >/dev/null && echo "  ✓ Schema Registry 可达" || { echo "  ✗ 不可达"; exit 1; }

# ---------- 1. 列出所有 Subject ----------
echo
echo "==> [1] 列出所有 Subject"
curl -s "$SR/subjects" | jq

# ---------- 2. 注册 v1 ----------
echo
echo "==> [2] 注册 v1 Schema"
V1='{"type":"record","name":"User","fields":[{"name":"id","type":"long"},{"name":"name","type":"string"}]}'
curl -sX POST -H "Content-Type: application/vnd.schemaregistry.v1+json" \
  --data "{\"schema\":$(echo "$V1" | jq -Rs .)}" \
  "$SR/subjects/$SUB/versions" | jq

# ---------- 3. 列版本 / 取最新 ----------
echo
echo "==> [3] $SUB 的所有版本"
curl -s "$SR/subjects/$SUB/versions" | jq

echo
echo "==> [4] $SUB 的最新版本详情"
curl -s "$SR/subjects/$SUB/versions/latest" | jq

# ---------- 5. 兼容性检查（不真注册） ----------
echo
echo "==> [5] 兼容性检查：加一个有默认值的字段（应通过）"
V2='{"type":"record","name":"User","fields":[{"name":"id","type":"long"},{"name":"name","type":"string"},{"name":"email","type":"string","default":"unknown"}]}'
curl -sX POST -H "Content-Type: application/vnd.schemaregistry.v1+json" \
  --data "{\"schema\":$(echo "$V2" | jq -Rs .)}" \
  "$SR/compatibility/subjects/$SUB/versions/latest" | jq

echo
echo "==> [6] 兼容性检查：加一个无默认值的字段（BACKWARD 应失败）"
BAD='{"type":"record","name":"User","fields":[{"name":"id","type":"long"},{"name":"name","type":"string"},{"name":"email","type":"string"}]}'
curl -sX POST -H "Content-Type: application/vnd.schemaregistry.v1+json" \
  --data "{\"schema\":$(echo "$BAD" | jq -Rs .)}" \
  "$SR/compatibility/subjects/$SUB/versions/latest" | jq

# ---------- 7. 查全局兼容性策略 ----------
echo
echo "==> [7] 全局兼容性策略"
curl -s "$SR/config" | jq

# ---------- 8. 改 Subject 兼容性策略 ----------
echo
echo "==> [8] 把 $SUB 兼容性改为 BACKWARD_TRANSITIVE"
curl -sX PUT -H "Content-Type: application/vnd.schemaregistry.v1+json" \
  --data '{"compatibility":"BACKWARD_TRANSITIVE"}' \
  "$SR/config/$SUB" | jq

# ---------- 9. 通过 ID 反查 Schema ----------
echo
echo "==> [9] 通过 Schema ID 反查（这里取 latest 的 id）"
SID=$(curl -s "$SR/subjects/$SUB/versions/latest" | jq -r '.id')
echo "  最新 Schema ID = $SID"
curl -s "$SR/schemas/ids/$SID" | jq

# ---------- 10. 软删与硬删 ----------
echo
echo "==> [10] 软删 Subject（生产慎用，建议跳过）"
echo "  curl -X DELETE $SR/subjects/$SUB"
echo "  硬删（彻底抹除，先软删）："
echo "  curl -X DELETE \"$SR/subjects/$SUB?permanent=true\""

echo
echo "✓ 演示完成"
