#!/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

format="text"
while (($# > 0)); do
  case "$1" in
    --json) format="json"; shift ;;
    --kv) format="kv"; shift ;;
    -h | --help)
      echo "Usage: ai/tools/operator-questions/status.sh [--json|--kv]"
      exit 0
      ;;
    *) echo "operator questions status error: unknown argument: $1" >&2; exit 2 ;;
  esac
done

questions="$(find "$OQ_QUESTION_DIR" -type f -name '*.env' 2>/dev/null | wc -l | tr -d ' ')"
answers="$(find "$OQ_ANSWER_DIR" -type f -name '*.env' 2>/dev/null | wc -l | tr -d ' ')"
stale="$(find "$OQ_STALE_DIR" -type f -name '*.env' 2>/dev/null | wc -l | tr -d ' ')"
resolved="$(find "$OQ_RESOLVED_DIR" -type f -name '*.env' 2>/dev/null | wc -l | tr -d ' ')"
pending_json="$("$script_dir/list.sh" --pending --json)"
pending="$(printf '%s\n' "$pending_json" | node -e "let s='';process.stdin.on('data',d=>s+=d);process.stdin.on('end',()=>console.log(JSON.parse(s).count))")"
approved_json="$("$script_dir/list-approved-actions.sh" --json --all)"
approved_unexecuted="$(printf '%s\n' "$approved_json" | node -e "let s='';process.stdin.on('data',d=>s+=d);process.stdin.on('end',()=>console.log(JSON.parse(s).approved_unexecuted_count))")"
stale_approved="$(printf '%s\n' "$approved_json" | node -e "let s='';process.stdin.on('data',d=>s+=d);process.stdin.on('end',()=>console.log(JSON.parse(s).stale_count))")"
blocked_approved="$(printf '%s\n' "$approved_json" | node -e "let s='';process.stdin.on('data',d=>s+=d);process.stdin.on('end',()=>console.log(JSON.parse(s).blocked_count||0))")"

if [[ "$format" == "json" ]]; then
  node - "$OQ_STATE_DIR" "$questions" "$answers" "$stale" "$resolved" "$pending" "$pending_json" "$approved_json" <<'NODE'
const stateDir = process.argv[2];
const [questions, answers, stale, resolved, pending] = process.argv.slice(3, 8).map(Number);
const pendingJson = JSON.parse(process.argv[8]);
const approvedJson = JSON.parse(process.argv[9]);
console.log(JSON.stringify({
  state_dir: stateDir,
  questions,
  accepted_answers: answers,
  stale_answers: stale,
  resolved_questions: resolved,
  pending_questions: pending,
  pending: pendingJson.questions,
  approved_unexecuted_actions: approvedJson.approved_unexecuted_count,
  stale_approved_actions: approvedJson.stale_count,
  blocked_approved_actions: approvedJson.blocked_count || 0,
  approved_actions: approvedJson.actions,
}, null, 2));
NODE
  exit 0
fi

if [[ "$format" == "kv" ]]; then
  printf 'state_dir=%q\n' "$OQ_STATE_DIR"
  printf 'questions=%s\n' "$questions"
  printf 'accepted_answers=%s\n' "$answers"
  printf 'stale_answers=%s\n' "$stale"
  printf 'resolved_questions=%s\n' "$resolved"
  printf 'pending_questions=%s\n' "$pending"
  printf 'approved_unexecuted_actions=%s\n' "$approved_unexecuted"
  printf 'stale_approved_actions=%s\n' "$stale_approved"
  printf 'blocked_approved_actions=%s\n' "$blocked_approved"
  exit 0
fi

printf 'Operator Questions\n'
printf 'State dir: %s\n' "$OQ_STATE_DIR"
printf 'Questions: %s\n' "$questions"
printf 'Accepted answers: %s\n' "$answers"
printf 'Stale answers: %s\n' "$stale"
printf 'Resolved questions: %s\n' "$resolved"
printf 'Pending questions: %s\n' "$pending"
printf 'Approved unexecuted actions: %s\n' "$approved_unexecuted"
printf 'Stale approved actions: %s\n' "$stale_approved"
printf 'Blocked approved actions: %s\n' "$blocked_approved"
if (( pending > 0 )); then
  printf '\n'
  "$script_dir/list.sh" --pending
fi
if (( approved_unexecuted > 0 || stale_approved > 0 || blocked_approved > 0 )); then
  printf '\n'
  "$script_dir/list-approved-actions.sh"
fi
