#!/usr/bin/env bash
set -euo pipefail

# --- settings you can tweak ---
PASSCODE="27799"            # <-- your real APRS-IS passcode
CALL="W1HD-9"
FILTER='b/W1HD-9 g/W1HD-9'
SERVER="rotate.aprs2.net"
PORT=14580
LOG_FILE="/var/log/direwolf/w1hd9-aprsis.raw"
ENV_FILE="/etc/default/aprsis-w1hd9-raw"

# 0) deps
apt-get update -y
apt-get install -y netcat-openbsd

# 1) env file
tee "$ENV_FILE" >/dev/null <<EOF
APRS_USER=$CALL
APRS_PASS=$PASSCODE
APRS_FILTER="$FILTER"
APRS_SERVER=$SERVER
APRS_PORT=$PORT
LOG_FILE=$LOG_FILE
EOF
chown root:root "$ENV_FILE"
chmod 600 "$ENV_FILE"

# 2) raw logger script
tee /usr/local/bin/aprsis-w1hd9-raw.sh >/dev/null <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
source /etc/default/aprsis-w1hd9-raw
mkdir -p "$(dirname "$LOG_FILE")"
# make sure file exists and give impatient humans a heartbeat :)
if [ ! -f "$LOG_FILE" ]; then
  touch "$LOG_FILE"
  chmod 0640 "$LOG_FILE"
fi
printf "# %s starting raw logger for %s with filter [%s]\n" "$(date -Is)" "$APRS_USER" "$APRS_FILTER" >>"$LOG_FILE"

while true; do
  { printf 'user %s pass %s vers rawlogger 1.0\n' "$APRS_USER" "$APRS_PASS"
    printf 'filter %s\n' "$APRS_FILTER"
    cat; } \
  | nc "$APRS_SERVER" "$APRS_PORT" \
  | stdbuf -oL tee -a "$LOG_FILE"
  echo "# $(date -Is) disconnected, retrying…" >>"$LOG_FILE"
  sleep 2
done
EOF
chmod +x /usr/local/bin/aprsis-w1hd9-raw.sh

# 3) systemd unit
tee /etc/systemd/system/aprsis-w1hd9-raw.service >/dev/null <<'EOF'
[Unit]
Description=APRS-IS raw logger for W1HD-9
After=network-online.target
Wants=network-online.target

[Service]
User=direwolf
Group=direwolf
EnvironmentFile=/etc/default/aprsis-w1hd9-raw
ExecStart=/usr/local/bin/aprsis-w1hd9-raw.sh
Restart=always
RestartSec=3

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl enable --now aprsis-w1hd9-raw

# 4) show status and follow the file right away
systemctl --no-pager -l status aprsis-w1hd9-raw || true
echo "---- tailing $LOG_FILE (Ctrl-C to exit) ----"
tail -F "$LOG_FILE"
