#!/bin/bash

mkdir -p "$HOME/.mkusb/"
runvsave="$HOME/.mkusb/runvsave"
run_version=

########################################################################

function parser {

# Usage:   parser <input file>
#
# Example: parser file.txt (to leave text within
# <pre>
# text
# </pre>
# without parsing
# and replaces ANSI inverse video with bold font

old_IFS=$IFS  # save the field separator           
IFS=$'\n'     # new field separator, the end of line           
modify=true
separator="---------------------------------------------------------------------------"
for line in $(cat "$1")
do
 if [ "$line" == "<pre>" ]
 then
  echo "$line"
  modify=false
 elif [ "$line" == "</pre>" ]
 then
  echo "$line"
  modify=true
 elif [ "$line" == "$separator" ]
 then
  echo "<hr>"
 elif $modify
 then
  line="${line/$'\e'[1;7m /<b>}"
  line="${line/ $'\e'[0m/</b>}"
  echo "${line}<br>"
 else
  echo "$line"
 fi
done
IFS=$old_IFS  # restore default field separator
}
########################################################################

function version_selector {

if [ "$run_version" == "dus" ]
then
 ldus=true
 l11=false
else
 ldus=false
 l11=true
fi

declare -a menuls=( \
$ldus d "Dus, guidus alias mkusb-dus - New, easy to use" \
$l11 e "Eleven, mkusb version 11 - Classic user interface" );

title1="Select version of mkusb"

which zenity > /dev/null
if [ $? -eq 0 ]
then

 ans=$(zenity --list --radiolist \
 --width=$(($wadd+600)) --height=$(($hadd+280)) \
 --title="$title1" \
 --cancel-label="Quit" \
 --window-icon="/usr/share/icons/hicolor/48x48/apps/mkusb.png" \
 --column="selected" --column="hotkey" --column="version of mkusb to run" \
 "${menuls[@]}" \
 2> /dev/null)

 if [ "$ans" == "d" ]
 then
  run_version="dus"
 elif [ "$ans" == "e" ]
 then
  run_version="11"
 fi
 echo "$run_version" > "$runvsave"
else
 run_version="dus"
fi
}
########################################################################

function run_11 {

console="The mkusb console window displays,
or the file ~/mkusb.log contains:
output from the engine behind the zenity curtain."
echo "$console" > ~/mkusb.log
cd

which zenity > /dev/null
if [ $? -eq 0 ]
then
 if [ "$*" != "" ]
 then
  seletmp=$(mktemp)
  echo "$@" > "$seletmp"
  sudo cp "$seletmp" /usr/share/mkusb/selected
  rm "$seletmp"
 fi
 rdev=$(df | grep -m1 '/$'|cut -d ' ' -f1)
 sudo -n echo hello > /dev/null 2>&1
 if [ "$?" == "0" ]
 then
  nopsw=true
 else
  nopsw=false
 fi
# if [ "$rdev" == "/cow" ] || [ "$rdev" == "aufs" ] || [ "$rdev" == "/dev/mapper/live-rw" ]
 if $nopsw
 then
  sudo -H mkusb-11 >> ~/mkusb.log
 else
  ans=1
  cnt=0
  while [ $ans != 0 ] && [ $cnt -lt 3 ]
  do
   if [ $cnt -eq 0 ]
   then
    stitl='mkusb - password'
   else
    stitl='password: try again!'
   fi
   zenity --password --title="$stitl" \
   --window-icon="/usr/share/icons/hicolor/48x48/apps/mkusb.png" \
   2> /dev/null \
   | sudo -SH mkusb-11 >> ~/mkusb.log 2>&1
   ans=$?
   cnt=$(($cnt+1))
   echo "login attempt $cnt" >> ~/mkusb.log
   sleep 1
  done
 fi
 parser "$HOME/mkusb.log" | uniq | \
 zenity --text-info --title="mkusb console output logged to '~/mkusb.log'" \
 --filename="/dev/stdin" \
 --width=720 --height=480 --html \
 --window-icon="/usr/share/icons/hicolor/48x48/apps/mkusb.png" 2>/dev/null
 if [ $? -eq 255 ]
 then
  linlim=$(grep 'saveLines:' /etc/X11/app-defaults/XTerm 2>&1 |sed 's/.* //')
  test $linlim -gt 0
  if [ $? -eq 0 ] && [ $linlim -lt 5120 ]
  then
   zenity --info --text="tweaking xterm to save 5120 lines - enough for ~/mkusb.log" \
   --window-icon="/usr/share/icons/hicolor/48x48/apps/mkusb.png" 2>/dev/null
   sudo sed -i 's/saveLines:.*/saveLines: 5120/' /etc/X11/app-defaults/XTerm
  fi
  wxh=$(xrandr|grep '*'|sed -e 's/^ *//' -e 's/ .*//')
  swide=${wxh/x*}
  shigh=${wxh/*x}

  zleft=$(( ($swide - 740)/2 ))
  if [ $zleft -lt 0 ]
  then
   zleft=0
  fi
  ztop=$(( ($shigh - 410)/2 ))
  if [ $ztop -lt 0 ]
  then
   ztop=0
  fi
  xterm -hold -geometry 90x24+$zleft+$ztop -fa default -fs 10 -fg black -bg '#ebeceb' \
  -T "mkusb console output logged to '~/mkusb.log' - middle button to scroll" \
  -sb -rightbar -e uniq "$HOME/mkusb.log"
 fi
else
 xterm -title 'mkusb cannot run now. Please install zenity or use mkusb-nox or dus!' \
 -fa default -fs 20 -geometry 60x2+200+200 -hold -bg red -fg yellow \
 -e echo 'Please install zenity or use mkusb-nox or dus!'
fi
}
########################################################################

function use_selected_version {

if test -s "$runvsave"
then
 read run_version < "$runvsave"
else
 run_version="dus"
fi

which zenity > /dev/null
if [ $? -eq 0 ]; then iszen=true; else iszen=false; fi
if $iszen
then
 if [ "$run_version" != "" ]
 then
 zenity --title="Run mkusb $run_version" \
 --width=560 --height=280 \
 --window-icon="/usr/share/icons/hicolor/48x48/apps/mkusb.png" \
 --question --text="<b>Run mkusb version $run_version?</b>

Answer <b>Yes</b> or press <b>Enter</b> to <b>continue</b>

Answer <b>No</b>, to <b>select another version</b>" 2>/dev/null
  if [ $? -ne 0 ]
  then
   version_selector
  fi
 else
  version_selector
 fi
else
 run_version="dus"
fi
#echo "run_version=$run_version"
}
########################################################################
# main
########################################################################

xterm -geometry 50x1 -title "graphic mode" -e sleep 1 2> /dev/null
if [ $? -ne 0 ]
then
 echo "***** mkusb-start: Please run a GUI and install xterm and zenity *****"
 echo "*****              or use mkusb-nox or dus (mkusb-dus or guidus) *****"
 exit
fi

use_selected_version

if [ "$run_version" == "dus" ]
then
 declare -i mfnt=$(tail -n1 $HOME/.mkusb/fontsave);if [ $mfnt -lt 11 ];then mfnt=11;fi 
 exec xterm -title 'mkusb-dus console - Do USB Stuff' -fa default -fs $mfnt -bg '#2b2c2b' -fg '#f0f0f0' -sb -rightbar -e mkusb-dus "$@"
elif [ "$run_version" == "11" ]
then
 run_11 "$@"
else
 read -p "mkusb-start: no version selected"
fi
