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

cd "$(dirname "$0")"
COMPOSE="${COMPOSE:-docker compose}"
mode="${1:-plans}"
case "$mode" in
  plans|practice|setup|observe) ;;
  *) echo "Usage: bash labs/mysql/run.sh plans|practice|setup|observe" >&2; exit 2 ;;
esac

mkdir -p out

$COMPOSE up -d

ready=0
for _ in $(seq 1 60); do
  if $COMPOSE exec -T -e MYSQL_PWD=labpass mysql \
      mysqladmin ping -h 127.0.0.1 -uroot --silent >/dev/null 2>&1; then
    ready=1
    break
  fi
  sleep 2
done

if [ "$ready" -ne 1 ]; then
  echo "MySQL did not become ready; inspect: $COMPOSE logs mysql" >&2
  exit 1
fi

actual_version=$($COMPOSE exec -T -e MYSQL_PWD=labpass mysql \
  mysql -uroot --batch --skip-column-names -e 'SELECT VERSION()')
if [ "$actual_version" != '8.0.39' ]; then
  echo "Expected MySQL 8.0.39, got: $actual_version" >&2
  exit 1
fi

case "$mode" in
  plans)
    $COMPOSE exec -T -e MYSQL_PWD=labpass mysql mysql -uroot --table < init.sql
    $COMPOSE exec -T -e MYSQL_PWD=labpass mysql mysql -uroot --table < queries.sql | tee out/explain.txt
    ;;
  practice)
    $COMPOSE exec -T -e MYSQL_PWD=labpass mysql mysql -uroot -e 'CREATE DATABASE IF NOT EXISTS study_sql'
    $COMPOSE exec -T -e MYSQL_PWD=labpass mysql mysql -uroot --table study_sql < practice.sql | tee out/practice.txt
    ;;
  setup)
    $COMPOSE exec -T -e MYSQL_PWD=labpass mysql mysql -uroot --table < setup.sql | tee out/setup.txt
    ;;
  observe)
    $COMPOSE exec -T -e MYSQL_PWD=labpass mysql mysql -uroot --table < observe.sql | tee out/observe.txt
    ;;
esac
