#!/bin/bash
# Ustawia nazwę hosta urządzenia na nivato-<id>, dzięki czemu avahi rozgłasza je
# w sieci jako http://nivato-<id>.local. Umożliwia to konfigurację przez
# bezpośredni kabel Ethernet (bez DHCP/routera) — technik nie musi znać IP.
set -u

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

# shellcheck source=/dev/null
. /opt/nivato-logger/bin/nivato-device-id.sh
# shellcheck source=/dev/null
. /opt/nivato-logger/bin/nivato-progress.sh

log() { nivato_progress INFO "[hostname] $*"; }

suffix=$(nivato_device_suffix | tr 'A-Z' 'a-z')
NEW_HOST="nivato-${suffix}"
device_id=$(nivato_device_id)

nivato_progress STEP "[boot] Hostname / mDNS — deviceId=$device_id → $NEW_HOST"

current=$(hostnamectl --static 2>/dev/null || cat /etc/hostname 2>/dev/null || true)
if [ "$current" != "$NEW_HOST" ]; then
    log "Zmieniam nazwę hosta: '${current:-brak}' → '$NEW_HOST'"
    if command -v hostnamectl >/dev/null 2>&1; then
        hostnamectl set-hostname "$NEW_HOST" 2>/dev/null || hostname "$NEW_HOST" 2>/dev/null || true
    else
        hostname "$NEW_HOST" 2>/dev/null || true
        printf '%s\n' "$NEW_HOST" > /etc/hostname 2>/dev/null || true
    fi
    nivato_progress OK "Hostname ustawiony: $NEW_HOST"
else
    log "Hostname już poprawny: $NEW_HOST"
fi

# Wpis w /etc/hosts, by lokalne rozwiązywanie nazwy nie zgłaszało ostrzeżeń (np. sudo).
if [ -w /etc/hosts ]; then
    if grep -q '^127\.0\.1\.1' /etc/hosts 2>/dev/null; then
        sed -i "s/^127\.0\.1\.1.*/127.0.1.1\t$NEW_HOST/" /etc/hosts 2>/dev/null || true
    else
        printf '127.0.1.1\t%s\n' "$NEW_HOST" >> /etc/hosts 2>/dev/null || true
    fi
fi

# DNS-SD: rozgłoś panel jako usługę _http._tcp, żeby urządzenie samo pojawiało się
# w przeglądarkach Bonjour/zeroconf (jak sprzęt Apple). Nazwa z %h = hostname.
PANEL_PORT="${NIVATO_SERVER_PORT:-80}"
AVAHI_SERVICE_DIR="/etc/avahi/services"
AVAHI_SERVICE_FILE="$AVAHI_SERVICE_DIR/nivato-logger.service"
if mkdir -p "$AVAHI_SERVICE_DIR" 2>/dev/null; then
    cat > "$AVAHI_SERVICE_FILE" 2>/dev/null <<EOF || log "Nie udało się zapisać $AVAHI_SERVICE_FILE"
<?xml version="1.0" standalone='no'?>
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
  <name replace-wildcards="yes">Nivato Logger (%h)</name>
  <service>
    <type>_http._tcp</type>
    <port>${PANEL_PORT}</port>
    <txt-record>path=/setup</txt-record>
  </service>
</service-group>
EOF
fi

nivato_progress OK "mDNS gotowe: http://${NEW_HOST}.local  (_http._tcp :${PANEL_PORT})"
exit 0
