#!/usr/bin/env bash

case $1 in
    model)
        grep -oP 'Revision\s*:\s*\K[^ ]*' /proc/cpuinfo
        ;;
    model_name)
        grep -oP 'Model\s*:\s*\K.*' /proc/cpuinfo
        ;;
    serial)
        grep -oP 'Serial\s*:\s*\K[^ ]*' /proc/cpuinfo
        ;;
    config_txt)
        if [ -f /boot/firmware/config.txt ]; then
            echo "/boot/firmware/config.txt"
            exit 0
        fi
        if [ -f /boot/config.txt ]; then
            echo "/boot/config.txt"
            exit 0
        fi
        exit 1
        ;;
    password)
        PWSALT=$(sudo grep pi /etc/shadow | awk -F\$ '{print $3}')
        PWPI=$(sudo grep pi /etc/shadow | awk -F: '{print $2}')
        PWDFT=$(mkpasswd -m sha-512 raspberry "$PWSALT")
        if [ "$PWPI" = "$PWDFT" ]; then
            echo "default"
            exit 0
        else
            echo "user"
            exit 0
        fi
        ;;
    hostname)
        if [ -r /etc/hostname ]; then
            sed -n '1p' /etc/hostname
            exit 0
        fi
        if command -v hostnamectl >/dev/null 2>&1; then
            hostnamectl --static 2>/dev/null && exit 0 || true
        fi
        if command -v hostname >/dev/null 2>&1; then
            hostname --short 2>/dev/null && exit 0 || true
        fi
        exit 1
        ;;
    default-gateway)
        ip route | grep default | awk '{print $3}'
        ;;
    local-net-stats)
        gw=$("$0" default-gateway)
        if [ -z "$gw" ]; then
            echo "error: no default gateway found" >&2
            exit 1
        fi
        output=$(ping -O -i 0.2 -w 10 "$gw" 2>&1)
        pct_drop=$(echo "$output" | grep -oP '\d+(?=% packet loss)')
        rtt_line=$(echo "$output" | grep -oP 'rtt min/avg/max/mdev = \K.*(?= ms)')
        mean=$(echo "$rtt_line" | cut -d'/' -f2)
        jitter=$(echo "$rtt_line" | cut -d'/' -f4)
        ts=$(date +%s)
        printf '{"timestamp":%s,"percent_dropped":%s,"mean_ms":%s,"jitter_ms":%s}\n' \
            "$ts" "${pct_drop:-null}" "${mean:-null}" "${jitter:-null}"
        ;;
    --version|-V)
        # try dpkg-parsechangelog (from dpkg-dev), otherwise parse first line of debian/changelog
        if command -v dpkg-parsechangelog >/dev/null 2>&1; then
            ver=$(dpkg-parsechangelog --show-field Version 2>/dev/null || true)
        else
            # parse 'package (version) ...' from the first non-empty line robustly
            ver=$(awk 'NF && match($0, /^[^ ]+ \(([^(]+)\)/, m) { print m[1]; exit }' debian/changelog 2>/dev/null || true)
        fi
        echo "pi-data $ver"
        exit 0
        ;;
    --help|-h|*)
        echo "Usage: $0 {model|serial|config_txt|password|hostname|default-gateway|local-net-stats}"
        exit 1
        ;;
esac
