#!/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}"
SERVICE_NAME="nivato-logger.service"

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

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"

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

log "Restartuję usługę aplikacji"
systemctl restart "$SERVICE_NAME" >/dev/null 2>&1 &

log "Reset fabryczny uruchomiony"
