#!/bin/bash
# postinst script for dump1090
#
# see: dh_installdeb(1)

set -e

# summary of how this script can be called:
#        * <postinst> `configure' <most-recently-configured-version>
#        * <old-postinst> `abort-upgrade' <new version>
#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
#          <new-version>
#        * <postinst> `abort-remove'
#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
#          <failed-install-package> <version> `removing'
#          <conflicting-package> <version>
# for details, see http://www.debian.org/doc/debian-policy/ or
# the debian-policy package

NAME=dump1090-mutability
CONFIGFILE=/etc/default/$NAME
TEMPLATECONFIG=/usr/share/$NAME/config-template
CRONFILE=/etc/cron.d/$NAME
TEMPLATECRON=/usr/share/$NAME/cron-template
SEDSCRIPT=$CONFIGFILE.sed.tmp

subvar_raw() {
  # $1 = db var value
  # $2 = config var name

  # if not present in the config file, add it
  test -z "$1" || grep -Eq "^ *$2=" $CONFIGFILE || echo "$2=" >> $CONFIGFILE
  # add to the sedscript
  echo "s@^ *$2=.*@$2=\"$1\"@" >>$SEDSCRIPT
}

subvar() {
  # $1 = db var name
  # $2 = config var name
  db_get $NAME/$1
  subvar_raw "$RET" "$2"
}

subvar_yn() {
  # $1 = db var name
  # $2 = config var name
  db_get $NAME/$1
  if [ "$RET" = "true" ]; then subvar_raw "yes" "$2"; else subvar_raw "no" "$2"; fi
}

case "$1" in
    configure)
        . /usr/share/debconf/confmodule

        # Generate config file, if it doesn't exist.
        if [ ! -e $CONFIGFILE ]; then
            tail -n +4 $TEMPLATECONFIG >$CONFIGFILE
        fi

        rm -f $SEDSCRIPT

        subvar_yn auto-start START_DUMP1090
        subvar run-as-user DUMP1090_USER
        subvar log-file LOGFILE
        subvar rtlsdr-device DEVICE
        subvar rtlsdr-gain GAIN
        subvar rtlsdr-ppm PPM
        subvar_yn rtlsdr-oversample OVERSAMPLE
        subvar_yn decode-fixcrc FIX_CRC
        subvar_yn decode-phase-enhance PHASE_ENHANCE
        subvar_yn decode-aggressive AGGRESSIVE
        subvar decode-lat LAT
        subvar decode-lon LON
        subvar decode-max-range MAX_RANGE
        subvar net-http-port HTTP_PORT
        subvar net-ri-port RAW_INPUT_PORT
        subvar net-ro-port RAW_OUTPUT_PORT
        subvar net-bi-port BEAST_INPUT_PORT
        subvar net-bo-port BEAST_OUTPUT_PORT
        subvar net-sbs-port SBS_OUTPUT_PORT
        subvar net-fatsv-port FATSV_OUTPUT_PORT
        subvar net-heartbeat NET_HEARTBEAT
        subvar net-out-size NET_OUTPUT_SIZE
        subvar net-out-interval NET_OUTPUT_INTERVAL
        subvar net-buffer NET_BUFFER
        subvar net-bind-address NET_BIND_ADDRESS
        subvar stats-interval STATS_INTERVAL
        subvar json-dir JSON_DIR
        subvar json-interval JSON_INTERVAL
        subvar json-location-accuracy JSON_LOCATION_ACCURACY
        subvar_yn log-decoded-messages LOG_DECODED_MESSAGES
        subvar extra-args EXTRA_ARGS

        cp -a -f $CONFIGFILE $CONFIGFILE.tmp
        sed -f $SEDSCRIPT < $CONFIGFILE > $CONFIGFILE.tmp
        mv -f $CONFIGFILE.tmp $CONFIGFILE
        rm $SEDSCRIPT

        db_get $NAME/run-as-user
        RUNAS="$RET"
        if ! getent passwd "$RUNAS" >/dev/null
        then
            adduser --system --home /usr/share/$NAME --no-create-home --quiet "$RUNAS"
        fi

        # create log if missing; change ownership if needed so the cronjob works
        db_get $NAME/log-file
        touch $RET
        chown $RUNAS $RET

        # create cronjob
        if ! test -e $CRONFILE; then
            echo "Creating cronjob in $CRONFILE to periodically update the aircraft database.." >&2
            MIN=$(($RANDOM % 60))
            tail -n +4 $TEMPLATECRON | sed -e "s/@USER@/$RUNAS/g" -e "s/@MIN@/$MIN/g" >$CRONFILE
        fi

        # update the DB
        echo "Updating aircraft database now.."
        mkdir -m 0755 -p /var/cache/$NAME
        chown $RUNAS /var/cache/$NAME
        su $RUNAS -s /bin/bash -c /usr/share/$NAME/update-aircraft-database.sh || \
          echo "Aircraft database update failed. It will be retried periodically from cron." >&2

        # config file changed between 1.14 and 1.15
        if [ -e /etc/lighttpd/conf-enabled/89-dump1090.conf ]; then
            if dpkg --compare-versions "$2" le "1.14"; then
                echo "Restarting lighttpd.." >&2
                service lighttpd restart || echo "Warning: lighttpd failed to restart." >&2
            fi
        fi
    ;;

    abort-upgrade|abort-remove|abort-deconfigure)
    ;;

    *)
        echo "postinst called with unknown argument \`$1'" >&2
        exit 1
    ;;
esac

# dh_installdeb will replace this with shell code automatically
# generated by other debhelper scripts.

#DEBHELPER#

if [ "$1" = "configure" ]; then db_stop; fi
exit 0