#!/bin/sh

PRIVILEGE=hal-power-suspend
if [ "$HAVE_POLKIT" = "1" ] ; then
    if [ "$HAL_METHOD_INVOKED_BY_UID" != "0" ] ; then
	RESULT=$(polkit-is-privileged --privilege $PRIVILEGE \
	    --user $HAL_METHOD_INVOKED_BY_UID \
	    --system-bus-unique-name $HAL_METHOD_INVOKED_BY_SYSTEMBUS_CONNECTION_NAME 2>&1)
	IS_PRIVILEGED=$?
	if [ "$IS_PRIVILEGED" != "0" ] ; then
	    echo org.freedesktop.Hal.Device.PermissionDeniedByPolicy >&2
	    echo $PRIVILEGE refused uid $HAL_METHOD_INVOKED_BY_UID >&2
	    exit 1
	fi
    fi
fi

alarm_not_supported() {
	echo org.freedesktop.Hal.Device.SystemPowerManagement.AlarmNotSupported >&2
	echo Waking the system up is not supported >&2
	exit 1
}

unsupported() {
	echo org.freedesktop.Hal.Device.SystemPowerManagement.NotSupported >&2
	echo No suspend-hybrid method found >&2
	exit 1
}

read seconds_to_sleep

# Make a suitable command line argument so that the tools can do the correct
# quirks for video resume.
# Passing the quirks to the tool allows the tool to not depend on HAL for data.
QUIRKS=""
[ "$HAL_PROP_POWER_MANAGEMENT_QUIRK_S3_BIOS" = "true" ] && QUIRKS="$QUIRKS --quirk-s3-bios"
[ "$HAL_PROP_POWER_MANAGEMENT_QUIRK_S3_MODE" = "true" ] && QUIRKS="$QUIRKS --quirk-s3-mode"
[ "$HAL_PROP_POWER_MANAGEMENT_QUIRK_DPMS_SUSPEND" = "true" ] && QUIRKS="$QUIRKS --quirk-dpms-suspend"
[ "$HAL_PROP_POWER_MANAGEMENT_QUIRK_DPMS_ON" = "true" ] && QUIRKS="$QUIRKS --quirk-dpms-on"
[ "$HAL_PROP_POWER_MANAGEMENT_QUIRK_VBESTATE_RESTORE" = "true" ] && QUIRKS="$QUIRKS --quirk-vbestate"
[ "$HAL_PROP_POWER_MANAGEMENT_QUIRK_VBEMODE_RESTORE" = "true" ] && QUIRKS="$QUIRKS --quirk-vbemode"
[ "$HAL_PROP_POWER_MANAGEMENT_QUIRK_VGA_MODE_3" = "true" ] && QUIRKS="$QUIRKS --quirk-vga-mode3"
[ "$HAL_PROP_POWER_MANAGEMENT_QUIRK_VBE_POST" = "true" ] && QUIRKS="$QUIRKS --quirk-vbepost"
[ "$HAL_PROP_POWER_MANAGEMENT_QUIRK_RADEON_OFF" = "true" ] && QUIRKS="$QUIRKS --quirk-radeon-off"

if [ -x "/usr/sbin/pm-suspend-hybrid" ] ; then
    if [ $seconds_to_sleep != "0" ] ; then
	alarm_not_supported
    fi
    /usr/sbin/pm-suspend-hybrid $QUIRKS
    RET=$?
else
    unsupported
fi

exit $RET
