#!/bin/bash
################################################################################
# Datenbank-Setup: DB + User anlegen, main.sql + Updates einspielen,
# config.php mit Zugangsdaten schreiben.
# Aufruf: sudo bash setup_db.sh [WECKER_INSTALL_DIR]
#   WECKER_INSTALL_DIR = /var/www/wecker (Default)
# Benötigt: mysql/mariadb-client, Zugang als root (Passwort wird abgefragt).
################################################################################
set -e
WECKER_DIR="${1:-/var/www/wecker}"
DB_NAME="${WECKER_DB_NAME:-wecker}"
DB_USER="${WECKER_DB_USER:-wecker}"
DB_HOST="${WECKER_DB_HOST:-localhost}"
DB_PORT="${WECKER_DB_PORT:-3306}"

# Zufälliges Passwort (nur alphanumerisch, damit keine Escape-Probleme in config.php)
DB_PASS="${WECKER_DB_PASS:-$(openssl rand -base64 12 | tr -dc 'a-zA-Z0-9' | head -c 20)}"

CONFIG_EXAMPLE="$WECKER_DIR/config.php.example"
CONFIG_PHP="$WECKER_DIR/config.php"
MAIN_SQL="$WECKER_DIR/database/main.sql"
UPDATE_DIR="$WECKER_DIR/database/update"

echo "=== Wecker DB-Setup ==="
echo "Ziel: $WECKER_DIR"
echo "DB: $DB_NAME, User: $DB_USER, Host: $DB_HOST:$DB_PORT"
echo ""

if [ ! -f "$CONFIG_EXAMPLE" ]; then
    echo "FEHLER: $CONFIG_EXAMPLE nicht gefunden."
    exit 1
fi
if [ ! -f "$MAIN_SQL" ]; then
    echo "FEHLER: $MAIN_SQL nicht gefunden."
    exit 1
fi

read -rsp "MySQL/MariaDB root-Passwort eingeben (Enter wenn keins): " MYSQL_ROOT_PASS
echo ""

# DB und User anlegen
echo "Erstelle Datenbank und User..."
export MYSQL_PWD="$MYSQL_ROOT_PASS"
mysql -h "$DB_HOST" -P "$DB_PORT" -u root <<EOSQL
CREATE DATABASE IF NOT EXISTS \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS '$DB_USER'@'%' IDENTIFIED BY '$DB_PASS';
CREATE USER IF NOT EXISTS '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';
GRANT ALL PRIVILEGES ON \`$DB_NAME\`.* TO '$DB_USER'@'%';
GRANT ALL PRIVILEGES ON \`$DB_NAME\`.* TO '$DB_USER'@'localhost';
FLUSH PRIVILEGES;
EOSQL
unset MYSQL_PWD
if [ $? -ne 0 ]; then
    echo "FEHLER: DB/User anlegen fehlgeschlagen."
    exit 1
fi
echo "Datenbank und User erstellt."

# main.sql einspielen
echo "Spiele main.sql ein..."
export MYSQL_PWD="$DB_PASS"
mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" "$DB_NAME" < "$MAIN_SQL"
echo "main.sql eingespielt."

# Updates der Reihe nach einspielen
if [ -d "$UPDATE_DIR" ]; then
    for f in $(find "$UPDATE_DIR" -maxdepth 1 -name '*.sql' | sort); do
        echo "Spiele Update ein: $(basename "$f")"
        mysql -h "$DB_HOST" -P "$DB_PORT" -u "$DB_USER" "$DB_NAME" < "$f" 2>/dev/null || true
    done
    echo "Updates eingespielt."
fi
unset MYSQL_PWD

# config.php aus Example erzeugen (Platzhalter ersetzen)
echo "Schreibe config.php..."
# sed-Delimiter | verwenden, da Passwort Sonderzeichen haben könnte (hier nur alphanum)
sed -e "s|WECKER_DB_HOST|$DB_HOST|g" \
    -e "s|WECKER_DB_PORT|$DB_PORT|g" \
    -e "s|WECKER_DB_NAME|$DB_NAME|g" \
    -e "s|WECKER_DB_USER|$DB_USER|g" \
    -e "s|WECKER_DB_PASS|$DB_PASS|g" \
    "$CONFIG_EXAMPLE" > "$CONFIG_PHP"
chmod 640 "$CONFIG_PHP"
echo "config.php wurde geschrieben (DB-User: $DB_USER, Passwort gesetzt)."
echo ""
echo "=== DB-Setup abgeschlossen ==="
