#!/bin/bash

SCREENSAVERFLAG='yes'
SCREENVISIBLE="enabled"

if [ -n "$WAYLAND_DISPLAY" ]; then
    if [ -n "$XWAYLAND_SCREENSAVER_DELAY" ]; then
        SCREENSAVERDELAY="$XWAYLAND_SCREENSAVER_DELAY"
    else
        SCREENSAVERDELAY='600'
        SCREENSAVERFLAG='no'
        SCREENVISIBLE="disabled"
    fi
else
    XSETQ="`LANG=C xset q`"

    SCREENSAVERDELAY="`echo "$XSETQ" | grep ' timeout: ' | grep ' cycle: ' | tr -s ' ' | cut -f 3 -d ' '`"
    if [ "$SCREENSAVERDELAY" = "0" ];then
        SCREENSAVERFLAG='no'
        SCREENVISIBLE="disabled"
    fi
    SCREENSAVERCYCLE="`echo "$XSETQ" | grep ' timeout: ' | grep ' cycle: ' | tr -s ' ' | cut -f 5 -d ' '`"
    SCREENSAVERBLANKING="`echo "$XSETQ" | grep ' prefer blanking: ' | tr -s ' ' | cut -f 4 -d ' '`"
    SCREENSAVEREXPOSURES="`echo "$XSETQ" | grep ' allow exposures: ' | tr -s ' ' | cut -f 7 -d ' '`"
    #precaution
    [ "$SCREENSAVERFLAG" = "" ] && SCREENSAVERFLAG='yes'
    [ "$SCREENSAVERDELAY" = "" ] && SCREENSAVERDELAY='600'
    [ "$SCREENSAVERCYCLE" = "" ] && SCREENSAVERCYCLE='600'
    [ "$SCREENSAVERBLANKING" = "" ] && SCREENSAVERBLANKING='yes'
    [ "$SCREENSAVEREXPOSURES" = "" ] && SCREENSAVEREXPOSURES='yes'
fi

#pupx_screen \$SCREENSAVERFLAG \$SCREENSAVERDELAY \$SCREENSAVERCYCLE \$SCREENSAVERBLANKING \$SCREENSAVEREXPOSURES
function pupx_screen() { #add '-dpms' when turn off screensaver...
	if [ -z "$SCREENSAVERFLAG" ] ; then
		return
	fi
	SCREENSAVERDELAY=`echo -n $SCREENSAVERDELAY | cut -f 1 -d '.'`
	SCREENSAVERCYCLE=`echo -n $SCREENSAVERCYCLE | cut -f 1 -d '.'`
	if [ "$SCREENSAVERFLAG" = "false" ];then
	 SCREENSAVERPARAMS="s off -dpms"
	else
	 [ "$SCREENSAVERBLANKING" = "false" ] && SCREENSAVERBLANKING=noblank
	 [ "$SCREENSAVERBLANKING" = "true" ] && SCREENSAVERBLANKING=blank
	 [ "$SCREENSAVEREXPOSURES" = "false" ] && SCREENSAVEREXPOSURES=noexpose
	 [ "$SCREENSAVEREXPOSURES" = "true" ] && SCREENSAVEREXPOSURES=expose
	 SCREENSAVERPARAMS="s $SCREENSAVERDELAY $SCREENSAVERCYCLE s dpms 0 0 $SCREENSAVERCYCLE s $SCREENSAVERBLANKING s $SCREENSAVEREXPOSURES"
	fi
	LANG=C xset $SCREENSAVERPARAMS
	XSET_SCREEN="LANG=C xset $SCREENSAVERPARAMS"
	[ ! "$1" ] && Xdialog --title "Screensaver settings" --msgbox "Screensaver parameters set to:\n${SCREENSAVERDELAY} ${SCREENSAVERCYCLE} ${SCREENSAVERBLANKING} ${SCREENSAVEREXPOSURES}\n(for this session only)" 0 0
}
export -f pupx_screen

