NDG_VERSION=v0.8.0
NDG_URL_AARCH64=https://git.qcode.ch/attachments/24bb1ae9-4f38-4565-91f5-73ec4f452acb
NDG_SHA256_AARCH64=ba227425671902db5d70bebdfb47ec56d9dcd645a372041c75cbbb193602e46a

NDG_HOME=/home/uiuser
NDG_BINDIR=$NDG_HOME/$NDG_VERSION

ndg_bin_install() {
    cd $NDG_HOME
    test -f $NDG_BINDIR/nd && return 0;
    local targz="ndg-$NDG_VERSION.tar.gz"
    curl -sSL -o "$targz" "$NDG_URL_AARCH64"
    if [ $? -ne 0 ]; then
        printf "ERROR: unable to download $NDG_URL_AARCH64\n" 1>&2
        return 1
    fi
    printf "$NDG_SHA256_AARCH64 $targz" | sha256sum --check
    [ $? -ne 0 ] && return 1
    mkdir -p $NDG_BINDIR
    tar -C $NDG_BINDIR --no-same-owner -xf "$targz"
    rm -f "$targz"
    return $?
}

ndg_svc_install() {
    local svdir=/etc/sv/nd
    mkdir -p $svdir

    if [ ! -f $svdir/log/run ]; then
        mkdir -p $svdir/log
        ln -sfT /usr/bin/vlogger $svdir/log/run
    fi

    cat <<EOF > $svdir/finish.new
#!/bin/sh
# workaround https://git.qcode.ch/nakamochi/ndg/issues/17
pkill -9 ngui
EOF
    chmod +x $svdir/finish.new
    test -f $svdir/finish && diff $svdir/finish $svdir/finish.new
    if [ $? -ne 0 ]; then
        mv $svdir/finish.new $svdir/finish
    fi
    rm -f $svdir/finish.new

    cat <<EOF > $svdir/run.new
#!/bin/sh
exec $NDG_BINDIR/nd -conf /home/uiuser/conf.json -gui $NDG_BINDIR/ngui -gui-user uiuser -wpa /var/run/wpa_supplicant/wlan0 2>&1
EOF
    chmod +x $svdir/run.new
    test -f $svdir/run && diff $svdir/run $svdir/run.new
    if [ $? -ne 0 ]; then
        mv $svdir/run.new $svdir/run
        # don't touch the actual service if on manual control - the down file
        test -f $svdir/down && return 0
        sv stop nd || printf "ERROR: sv stop nd failed\n" 1>&2
        sv start nd || printf "ERROR: sv start nd failed\n" 1>&2
    fi
    rm -f $svdir/run.new
}

ndg_apply() {
    ndg_bin_install || return 1
    ndg_svc_install || return 1
}