#!/usr/bin/env bash
# Requires curl and jq. Persist FOLEYIX_REQUEST_KEY and reuse it after failure.
set -euo pipefail
: "${FOLEYIX_API_KEY:?Set FOLEYIX_API_KEY}"
: "${FOLEYIX_REQUEST_KEY:?Set a persistent FOLEYIX_REQUEST_KEY}"
base='https://foleyix.com'
job=$(curl --silent --show-error --fail-with-body --max-time 90 "$base/api/v1/generations" \
 -H "Authorization: Bearer $FOLEYIX_API_KEY" -H "Idempotency-Key: $FOLEYIX_REQUEST_KEY" \
 -H 'Content-Type: application/json' \
 -d '{"prompt":"A quiet forest with birds singing, 3 seconds.","mode":"ambience"}' | jq -c '.job')
id=$(jq -er '.id' <<<"$job")
[[ "$id" =~ ^[A-Za-z0-9_-]+$ ]] || exit 1
deadline=$((SECONDS+900))
while [[ $(jq -r '.status' <<<"$job") =~ ^(queued|running)$ ]]; do
 if (( SECONDS >= deadline )); then echo "Timeout: continue checking task $id; do not recreate it." >&2; exit 1; fi
 sleep 5
 job=$(curl --silent --show-error --fail-with-body --max-time 90 "$base/api/v1/jobs/$id" \
  -H "Authorization: Bearer $FOLEYIX_API_KEY" | jq -c '.job')
done
jq -e '.status=="succeeded" and .resultAvailable==true' <<<"$job" >/dev/null || { echo "Task $id did not succeed; do not automatically resubmit." >&2; exit 1; }
url=$(jq -er '.downloadUrl' <<<"$job")
[[ "$url" == "$base/api/v1/jobs/$id/audio" ]] || exit 1
curl --silent --show-error --fail-with-body --max-time 90 "$url" \
 -H "Authorization: Bearer $FOLEYIX_API_KEY" -o foleyix.wav
printf 'Saved audio from task %s to foleyix.wav\n' "$id"