MAIN_DIALOG='<window title="'$(gettext 'Screensaver settings')'" icon-name="video-display" resizable="false">
<vbox>
    <vbox>
     <frame>
      <checkbox>
       <label>'$(gettext 'Enable screen saver')'</label>
       <variable>SCREENSAVERFLAG</variable>
       <default>'${SCREENSAVERFLAG}'</default>
       <action>if true enable: SCREENSAVERDELAY</action>
       <action>if true enable: SCREENSAVERCYCLE</action>
       <action>if false disable: SCREENSAVERDELAY</action>
       <action>if false disable: SCREENSAVERCYCLE</action>
      </checkbox>
      <hbox>
       <text><label>"       "</label></text>
       <text><label>'$(gettext 'Delay:')'</label></text>

       <spinbutton range-min="30" range-max="9999" range-step="1" range-value="'${SCREENSAVERDELAY}'">
         <variable>SCREENSAVERDELAY</variable>
         <visible>'${SCREENVISIBLE}'</visible>
       </spinbutton>

       <text><label>'$(gettext '(seconds)       ')'</label></text>
      </hbox>
      <text><label>'$(gettext 'This is the delay before screensaver is activated')'</label></text>
'
[ -z "$WAYLAND_DISPLAY" ] && MAIN_DIALOG=${MAIN_DIALOG}'
      <hbox>
       <text><label>"        "</label></text>
       <text><label>'$(gettext 'Cycle:')'</label></text>

       <spinbutton range-min="0" range-max="9999" range-step="1" range-value="'${SCREENSAVERCYCLE}'">
         <variable>SCREENSAVERCYCLE</variable>
         <visible>'${SCREENVISIBLE}'</visible>
       </spinbutton>

       <text><label>'$(gettext '(seconds)       ')'</label></text>
      </hbox>
      <text><label>'$(gettext 'This is the interval for change of background pattern')'</label></text>
      <hbox>
       <text><label>"   "</label></text>
       <vbox>
        <checkbox>
         <label>'$(gettext 'Blank the screen rather than display a pattern')'</label>
         <variable>SCREENSAVERBLANKING</variable>
         <default>'${SCREENSAVERBLANKING}'</default>
        </checkbox>
        <checkbox>
         <label>'$(gettext 'Allow exposures')'</label>
         <variable>SCREENSAVEREXPOSURES</variable>
         <default>'${SCREENSAVEREXPOSURES}'</default>
        </checkbox>
       </vbox>
      </hbox>'

MAIN_DIALOG=${MAIN_DIALOG}'
     </frame>
    </vbox>
  <hbox>
   <button cancel>
    <action type="exit">no save</action>
   </button>'

[ -z "$WAYLAND_DISPLAY" ] && MAIN_DIALOG=${MAIN_DIALOG}'<button>
    <input file stock="gtk-apply"></input>
    <label>'$(gettext 'Apply')'</label>
    <action>pupx_screen &</action>
   </button>'

export MAIN_DIALOG=${MAIN_DIALOG}'
   <button ok>
    <action type="exit">save settings</action>
   </button>
  </hbox>
</vbox>
</window>'

RETPARAMS="`gtkdialog --center --program=MAIN_DIALOG`"
eval "$RETPARAMS"
[ "$EXIT" != "save settings" ] && exit

if [ -n "$WAYLAND_DISPLAY" ]; then
	if [ "$SCREENSAVERFLAG" = "true" -a "$SCREENSAVERDELAY" -gt 0 ]; then
		sed -i "s%^XWAYLAND_SCREENSAVER_DELAY=.*%XWAYLAND_SCREENSAVER_DELAY=$SCREENSAVERDELAY%" /etc/environment
	else
		sed -i "s%^XWAYLAND_SCREENSAVER_DELAY=.*%XWAYLAND_SCREENSAVER_DELAY=%" /etc/environment
	fi

	killall swayidle 2>/dev/null
	if [ "$SCREENSAVERFLAG" = "true" -a "$SCREENSAVERDELAY" -gt 0 ]; then
		PUPLOCK="$(grep -- 'puplock' ~/.config/swayidle/config 2>/dev/null)"
		if [ -n "$PUPLOCK" ]; then
			cat << EOF > ~/.config/swayidle/config
timeout $SCREENSAVERDELAY 'sh -c "(puplock &); wlopm --off \*"' resume 'sh -c "wlopm --on \*"'
EOF
		else
			cat << EOF > ~/.config/swayidle/config
timeout $SCREENSAVERDELAY 'sh -c "wlopm --off \*"' resume 'sh -c "wlopm --on \*"'
EOF
		fi
		sleep 1
		swayidle 2>/dev/null &
	else
		rm -f ~/.config/swayidle/config
	fi
fi

pupx_screen     z
touch $HOME/.xset.sh
sed -i '/ s /d' $HOME/.xset.sh
echo "$XSET_SCREEN" >> $HOME/.xset.sh
chmod +x $HOME/.xset.sh

### END ###
