#!/bin/sh

set -eu

status=0

nmi_watchdog() {
  if [ "$(puavo-conf puavo.pm.nmi_watchdog.enabled)" = 'true' ]; then
    echo 1 > /proc/sys/kernel/nmi_watchdog
  fi
}

sata_alpm() {
  if [ "$(puavo-conf puavo.pm.sata_alpm.enabled)" = 'true' ]; then
    mkdir -p /etc/pm/config.d || return 1
    echo SATA_ALPM_ENABLE=true > /etc/pm/config.d/sata_alpm
  else
    rm -f /etc/pm/config.d/sata_alpm
  fi
}

usbcore_autosuspend() {
  autosuspend_value=$(puavo-conf puavo.pm.usbcore.autosuspend)
  if [ -n "$autosuspend_value" ]; then
    printf %s "$autosuspend_value" > /sys/module/usbcore/parameters/autosuspend
  fi
}

wireless() {
  if [ "$(puavo-conf puavo.pm.wireless.enabled)" = 'false' ]; then
    if [ -e /etc/pm/power.d/wireless ]; then
      mkdir -p /etc/pm/power.d.disabled || return 1
      mv /etc/pm/power.d/wireless /etc/pm/power.d.disabled/wireless || return 1
    fi

    mkdir -p /etc/laptop-mode/conf.d /etc/udev/rules.d || return 1
    cat <<'EOF' > /etc/laptop-mode/conf.d/wireless-power.conf || return 1
CONTROL_WIRELESS_POWER_SAVING="auto"

WIRELESS_AC_POWER_SAVING=0
WIRELESS_BATT_POWER_SAVING=0
EOF
    cat <<'EOF' > /etc/udev/rules.d/80-wifi-powersave.rules || return 1
KERNEL=="eth*|ath*|wlan*[0-9]|ra*|sta*", SUBSYSTEM=="net", ENV{DEVTYPE}=="wlan", ACTION=="add|change" RUN+="/usr/lib/puavo-ltsp-client/udev-disable-wifi-powersave"
EOF
  else
    rm -f /etc/laptop-mode/conf.d/wireless-power.conf \
          /etc/udev/rules.d/80-wifi-powersave.rules

    if [ -e /etc/pm/power.d.disabled/wireless ]; then
      mv /etc/pm/power.d.disabled/wireless /etc/pm/power.d/wireless || return 1
    fi
  fi
}

status=0

nmi_watchdog        || status=1
sata_alpm           || status=1
usbcore_autosuspend || status=1
wireless            || status=1

exit $status
