#!/usr/bin/env bash
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CREDS_DIR="${SCRIPT_DIR}/creds"
NATS_SERVER="tls://sync.craftdesign.group:4222"
NATS_TLS_FLAGS=()

log() { echo "[provision-streams.sh] $*"; }
die() { echo "[provision-streams.sh] ERROR: $*" >&2; exit 1; }

command -v nats &>/dev/null || die "nats CLI not found. Install from https://github.com/nats-io/natscli/releases"

for PROJECT in edgesync go-libfossil; do
  STREAM=$(echo "$PROJECT" | tr '[:lower:]' '[:upper:]' | tr '-' '_')
  CREDS="${CREDS_DIR}/${PROJECT}-admin.creds"

  [[ -f "$CREDS" ]] || die "Missing $CREDS — run bootstrap-creds.sh first."

  if nats stream info "$STREAM" \
      --server "$NATS_SERVER" "${NATS_TLS_FLAGS[@]}" \
      --creds  "$CREDS" &>/dev/null; then
    log "Stream $STREAM already exists, skipping."
    continue
  fi

  log "Creating stream $STREAM (subjects: fossil.${PROJECT}.>)..."
  # All fields specified explicitly to avoid interactive prompts in non-TTY contexts
  nats stream add "$STREAM" \
    --server            "$NATS_SERVER" "${NATS_TLS_FLAGS[@]}" \
    --creds             "$CREDS" \
    --subjects          "fossil.${PROJECT}.>" \
    --retention         limits \
    --max-age           168h \
    --max-bytes         1073741824 \
    --max-msgs=-1 \
    --max-msgs-per-subject=-1 \
    --max-msg-size=-1 \
    --max-consumers=-1 \
    --discard           old \
    --storage           file \
    --replicas          1 \
    --dupe-window       2m \
    --defaults

  log "Stream $STREAM created."
done

log ""
log "Phase 4 complete. NATS is fully provisioned."
log ""
log "Verify streams:"
log "  nats stream ls --server tls://sync.craftdesign.group:4222 --creds ${CREDS_DIR}/edgesync-admin.creds"
