#!/usr/bin/env bash
set -euo pipefail

ENV_FILE="/etc/backend-core/backend-core.env"
SERVICE_NAME="backend-core"
HEALTH_URL="http://127.0.0.1:8080/actuator/health"

if [ ! -f "$ENV_FILE" ]; then
  echo "ERROR: env file not found at $ENV_FILE" >&2
  echo "Run: sudo systemctl cat $SERVICE_NAME   to find the real EnvironmentFile path, then update ENV_FILE above." >&2
  exit 1
fi

DB_USERNAME=$(grep -E '^DB_USERNAME=' "$ENV_FILE" | cut -d= -f2-)
DB_PASSWORD=$(grep -E '^DB_PASSWORD=' "$ENV_FILE" | cut -d= -f2-)
DB_URL=$(grep -E '^DB_URL=' "$ENV_FILE" | cut -d= -f2-)

if [ -z "$DB_USERNAME" ] || [ -z "$DB_PASSWORD" ] || [ -z "$DB_URL" ]; then
  echo "ERROR: could not read DB_USERNAME/DB_PASSWORD/DB_URL from $ENV_FILE" >&2
  grep -E 'DB_' "$ENV_FILE" || true
  exit 1
fi

DB_HOST=$(echo "$DB_URL" | sed -E 's#jdbc:mysql://([^:/]+).*#\1#')
DB_NAME=$(echo "$DB_URL" | sed -E 's#jdbc:mysql://[^/]+/([^?]+).*#\1#')

echo "==> App expects user='$DB_USERNAME' connecting to host='$DB_HOST' db='$DB_NAME'"

echo "==> Testing the app's exact configured credentials against MySQL..."
if MYSQL_PWD="$DB_PASSWORD" mysql -u "$DB_USERNAME" -h "$DB_HOST" -e "SELECT 1;" >/dev/null 2>&1; then
  echo "==> Credentials already work standalone — problem must be grants or the service not having reloaded. Restarting cleanly."
else
  echo "==> Credentials fail. Syncing MySQL for BOTH 'localhost' and '127.0.0.1' forms to the app's configured password."
  sudo mysql <<SQL
CREATE USER IF NOT EXISTS '$DB_USERNAME'@'localhost' IDENTIFIED BY '$DB_PASSWORD';
CREATE USER IF NOT EXISTS '$DB_USERNAME'@'127.0.0.1' IDENTIFIED BY '$DB_PASSWORD';
ALTER USER '$DB_USERNAME'@'localhost' IDENTIFIED BY '$DB_PASSWORD';
ALTER USER '$DB_USERNAME'@'127.0.0.1' IDENTIFIED BY '$DB_PASSWORD';
GRANT ALL PRIVILEGES ON \`$DB_NAME\`.* TO '$DB_USERNAME'@'localhost';
GRANT ALL PRIVILEGES ON \`$DB_NAME\`.* TO '$DB_USERNAME'@'127.0.0.1';
FLUSH PRIVILEGES;
SQL
  echo "==> Re-testing..."
  MYSQL_PWD="$DB_PASSWORD" mysql -u "$DB_USERNAME" -h "$DB_HOST" -e "SELECT 1;"
  echo "==> MySQL now matches the app's config."
fi

echo "==> Restarting $SERVICE_NAME"
sudo systemctl daemon-reload
sudo systemctl restart "$SERVICE_NAME"

echo "==> Waiting for health check..."
for i in $(seq 1 15); do
  sleep 2
  if curl -sf "$HEALTH_URL" >/dev/null; then
    echo "==> UP"
    curl -s "$HEALTH_URL"; echo
    exit 0
  fi
  echo "  ...still waiting ($i/15)"
done

echo "ERROR: still unhealthy. Recent logs:" >&2
sudo journalctl -u "$SERVICE_NAME" --no-pager -n 40
exit 1