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

script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck source=ai/tools/operator-questions/lib.sh
source "$script_dir/lib.sh"
oq_init

usage() {
  cat <<'EOF'
Usage:
  ai/tools/operator-questions/answer.sh --id <question-id> --answer <answer> [--source local|telegram]
EOF
}

fail() {
  printf 'operator answer error: %s\n' "$1" >&2
  exit "${2:-1}"
}

question_id=""
raw_answer=""
source="local"

while (($# > 0)); do
  case "$1" in
    --id) question_id="${2:?}"; shift 2 ;;
    --answer) raw_answer="${2:?}"; shift 2 ;;
    --source) source="${2:?}"; shift 2 ;;
    -h | --help) usage; exit 0 ;;
    *) fail "unknown argument: $1" 2 ;;
  esac
done

[[ -n "$question_id" ]] || fail "--id is required" 2
[[ -n "$raw_answer" ]] || fail "--answer is required" 2
case "$source" in local | telegram) ;; *) fail "--source must be local or telegram" 2 ;; esac

question_path="$(oq_question_path "$question_id")"
[[ -f "$question_path" ]] || fail "question not found: $question_id"
oq_load_env "$question_path"

if oq_question_approval_inactive "$question_id"; then
  fail "question is no longer actionable: $question_id" 3
fi

if ! matched="$(oq_validate_answer "$raw_answer" "$type" "$options" "$allowed" "$pattern" "$freeform")"; then
  fail "invalid answer for question $question_id: $raw_answer"
fi

status="$(oq_record_answer "$question_id" "$source" "$raw_answer" "$matched" "$type")" || rc=$?
rc="${rc:-0}"
case "$status" in
  accepted)
    printf 'Answer accepted: %s\n' "$question_id"
    printf 'answer=%s\n' "$matched"
    printf 'answer_source=%s\n' "$source"
    ;;
  stale)
    printf 'Answer stale: %s\n' "$question_id"
    exit 3
    ;;
esac
exit "$rc"
