#!/bin/bash

#call it from /etc/X11/fly-dm/Xsession to force kiosk env

if [ $LANG = "ru_RU.UTF-8" ]; then
RC_PREFIX="global.ru_RU.UTF-8"
else
RC_PREFIX="global.en"
fi

if [ -d /etc/fly-kiosk/$USER ]; then
  export FLY_KIOSK_CONFIG_DIR=/etc/fly-kiosk/$USER
else
  groups=$(id --groups --name $USER)
  for group in $groups; do
    if [ -d /etc/fly-kiosk/$group ]; then
      grep -qi "IsGroup=true" "/etc/fly-kiosk/$group/fly-kiosk.conf"
      if [ $? -eq "0" ]; then
        export FLY_KIOSK_CONFIG_DIR=/etc/fly-kiosk/$group
        break
      fi
    fi
  done
fi

if [ ! -z $FLY_KIOSK_CONFIG_DIR ]; then

    export BASH=/bin/rbash
    export SHELL=${BASH}

    session="fly-wm"
    if [ "$DESKTOP_SESSION" = "fly-tablet" ]; then
      export DESKTOP_SESSION="fly-tablet-kiosk"
    else
      export DESKTOP_SESSION="fly-kiosk"
    fi

    grep -qi "EditableTheme=true" "$FLY_KIOSK_CONFIG_DIR/fly-kiosk.conf"
    if [ $? -ne "0" ]; then
      if [ -f "/usr/share/fly-wm/$RC_PREFIX.fly-wmrc.$DESKTOP_SESSION" ]; then
        export FLY_RC_FILE="/usr/share/fly-wm/$RC_PREFIX.fly-wmrc.$DESKTOP_SESSION"
      elif [ -f "/usr/share/fly-wm/fly-wmrc.$DESKTOP_SESSION" ]; then
        export FLY_RC_FILE="/usr/share/fly-wm/fly-wmrc.$DESKTOP_SESSION"
      fi
    fi
    grep -qi "EditableDesktop=true" "$FLY_KIOSK_CONFIG_DIR/fly-kiosk.conf"
    if [ $? -ne "0" ]; then
      if [ -d $FLY_KIOSK_CONFIG_DIR/single ] && [ ! -z `find $FLY_KIOSK_CONFIG_DIR/single/ -name *.desktop` ]; then
        export FLY_KIOSK_DESKTOP_DIR="$FLY_KIOSK_CONFIG_DIR/single"
      elif [ -d $FLY_KIOSK_CONFIG_DIR/desktop ]; then
        export FLY_KIOSK_DESKTOP_DIR="$FLY_KIOSK_CONFIG_DIR/desktop"
      fi
      if [ -d $FLY_KIOSK_CONFIG_DIR/toolbar ]; then
        export FLY_KIOSK_TOOLBAR_DIR="$FLY_KIOSK_CONFIG_DIR/toolbar"
      fi
    fi


    if [ ! -z "$FLY_KIOSK_DESKTOP_DIR" ]; then

      echo desktop readonly kiosk mode due to FLY_KIOSK_DESKTOP_DIR=$FLY_KIOSK_DESKTOP_DIR RC=$FLY_RC_FILE

      #how to save/restore breezerc, Trolltech.conf?
      #if [ -f $HOME/.fly/paletterc ]; then mv -f $HOME/.fly/paletterc $HOME/.fly/paletterc.saved-by-kiosk; fi
      if [ -f $HOME/.config/breezerc ]; then mv -f $HOME/.config/breezerc $HOME/.config/breezerc.saved-by-kiosk; fi
      if [ -f $HOME/.config/Trolltech.conf ]; then mv -f $HOME/.config/Trolltech.conf $HOME/.config/Trolltech.conf.saved-by-kiosk; fi

    else

      echo desktop writable kiosk mode due to FLY_KIOSK_DESKTOP_DIR undefined

      #how to save/restore breezerc, Trolltech.conf?
      #if [ -f $HOME/.fly/paletterc.saved-by-kiosk ]; then mv -f $HOME/.fly/paletterc.saved-by-kiosk $HOME/.fly/paletterc; fi
      if [ -f $HOME/.config/breezerc.saved-by-kiosk ]; then mv -f $HOME/.config/breezerc.saved-by-kiosk $HOME/.config/breezerc; fi
      if [ -f $HOME/.config/Trolltech.conf.saved-by-kiosk ]; then mv -f $HOME/.config/Trolltech.conf.saved-by-kiosk $HOME/.config/Trolltech.conf; fi

      #check and create desktop and toolbar dirs
      DESKTOP_DIR=`xdg-user-dir DESKTOP`
      if [ ! -d "$DESKTOP_DIR" ]; then
        if [ -x /usr/bin/xdg-user-dirs-update ]; then /usr/bin/xdg-user-dirs-update; fi
        DESKTOP_DIR=`/usr/bin/xdg-user-dir DESKTOP`
        if [ ! -d "$DESKTOP_DIR" ]; then mkdir -p "$DESKTOP_DIR"; fi
      fi
      TOOLBAR_DIR=$HOME/.fly/toolbar
      if [ ! -d "$TOOLBAR_DIR" ]; then mkdir -p "$TOOLBAR_DIR"; fi

      cd "$DESKTOP_DIR"
      find . -name \*\-kiosk.desktop -print0 -exec rm {} \;
      cd "$TOOLBAR_DIR"
      find . -name \*\-kiosk.desktop -print0 -exec rm {} \;
      cd "$HOME"

      #copy desktop and toolbar entries to home and dont forget to set OnlyShowIn=fly-kiosk;fly-tablet-kiosk in copied entries
      SINGLE_APP=""
      if [ -d $FLY_KIOSK_CONFIG_DIR/single ]; then
      for FILE_PATH in `find $FLY_KIOSK_CONFIG_DIR/single/ -name *.desktop`; do
        SINGLE_APP=1
        FILE_NAME=$(basename "$FILE_PATH")
        grep -q "\-kiosk" "$FILE_PATH"
        if [ $? -eq "0" ]; then
          cp "$FILE_PATH" "$DESKTOP_DIR"
        else
          grep -q "OnlyShowIn" "$FILE_PATH"
          if [ $? -eq "0" ]; then
            grep -q "OnlyShowIn=fly-tablet" "$FILE_PATH"
            if [ $? -eq "0" ]; then
              cat $FILE_PATH | sed 's/OnlyShowIn[ \t]*[\=]*.*$/OnlyShowIn=fly-tablet-kiosk/'  > "$DESKTOP_DIR/${FILE_NAME%.*}-kiosk.desktop"
            else
              cat $FILE_PATH | sed 's/OnlyShowIn[ \t]*[\=]*.*$/OnlyShowIn=fly-kiosk/'  > "$DESKTOP_DIR/${FILE_NAME%.*}-kiosk.desktop"
            fi
          else
              cat $FILE_PATH | sed 's/\[Desktop Entry\]/\[Desktop Entry\]\nOnlyShowIn=fly-kiosk/'  > "$DESKTOP_DIR/${FILE_NAME%.*}-kiosk.desktop"
          fi
        fi
      done
      fi

      if [ -d $FLY_KIOSK_CONFIG_DIR/desktop ] && [ -z $SINGLE_APP ]; then
      for FILE_PATH in `find $FLY_KIOSK_CONFIG_DIR/desktop/ -name *.desktop`; do
        FILE_NAME=$(basename "$FILE_PATH")
        grep -q "\-kiosk" "$FILE_PATH"
        if [ $? -eq "0" ]; then
          cp "$FILE_PATH" "$DESKTOP_DIR"
        else
          grep -q "OnlyShowIn" "$FILE_PATH"
          if [ $? -eq "0" ]; then
            grep -q "OnlyShowIn=fly-tablet" "$FILE_PATH"
            if [ $? -eq "0" ]; then
              cat $FILE_PATH | sed 's/OnlyShowIn[ \t]*[\=]*.*$/OnlyShowIn=fly-tablet-kiosk/'  > "$DESKTOP_DIR/${FILE_NAME%.*}-kiosk.desktop"
            else
              cat $FILE_PATH | sed 's/OnlyShowIn[ \t]*[\=]*.*$/OnlyShowIn=fly-kiosk/'  > "$DESKTOP_DIR/${FILE_NAME%.*}-kiosk.desktop"
            fi
          else
              cat $FILE_PATH | sed 's/\[Desktop Entry\]/\[Desktop Entry\]\nOnlyShowIn=fly-kiosk/'  > "$DESKTOP_DIR/${FILE_NAME%.*}-kiosk.desktop"
          fi
        fi
      done
      fi

      if [ -d $FLY_KIOSK_CONFIG_DIR/toolbar ]; then
      for FILE_PATH in `find $FLY_KIOSK_CONFIG_DIR/toolbar/ -name *.desktop`; do
        FILE_NAME=$(basename "$FILE_PATH")
        grep -q "\-kiosk" "$FILE_PATH"
        if [ $? -eq "0" ]; then
          cp "$FILE_PATH" "$TOOLBAR_DIR"
        else
          grep -q "OnlyShowIn" "$FILE_PATH"
          if [ $? -eq "0" ]; then
            grep -q "OnlyShowIn=fly-tablet" "$FILE_PATH"
            if [ $? -eq "0" ]; then
              cat $FILE_PATH | sed 's/OnlyShowIn[ \t]*[\=]*.*$/OnlyShowIn=fly-tablet-kiosk/'  > "$TOOLBAR_DIR/${FILE_NAME%.*}-kiosk.desktop"
            else
              cat $FILE_PATH | sed 's/OnlyShowIn[ \t]*[\=]*.*$/OnlyShowIn=fly-kiosk/'  > "$TOOLBAR_DIR/${FILE_NAME%.*}-kiosk.desktop"
            fi
          else
              cat $FILE_PATH | sed 's/\[Desktop Entry\]/\[Desktop Entry\]\nOnlyShowIn=fly-kiosk/'  > "$TOOLBAR_DIR/${FILE_NAME%.*}-kiosk.desktop"
          fi
        fi
      done
      fi

    fi

    #if desktop entry on desktop is one only set FLY_EXEC_ONLY_PROG to inform fly-wm about only one exec
    #FLY_EXEC_PROG may be set to autostart some prog
    FLY_EXEC_ONLY_PROG="`find $FLY_KIOSK_CONFIG_DIR/single/ -name *.desktop`"

    if [ ! -z $FLY_EXEC_ONLY_PROG ]; then
        export FLY_EXEC_ONLY_PROG
        export FLY_KIOSK_FULLSCREEN_MODE=1
    fi

else

    #how to save/restore breezerc, Trolltech.conf?
    #if [ -f $HOME/.fly/paletterc.saved-by-kiosk ]; then mv -f $HOME/.fly/paletterc.saved-by-kiosk $HOME/.fly/paletterc; fi
    if [ -f $HOME/.config/breezerc.saved-by-kiosk ]; then mv -f $HOME/.config/breezerc.saved-by-kiosk $HOME/.config/breezerc; fi
    if [ -f $HOME/.config/Trolltech.conf.saved-by-kiosk ]; then mv -f $HOME/.config/Trolltech.conf.saved-by-kiosk $HOME/.config/Trolltech.conf; fi

fi
