#!/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}"
REPEATS="${REPEATS:-5}"
SUMMARY_JSON="${SUMMARY_JSON:-$ARTIFACTS_DIR/perf_repeated_comparison_report.json}"
SUMMARY_MD="${SUMMARY_MD:-$ARTIFACTS_DIR/perf_repeated_comparison_report.md}"

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

median() {
  local values=("$@")
  if [[ "${#values[@]}" -eq 0 ]]; then
    echo "0.00"
    return
  fi
  local sorted
  sorted="$(printf "%s\n" "${values[@]}" | sort -n)"
  local arr=()
  while IFS= read -r line; do
    arr+=("$line")
  done <<< "$sorted"
  local n="${#arr[@]}"
  local mid=$((n / 2))
  if (( n % 2 == 1 )); then
    echo "${arr[$mid]}"
  else
    awk -v a="${arr[$((mid - 1))]}" -v b="${arr[$mid]}" 'BEGIN { printf "%.2f", (a + b) / 2.0 }'
  fi
}

FRAUD_DELTAS=()
RECO_DELTAS=()
SUPPLY_DELTAS=()
INGEST_DELTAS=()

for i in $(seq 1 "$REPEATS"); do
  echo "repeat $i/$REPEATS"
  REPORT_PREFIX="perf_tuned_run_$i" bash "$ROOT_DIR/scripts/perf_baseline.sh" >/dev/null
  BASELINE_JSON="$ARTIFACTS_DIR/perf_baseline_report.json" \
  TUNED_JSON="$ARTIFACTS_DIR/perf_tuned_run_${i}_report.json" \
  OUT_JSON="$ARTIFACTS_DIR/perf_comparison_run_${i}.json" \
  OUT_MD="$ARTIFACTS_DIR/perf_comparison_run_${i}.md" \
    bash "$ROOT_DIR/scripts/perf_compare.sh" >/dev/null

  FRAUD_DELTAS+=("$(extract_json_number "fraud_p95_latency" "$ARTIFACTS_DIR/perf_comparison_run_${i}.json")")
  RECO_DELTAS+=("$(extract_json_number "recommendation_p95_latency" "$ARTIFACTS_DIR/perf_comparison_run_${i}.json")")
  SUPPLY_DELTAS+=("$(extract_json_number "supply_chain_p95_latency" "$ARTIFACTS_DIR/perf_comparison_run_${i}.json")")
  INGEST_DELTAS+=("$(extract_json_number "ingest_events_per_sec" "$ARTIFACTS_DIR/perf_comparison_run_${i}.json")")
done

MED_FRAUD="$(median "${FRAUD_DELTAS[@]}")"
MED_RECO="$(median "${RECO_DELTAS[@]}")"
MED_SUPPLY="$(median "${SUPPLY_DELTAS[@]}")"
MED_INGEST="$(median "${INGEST_DELTAS[@]}")"

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

cat >"$SUMMARY_JSON" <<EOF
{
  "timestamp_utc": "$TIMESTAMP_UTC",
  "commit_sha": "$COMMIT_SHA",
  "repeats": $REPEATS,
  "median_deltas_percent": {
    "fraud_p95_latency": $MED_FRAUD,
    "recommendation_p95_latency": $MED_RECO,
    "supply_chain_p95_latency": $MED_SUPPLY,
    "ingest_events_per_sec": $MED_INGEST
  }
}
EOF

cat >"$SUMMARY_MD" <<EOF
# Repeated Comparison Report

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

## Median Delta (%)
- Fraud p95 latency: $MED_FRAUD
- Recommendation p95 latency: $MED_RECO
- Supply-chain p95 latency: $MED_SUPPLY
- Ingest events/sec: $MED_INGEST
EOF

echo "Wrote:"
echo "  $SUMMARY_JSON"
echo "  $SUMMARY_MD"
