#!/bin/bash

Info () {
title="Info"
author="Peter Starfinger"
mail="E-Mail: info@die-starfingers.de"
year="2020"
app="$(basename $0)"
msgid="The Starbuntu application
<i>\$app</i>
was written by"
info="$(gettext "$msgid" | (export PATH `envsubst --variables "$msgid"`; envsubst "$msgid"))"

yad --center --fixed --title="$title" --window-icon="info" --image="info" --borders=20 --text="$info"$'\n'$'\n'"$author"$'\n'"$mail"$'\n'$'\n'"$year"$'\n' --text-align=center --selectable-labels --button="OK" &
wunwa "$title" > /dev/null; xdotool key Home key Down
}

save_wp () {
    if [ -e "$HOME/.wallpaper" ] && [ ! -L "$HOME/.wallpaper" ]; then
	back=($(ls "$HOME/.wallpaper.*" | sort -r))
	[ -z "${back[0]}" ] && k=0 || k=${back[0]: -1}
	((k++))
	mv "$HOME/.wallpaper" "$HOME/.wallpaper.$k"
    fi
    if $fix; then
        vr[$n]="wallpaper=\"$bg\"; duration=$l_new; mode=$md_new"
	rm "$vr_file"
	echo "${vr[*]}" > "$vr_file"
	chmod a+x "$vr_file"
    fi
}

[ -L "$HOME/.wallpaper" ] && bg_old="$(readlink "$HOME/.wallpaper")" || bg_old="$HOME/.wallpaper"
bg="$bg_old"
vr_file="$HOME/.config/openbox/environment"
repair=false; next=true

if [ "$1" = "info" ]; then
    Info
    exit 0
elif [ "$1" = "-r" ] || [ "$1" = "--repair" ]; then
    eval "$(grep wallpaper $vr_file)"
    cp $HOME/.config/rox.sourceforge.net/ROX-Filer/pb_starbuntu.bak $HOME/.config/rox.sourceforge.net/ROX-Filer/pb_starbuntu
    bg="$wallpaper"
    [ -d "$bg" ] && wallpaper="$(printf "%s\n" "$wallpaper"/* | head -1)"
    sed -Ei "s~(<backdrop[^>]*>)[^<]*(.*)~\1$wallpaper\2~" $HOME/.config/rox.sourceforge.net/ROX-Filer/pb_starbuntu
    l_new=$duration
    repair=true
elif [ "$1" != "-n" ] && [ "$1" != "--next" ]; then
    fix=false; next=false
    if [ "$1" = "-f" ] || [ "$1" = "--fix" ]; then fix=true; shift; fi
    [[ -n "$1" ]] && bg="$1"
    l_new=$2
    md_new=$3

    IFS=$'\n'
    vr=($(cat "$vr_file"))
    wp_l=$(printf -- '%s\n' "${vr[@]}" | grep -n "wallpaper=")
    n=${wp_l::1}; ((n--))
    wp="${vr[$n]}"
    eval "$wp"
    l=$duration
    [ -z "$l" ] && l=200
    if [ -d "$bg" ]; then
	[ -z "$l_new" ] && [ -e "/tmp/hsperfdata_$USER/vr-duration" ] && l_new=$(cat /tmp/hsperfdata_$USER/vr-duration)
	[ -z "$l_new" ] && l_new=$l
    else
	l_new=""
    fi
    [ -z "$md_new" ] && [ -e "/tmp/hsperfdata_$USER/vr-mode" ] && md_new=$(cat /tmp/hsperfdata_$USER/vr-mode)
    [ -z "$md_new" ] && md_new="Fit"
fi

error=0

if [ -d "$bg" ]; then
    pic=($(find "$bg" -maxdepth 1 -type f | grep -Ei "\.jpg|\.jpeg|\.png|\.webp"))
    pic_1=($(find ${pic[@]} -maxdepth 1 -type f -perm -a=r))
    pic_2=($(for p in ${pic[@]}; do [[ ! ${pic_1[@]} =~ "$p" ]] && [ "$(stat -c '%U' "$p")" = $USER ] && echo "$p"; done))
    pic=(${pic_1[@]} ${pic_2[@]})
    if [ -n "${pic[*]}" ]; then
	if [ "$bg" != "$HOME/.wallpaper" ]; then
	    ! $repair && ! $next && save_wp
	    ln -sfn "$bg" $HOME/.wallpaper
	fi
    else
	text=$"&#10;    Folder doesn't contain any readable pictures (JPG, PNG or WEBP)!"
	yad --center --borders=20 --title="Set Wallpaper" --window-icon="dialog-warning" --image="dialog-warning" --text="$text" --button="Info":"$0 info" --button="OK":0
	error=1
    fi
else
    ext="${bg##*.}"
    ext=${ext,,}
    [ -z "$(find "$bg" -type f -perm -a=r)" ] && [ "$(stat -c '%U' "$bg")" != $USER ] && ext=""
    case $ext in
	jpg|jpeg|png|webp )  if [ "$bg" != "$(readlink $HOME/.wallpaper)" ] || $fix; then
			       ! $repair && ! $next && save_wp 
			       ln -sfn  "$bg" $HOME/.wallpaper
			     fi ;;
			* )  text=$"&#10;    Only readable JPG, PNG or WEBP format allowed!"
			     yad --center --borders=20 --title="Set Wallpaper" --window-icon="dialog-warning" --image="dialog-warning" --text="$text" --button="Info":"$0 info" --button="OK":0
			     error=1 ;;
    esac
fi

if [ $error -eq 0 ]; then
    variety-rox "$(readlink $HOME/.wallpaper)" "$l_new" "$md_new" &
    [[ -z "$(cat $HOME/.config/rox.sourceforge.net/ROX-Filer/pb_starbuntu | grep -E 'dev_(sd|nvme)')" ]] && sleep 3 && get-devs
fi

exit $error


