#!/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]
################################################################################
# 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
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 ""

# Überprüfung der Dateien
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

# Passwortabfrage
read -rsp "MySQL/MariaDB root-Passwort eingeben (Enter wenn keins/Standard auf Pi): " MYSQL_ROOT_PASS
echo ""

# --- SCHRITT 1: DB und User anlegen ---
echo "Erstelle Datenbank und User..."
# Auf dem Pi nutzen wir 'sudo mysql' ohne Passwort-Flag, falls kein Passwort gesetzt ist (Unix Socket)
if [ -z "$MYSQL_ROOT_PASS" ]; then
    sudo mysql <<EOSQL
CREATE DATABASE IF NOT EXISTS \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';
GRANT ALL PRIVILEGES ON \`$DB_NAME\`.* TO '$DB_USER'@'localhost';
FLUSH PRIVILEGES;
EOSQL
else
    export MYSQL_PWD="$MYSQL_ROOT_PASS"
    mysql -u root <<EOSQL
CREATE DATABASE IF NOT EXISTS \`$DB_NAME\` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER IF NOT EXISTS '$DB_USER'@'localhost' IDENTIFIED BY '$DB_PASS';
GRANT ALL PRIVILEGES ON \`$DB_NAME\`.* TO '$DB_USER'@'localhost';
FLUSH PRIVILEGES;
EOSQL
    unset MYSQL_PWD
fi

if [ $? -ne 0 ]; then
    echo "FEHLER: DB/User anlegen fehlgeschlagen. Hast du das Skript mit 'sudo' gestartet?"
    exit 1
fi
echo "Datenbank und User erfolgreich vorbereitet."

# --- SCHRITT 2: main.sql einspielen ---
echo "Spiele main.sql ein..."
export MYSQL_PWD="$DB_PASS"
mysql -h "$DB_HOST" -u "$DB_USER" "$DB_NAME" < "$MAIN_SQL"
if [ $? -ne 0 ]; then echo "FEHLER: Import der main.sql fehlgeschlagen."; exit 1; fi

# --- SCHRITT 3: Updates 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" -u "$DB_USER" "$DB_NAME" < "$f" 2>/dev/null || true
    done
    echo "Updates eingespielt."
fi
unset MYSQL_PWD

# --- SCHRITT 4: config.php schreiben & Rechte setzen ---
echo "Schreibe config.php..."
# Wir nutzen sudo zum Schreiben, falls der Ordner root gehört
sudo 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" | sudo tee "$CONFIG_PHP" > /dev/null

# WICHTIG: Rechte für Webserver (www-data) setzen
sudo chown www-data:www-data "$CONFIG_PHP"
sudo chmod 640 "$CONFIG_PHP"

echo "config.php wurde geschrieben und Rechte für www-data gesetzt."
echo ""
echo "=== DB-Setup abgeschlossen ==="