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

repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../.." && pwd)"
cd "$repo_root"

type=""
kind="operator-question"
question=""
description=""
options=""
allowed=""
pattern=""
freeform=false
recommended=""
wait=false
timeout=""
telegram=true
question_id=""
mode=""

usage() {
  cat <<'EOF'
Usage:
  ai/tools/operator-questions/ask.sh --type yes-no --question <text> [options]

Compatibility facade only. Operator question creation and Telegram checkpoint
authorization are owned by Blueprint Runtime Executor.
EOF
}

while (($# > 0)); do
  case "$1" in
    --type) type="${2:?}"; shift 2 ;;
    --kind) kind="${2:?}"; shift 2 ;;
    --question) question="${2:?}"; shift 2 ;;
    --description) description="${2:?}"; shift 2 ;;
    --options) options="${2:?}"; shift 2 ;;
    --allowed) allowed="${2:?}"; shift 2 ;;
    --pattern) pattern="${2:?}"; shift 2 ;;
    --recommended) recommended="${2:?}"; shift 2 ;;
    --freeform) freeform=true; shift ;;
    --wait) wait=true; shift ;;
    --timeout) timeout="${2:?}"; shift 2 ;;
    --no-telegram) telegram=false; shift ;;
    --id) question_id="${2:?}"; shift 2 ;;
    --mode) mode="${2:?}"; shift 2 ;;
    -h|--help) usage; exit 0 ;;
    *) echo "operator question facade error: unknown argument: $1" >&2; exit 2 ;;
  esac
done

[[ -n "$type" && -n "$question" ]] || { usage >&2; exit 2; }

params="$(
  TYPE="$type" KIND="$kind" QUESTION="$question" DESCRIPTION="$description" OPTIONS="$options" ALLOWED="$allowed" \
  PATTERN="$pattern" FREEFORM="$freeform" RECOMMENDED="$recommended" ID="$question_id" TELEGRAM="$telegram" MODE="$mode" \
  node - <<'NODE'
const params = {
  type: process.env.TYPE,
  kind: process.env.KIND,
  question: process.env.QUESTION,
  description: process.env.DESCRIPTION,
  options: process.env.OPTIONS,
  allowed: process.env.ALLOWED,
  pattern: process.env.PATTERN,
  freeform: process.env.FREEFORM === 'true',
  recommended: process.env.RECOMMENDED,
  telegram: process.env.TELEGRAM !== 'false',
  env: {},
};
for (const key of ['OQ_REPO_ROOT', 'OQ_STATE_DIR', 'TELEGRAM_STATE_DIR', 'CHUNK_LIFECYCLE_ACTIVE_DIR', 'OPERATOR_NOTIFICATIONS_ACTIVE_CHUNKS_DIR']) {
  if (process.env[key]) params.env[key] = process.env[key];
}
if (process.env.ID) params.id = process.env.ID;
if (process.env.MODE) params.mode = process.env.MODE;
process.stdout.write(JSON.stringify(params));
NODE
)"

response="$(node ai/runtime/dist/cli.js request --method runtime.executor.createQuestion --params "$params")"
question_id="$(
  RESPONSE="$response" node - <<'NODE'
const response = JSON.parse(process.env.RESPONSE || '{}');
const payload = response.result;
if (!response.ok || !payload || payload.ok === false) {
  console.error((payload && payload.message) || response.error?.message || 'operator question failed');
  process.exit(1);
}
process.stdout.write(String((payload.result || {}).question_id || ''));
NODE
)"

printf 'Question id: %s\n' "$question_id"
printf '\nOperator question: %s\n' "$question"
[[ -z "$description" ]] || printf '%s\n' "$description"
printf '\nReply options:\n'
case "$type" in
  yes-no)
    printf '/yes_%s\n/no_%s\n' "$question_id" "$question_id"
    ;;
  numbered)
    idx=1
    IFS='|' read -r -a items <<< "$options"
    for item in "${items[@]}"; do
      printf '%s. %s\n' "$idx" "$item"
      idx=$((idx + 1))
    done
    ;;
  fixed)
    IFS='|' read -r -a items <<< "$allowed"
    for item in "${items[@]}"; do
      if [[ "$item" =~ ^[A-Za-z0-9_-]+$ ]]; then
        printf '/%s_%s\n' "$item" "$question_id"
      else
        printf '%s\n' "$item"
      fi
    done
    ;;
  freeform)
    printf '<freeform>\n'
    ;;
esac
[[ -z "$recommended" ]] || printf '\nRecommended: %s\n' "$recommended"

if [[ "$wait" == "true" ]]; then
  args=("ai/tools/operator-questions/wait-answer.sh" "$question_id")
  [[ -z "$timeout" ]] || args+=(--timeout "$timeout")
  "${args[@]}"
fi
