#!/bin/bash
# Analyze TiDB slow log CSV using DuckDB (inside Docker).
# Groups slow statements by (digest, plan_digest) and produces plan analysis outputs.
#
# Prerequisites: run run_decode_binary_plan.sh first to populate the `plan` column.
#
# Usage:
#   ./run_analyze_slowlog.sh <csv-file>
#
# <csv-file>: filename inside local/ or path under local/.
# Examples:
#   ./run_analyze_slowlog.sh slowlog-hoge-fuga.decoded.csv
#   ./run_analyze_slowlog.sh local/slowlog-hoge-fuga.decoded.csv
#
# Output directory: local/<filename-without-ext>/

set -e

# ---- config ----------------------------------------------------------------
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
IMAGE_NAME="observability-logcli"
LOCAL_DIR="${SCRIPT_DIR}/local"
# ---------------------------------------------------------------------------

if [ -z "${1}" ]; then
    echo "Usage: $0 <csv-file>"
    echo "  Example: $0 slowlog-hoge-fuga.decoded.csv"
    exit 1
fi

mkdir -p "${LOCAL_DIR}"

INPUT_BASENAME="$(basename "${1}")"

if [ ! -f "${LOCAL_DIR}/${INPUT_BASENAME}" ]; then
    echo "ERROR: file not found: ${LOCAL_DIR}/${INPUT_BASENAME}"
    exit 1
fi

# Build image if missing
if ! docker image inspect "${IMAGE_NAME}" &>/dev/null; then
    echo "Docker image '${IMAGE_NAME}' not found. Building..."
    docker build -t "${IMAGE_NAME}" "${SCRIPT_DIR}"
fi

MOUNT_ARGS="-v ${LOCAL_DIR}:/app/local"

OUTPUT_DIR_NAME="${INPUT_BASENAME%.*}"
echo "Input:      local/${INPUT_BASENAME}"
echo "Output dir: local/${OUTPUT_DIR_NAME}/"
echo ""

docker run --rm \
    --entrypoint python \
    ${MOUNT_ARGS} \
    "${IMAGE_NAME}" \
    /app/analyze_slowlog.py \
    --input "/app/local/${INPUT_BASENAME}"
