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

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
LOCAL_E2E_ENV_FILE="${LOCAL_E2E_ENV_FILE:-${SCRIPT_DIR}/../.env}"

if [[ -f "${LOCAL_E2E_ENV_FILE}" ]]; then
  # shellcheck disable=SC1090
  source "${LOCAL_E2E_ENV_FILE}"
fi

HOST="${HOST:-}"
PORT="${PORT:-4000}"
DB_USER="${DB_USER:-}"
DB_PASSWORD="${DB_PASSWORD:-}"
DURATION_SEC="${DURATION_SEC:-180}"
CONCURRENCY="${CONCURRENCY:-5}"   # 5 workers
RPS_PER_WORKER="${RPS_PER_WORKER:-1}"  # 1 insert/sec per worker

: "${HOST:?Set HOST in the environment or local-e2e env file (example: db-host.example.com)}"
: "${DB_USER:?Set DB_USER in the environment or local-e2e env file (example: app_user)}"
: "${DB_PASSWORD:?Set DB_PASSWORD in the environment or local-e2e env file}"

MYSQL_BASE=(mysql --connect-timeout=5 --ssl-mode=REQUIRED -h "${HOST}" -P "${PORT}" -u "${DB_USER}" -p"${DB_PASSWORD}")

echo "[steady-load] target=${HOST}:${PORT} user=${DB_USER} duration=${DURATION_SEC}s workers=${CONCURRENCY} rps/worker=${RPS_PER_WORKER}"

echo "[steady-load] init schema/table..."
"${MYSQL_BASE[@]}" -e "CREATE DATABASE IF NOT EXISTS hermes_loadtest;"
"${MYSQL_BASE[@]}" -e "CREATE TABLE IF NOT EXISTS hermes_loadtest.t_ingest (id BIGINT PRIMARY KEY AUTO_RANDOM, worker_id INT, seq_no BIGINT, payload VARCHAR(128), ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP, KEY idx_worker_ts(worker_id, ts));"

END_TS=$(( $(date +%s) + DURATION_SEC ))
PIDS=()

worker() {
  local wid="$1"
  local seq=0
  local sleep_interval
  sleep_interval=$(awk -v r="${RPS_PER_WORKER}" 'BEGIN { if (r<=0) r=1; printf "%.6f", 1/r }')

  while [[ $(date +%s) -lt ${END_TS} ]]; do
    seq=$((seq+1))
    "${MYSQL_BASE[@]}" -e "INSERT INTO hermes_loadtest.t_ingest(worker_id, seq_no, payload) VALUES (${wid}, ${seq}, CONCAT('w${wid}-', UUID()));" >/dev/null 2>&1 || true
    sleep "${sleep_interval}"
  done
}

echo "[steady-load] starting workers..."
for w in $(seq 1 "${CONCURRENCY}"); do
  worker "${w}" &
  PIDS+=("$!")
done

for pid in "${PIDS[@]}"; do
  wait "${pid}" || true
done

echo "[steady-load] finished. summary:"
"${MYSQL_BASE[@]}" -e "SELECT COUNT(*) AS total_rows, MIN(ts) AS min_ts, MAX(ts) AS max_ts FROM hermes_loadtest.t_ingest;"
"${MYSQL_BASE[@]}" -e "SELECT worker_id, COUNT(*) AS rows_per_worker FROM hermes_loadtest.t_ingest GROUP BY worker_id ORDER BY worker_id;"
