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

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

ARTIFACTS_DIR="${ARTIFACTS_DIR:-$ROOT_DIR/artifacts}"
mkdir -p "$ARTIFACTS_DIR"

TIMESTAMP_UTC="$(date -u +"%Y-%m-%dT%H:%M:%SZ")"
COMMIT_SHA="$(git rev-parse --short HEAD 2>/dev/null || echo "unknown")"

REPORT_JSON="$ARTIFACTS_DIR/workload_validation_report.json"
REPORT_MD="$ARTIFACTS_DIR/workload_validation_report.md"
LOG_TEST="$ARTIFACTS_DIR/validation_cmd_test_workspace.log"
LOG_FRAUD="$ARTIFACTS_DIR/validation_cmd_fraud.log"
LOG_RECO="$ARTIFACTS_DIR/validation_cmd_reco.log"
LOG_SUPPLY="$ARTIFACTS_DIR/validation_cmd_supply.log"

run_and_log() {
  local log_file="$1"
  shift
  set +e
  "$@" >"$log_file" 2>&1
  local status=$?
  set -e
  echo "$status"
}

extract_json_number() {
  local key="$1"
  local file="$2"
  grep -E "\"$key\"[[:space:]]*:" "$file" | head -n1 | sed -E 's/.*: ([^,}]+).*/\1/'
}

extract_row_count() {
  local file="$1"
  # Count row objects in the "rows" array output by `ir query`.
  grep -c "\"node_id\"" "$file" || true
}

echo "Running workload validation..."
STATUS_TEST="$(run_and_log "$LOG_TEST" cargo test --workspace)"

WORKDIR="$(mktemp -d)"
IR_BIN="$ROOT_DIR/target/debug/ir"
cargo build --bin ir >/dev/null 2>&1

(
  cd "$WORKDIR"
  "$IR_BIN" ingest-node 100 1 101,102 >/dev/null
  "$IR_BIN" ingest-node 200 1 201,202 >/dev/null
  "$IR_BIN" ingest-node 300 1 301,302 >/dev/null
)

STATUS_FRAUD="$(run_and_log "$LOG_FRAUD" bash -lc "cd '$WORKDIR' && '$IR_BIN' query \"MATCH (n) WHERE vector.cosine(n.embedding, \\\$vec) > 0.80 RETURN n LIMIT 20\"")"
STATUS_RECO="$(run_and_log "$LOG_RECO" bash -lc "cd '$WORKDIR' && '$IR_BIN' query \"MATCH (n) RETURN n LIMIT 10\"")"
STATUS_SUPPLY="$(run_and_log "$LOG_SUPPLY" bash -lc "cd '$WORKDIR' && '$IR_BIN' query \"MATCH (n) WHERE vector.cosine(n.embedding, \\\$vec) > 0.20 RETURN n LIMIT 50\"")"

FRAUD_LATENCY="$(extract_json_number "latency_micros" "$LOG_FRAUD" || echo 0)"
RECO_LATENCY="$(extract_json_number "latency_micros" "$LOG_RECO" || echo 0)"
SUPPLY_LATENCY="$(extract_json_number "latency_micros" "$LOG_SUPPLY" || echo 0)"

FRAUD_ROWS="$(extract_row_count "$LOG_FRAUD")"
RECO_ROWS="$(extract_row_count "$LOG_RECO")"
SUPPLY_ROWS="$(extract_row_count "$LOG_SUPPLY")"

PASS_WORKLOADS="false"
if [[ "$STATUS_FRAUD" -eq 0 && "$STATUS_RECO" -eq 0 && "$STATUS_SUPPLY" -eq 0 ]]; then
  PASS_WORKLOADS="true"
fi
PASS_TESTS="false"
if [[ "$STATUS_TEST" -eq 0 ]]; then
  PASS_TESTS="true"
fi

OVERALL_PASS="false"
if [[ "$PASS_TESTS" == "true" && "$PASS_WORKLOADS" == "true" ]]; then
  OVERALL_PASS="true"
fi

cat >"$REPORT_JSON" <<EOF
{
  "timestamp_utc": "$TIMESTAMP_UTC",
  "commit_sha": "$COMMIT_SHA",
  "commands": {
    "cargo_test_workspace": {"status": $STATUS_TEST, "log": "$(basename "$LOG_TEST")"},
    "fraud_query": {"status": $STATUS_FRAUD, "log": "$(basename "$LOG_FRAUD")"},
    "recommendation_query": {"status": $STATUS_RECO, "log": "$(basename "$LOG_RECO")"},
    "supply_chain_query": {"status": $STATUS_SUPPLY, "log": "$(basename "$LOG_SUPPLY")"}
  },
  "workloads": {
    "fraud": {"rows": $FRAUD_ROWS, "latency_micros": $FRAUD_LATENCY},
    "recommendation": {"rows": $RECO_ROWS, "latency_micros": $RECO_LATENCY},
    "supply_chain": {"rows": $SUPPLY_ROWS, "latency_micros": $SUPPLY_LATENCY}
  },
  "criteria": {
    "tests_pass": $PASS_TESTS,
    "workloads_pass": $PASS_WORKLOADS
  },
  "overall_pass": $OVERALL_PASS
}
EOF

cat >"$REPORT_MD" <<EOF
# Workload Validation Report

- Timestamp (UTC): $TIMESTAMP_UTC
- Commit: $COMMIT_SHA

## Command Status
1. \`cargo test --workspace\`: $STATUS_TEST
2. Fraud workload query: $STATUS_FRAUD
3. Recommendation workload query: $STATUS_RECO
4. Supply-chain workload query: $STATUS_SUPPLY

## Workload Metrics
- Fraud: rows=$FRAUD_ROWS latency_micros=$FRAUD_LATENCY
- Recommendation: rows=$RECO_ROWS latency_micros=$RECO_LATENCY
- Supply-chain: rows=$SUPPLY_ROWS latency_micros=$SUPPLY_LATENCY

## Criteria
- tests_pass: $PASS_TESTS
- workloads_pass: $PASS_WORKLOADS
- overall_pass: $OVERALL_PASS
EOF

echo "Wrote:"
echo "  $REPORT_JSON"
echo "  $REPORT_MD"
