#!/bin/sh

set -eu

server="${QM_APPS_SERVER:-https://apps.qmniu.com}"
skill_dir=$(CDPATH='' cd -- "$(dirname -- "$0")/.." && pwd)
force=false
service=all

usage() {
  printf 'Usage: %s [pixiu|baize|all] [--force]\n' "$0" >&2
}

for argument in "$@"; do
  case "$argument" in
    pixiu|baize|all)
      service=$argument
      ;;
    --force)
      force=true
      ;;
    -h|--help)
      usage
      exit 0
      ;;
    *)
      usage
      exit 2
      ;;
  esac
done

command -v apps-cli >/dev/null 2>&1 || {
  printf '%s\n' 'Error: apps-cli is required. Install it with: npm install -g https://apps.qmniu.com/downloads/apps-cli/latest.tgz' >&2
  exit 1
}

download_schema() {
  service_name=$1
  filename="${service_name}-admin-openapi.yaml"
  target="$skill_dir/assets/$filename"

  if [ -s "$target" ] && [ "$force" = false ]; then
    printf '%s\n' "Using existing OpenAPI schema: $target"
    return
  fi

  mkdir -p "$skill_dir/assets"
  temporary=$(mktemp "$skill_dir/assets/.${filename}.download.XXXXXX")
  if ! apps-cli download \
    "$server/skills/admin-api-pixiu/assets/$filename" \
    --server "$server" \
    --output "$temporary" \
    --force; then
    rm -f "$temporary"
    printf '%s\n' "Error: failed to download $filename. Verify 'apps-cli whoami' for $server and confirm access to the admin-api-pixiu Skill." >&2
    return 1
  fi

  if [ ! -s "$temporary" ]; then
    rm -f "$temporary"
    printf '%s\n' "Error: downloaded OpenAPI schema is empty: $filename" >&2
    return 1
  fi

  mv "$temporary" "$target"
  printf '%s\n' "OpenAPI schema ready: $target"
}

case "$service" in
  pixiu|baize)
    download_schema "$service"
    ;;
  all)
    download_schema pixiu
    download_schema baize
    ;;
esac
