#!/usr/bin/env bash
set -euo pipefail
source "$(dirname "$0")/_beagle-racket"
source "$(dirname "$0")/_beagle-daemon-files"

if [[ $# -lt 2 ]]; then
    echo "usage: beagle-fields <RecordName> <file-or-dir> ..." >&2
    exit 2
fi

# Route through a daemon only when it was launched by this compiler closure.
port="$(beagle_daemon_compatible_port || true)"
if [[ -n "$port" ]]; then
    if (exec 3<>/dev/tcp/127.0.0.1/"$port") 2>/dev/null; then
        exec 3<>/dev/tcp/127.0.0.1/"$port"
        echo "fields $*" >&3
        read -r response <&3
        exec 3>&-
        echo "$response" | python3 -c "
import json, sys
data = json.load(sys.stdin)
if not data.get('ok'):
    print(data.get('error', 'unknown error'), file=sys.stderr); sys.exit(1)
results = data.get('results', [])
if not results:
    print(f'beagle-fields: record {sys.argv[1]} not found in provided files', file=sys.stderr)
    sys.exit(1)
for r in results:
    print(r['record'])
    for f in r.get('fields', []):
        print(f'  {f[\"name\"]} : {f[\"type\"]}    accessor: {f[\"accessor\"]}')
" "$1"
        exit 0
    fi
fi

"$RACKET" -e "(require beagle/private/query) (run-query (cons \"fields\" (vector->list (current-command-line-arguments))))" -- "$@"
