#!/bin/bash
set -u

DEFAULTS="/etc/default/nivato-logger"
[ -f "$DEFAULTS" ] && . "$DEFAULTS"

PASSWORD_FILE="${NIVATO_PASSWORD_FILE:-/opt/nivato-logger/data/password.bcrypt}"
DATA_DIR="${NIVATO_DATA_DIR:-/opt/nivato-logger/data}"
DB_FILE="${NIVATO_DB_FILE:-$DATA_DIR/nivato.db}"
HOTSPOT_MARKER="${NIVATO_WIFI_HOTSPOT_DISABLED_MARKER:-$DATA_DIR/hotspot-disabled}"
SECRETS_FILE="$DATA_DIR/mqtt.secrets"

log() { echo "[nivato-factory-reset] $*"; }
warn() { echo "[nivato-factory-reset] UWAGA: $*" >&2; }

schedule_reboot() {
    log "Planowany restart systemu po resecie fabrycznym"
    if command -v systemd-run >/dev/null 2>&1; then
        if systemd-run --unit=nivato-logger-factory-reset-reboot --on-active=10s /sbin/reboot >/dev/null 2>&1; then
            return 0
        fi
    fi
    (sleep 10; /sbin/reboot) >/dev/null 2>&1 &
}

log "Usuwam plik hasła aplikacji"
rm -f "$PASSWORD_FILE" 2>/dev/null || warn "Nie udało się usunąć $PASSWORD_FILE"

log "Usuwam marker zakończonej konfiguracji (ponowne włączenie hotspotu)"
rm -f "$HOTSPOT_MARKER" 2>/dev/null || warn "Nie udało się usunąć $HOTSPOT_MARKER"
rm -f "$DATA_DIR/update-reboot-at" "$DATA_DIR/update-ready-version" 2>/dev/null || true

log "Usuwam sekrety i certyfikaty MQTT"
rm -f "$SECRETS_FILE" \
    "$DATA_DIR/mqtt-ca.pem" \
    "$DATA_DIR/mqtt-client.pem" \
    "$DATA_DIR/mqtt-client.key" \
    "$DATA_DIR/ssh-hardening.enabled" 2>/dev/null || true

if command -v sqlite3 >/dev/null 2>&1 && [ -f "$DB_FILE" ]; then
    log "Usuwam ustawienia aplikacji i kolejkę MQTT z bazy"
    sqlite3 "$DB_FILE" "DELETE FROM settings;" >/dev/null 2>&1 || \
        warn "Nie udało się wyczyścić tabeli ustawień"
    sqlite3 "$DB_FILE" "DELETE FROM mqtt_outbox;" >/dev/null 2>&1 || true
fi

if command -v nmcli >/dev/null 2>&1; then
    log "Usuwam zapisane profile WiFi"
    while IFS=: read -r name type; do
        [ -z "$name" ] && continue
        if [ "$type" = "802-11-wireless" ]; then
            nmcli connection delete "$name" >/dev/null 2>&1 || warn "Nie udało się usunąć profilu WiFi: $name"
        fi
    done < <(nmcli -t -f NAME,TYPE connection show 2>/dev/null || true)

    log "Przywracam DHCP dla profili przewodowych"
    while IFS=: read -r name type; do
        [ -z "$name" ] && continue
        if [ "$type" = "802-3-ethernet" ]; then
            nmcli connection modify "$name" \
                ipv4.method auto \
                ipv4.addresses "" \
                ipv4.gateway "" \
                ipv4.dns "" >/dev/null 2>&1 || warn "Nie udało się zresetować profilu Ethernet: $name"
        fi
    done < <(nmcli -t -f NAME,TYPE connection show 2>/dev/null || true)
else
    warn "Brak nmcli, pomijam reset konfiguracji sieci"
fi

schedule_reboot

log "Reset fabryczny zakończony, urządzenie zostanie zrestartowane"
