#!/bin/bash

###########################################################################################
#                                                                                         #
#  Erstellt einen systemd-Service für den Wecker-Master-Cronjob.                          #
#  Der Service startet cronjob.php und hält ihn dauerhaft laufend.                        #
#  Nach dem Boot wird der Cronjob automatisch gestartet (wenn aktiviert).                 #
#                                                                                         #
#  Aufruf:  ./wecker_cron_systemd.sh [WECKER_ROOT]   (als User wecker, hebt auf root an). #
#  oder:    sudo ./wecker_cron_systemd.sh [WECKER_ROOT]                                   #
#                                                                                         #
###########################################################################################

set -e

if [ "$(id -u)" -ne 0 ]; then
    echo "Skript wird mit root-Rechten ausgeführt (sudo)..."
    exec sudo "$0" "$@"
fi

SERVICE_NAME="wecker-cron"
SYSTEMD_DIR="/etc/systemd/system"
UNIT_FILE="${SYSTEMD_DIR}/${SERVICE_NAME}.service"

##################################################################################################################
#                                                                                                                #
# WECKER_ROOT: Standard /var/www/wecker oder Pfad wo dieses Skript liegt (z.B. .../wecker/skripts -> .../wecker) #
#                                                                                                                #
##################################################################################################################

if [ -n "$1" ]; then
    WECKER_ROOT="$(realpath "$1")"
else
    SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
    if [ -d "${SCRIPT_DIR}/../cronjob" ] && [ -f "${SCRIPT_DIR}/../cronjob.php" ]; then
        WECKER_ROOT="$(realpath "${SCRIPT_DIR}/..")"
    else
        WECKER_ROOT="/var/www/wecker"
    fi
fi

if [ ! -f "${WECKER_ROOT}/cronjob.php" ]; then
    echo "Fehler: cronjob.php nicht gefunden unter ${WECKER_ROOT}"
    exit 1
fi

PHP_BIN="$(command -v php 2>/dev/null || echo "/usr/bin/php")"
if [ ! -x "$PHP_BIN" ]; then
    echo "Fehler: PHP nicht gefunden (erwartet: $PHP_BIN)"
    exit 1
fi

################################################################################
#                                                                              #
# Service als root ausführen (für Cronjob-Zugriff auf alle nötigen Ressourcen) #
#                                                                              #
################################################################################

RUN_USER="root"

echo "Wecker-Root:  $WECKER_ROOT"
echo "PHP:          $PHP_BIN"
echo "Service-User: $RUN_USER"
echo "Unit-Datei:   $UNIT_FILE"
echo ""

################################################################################
#                                                                              #
#                               Unit-Datei erzeugen                            #
#                                                                              #
################################################################################

cat > "$UNIT_FILE" << EOF
[Unit]
Description=Wecker Master-Cronjob (timer_pruefung, refresh_wetter, etc.)
After=network.target mysql.service mariadb.service

[Service]
Type=simple
User=$RUN_USER
Group=$RUN_USER
WorkingDirectory=$WECKER_ROOT
ExecStart=$PHP_BIN $WECKER_ROOT/cronjob.php
Restart=always
RestartSec=5

# Umgebungsvariablen optional anpassen
# Environment=PHP_INI_SCAN_DIR=

[Install]
WantedBy=multi-user.target
EOF

echo "Service-Datei erstellt: $UNIT_FILE"
systemctl daemon-reload
echo "systemd neu geladen."

echo ""
echo "Nächste Schritte (als root/sudo):"
echo "  Aktivieren (Start beim Boot):  systemctl enable $SERVICE_NAME"
echo "  Jetzt starten:                 systemctl start $SERVICE_NAME"
echo "  Status prüfen:                systemctl status $SERVICE_NAME"
echo "  Stoppen:                      systemctl stop $SERVICE_NAME"
echo "  Deaktivieren:                 systemctl disable $SERVICE_NAME"
echo ""
read -p "Service jetzt aktivieren und starten? [j/N] " -n 1 -r
echo
if [[ $REPLY =~ ^[jJyY]$ ]]; then
    systemctl enable "$SERVICE_NAME"
    systemctl start "$SERVICE_NAME"
    echo "Service aktiviert und gestartet."
    systemctl status "$SERVICE_NAME" --no-pager || true
fi
