#!/bin/sh

current_dir=$(dirname $(readlink -f "$0"))
lower_dir=$(dirname $current_dir)

setup_wine()
{
	[ -d "$WINEPREFIX" ] || mkdir -p "$WINEPREFIX"
	[ -d "$WINEPREFIX/drive_c" ] || mkdir -p "$WINEPREFIX/drive_c"
	[ -d "$WINEPREFIX/drive_c/Program Files" ] || mkdir -p "$WINEPREFIX/drive_c/Program Files"
	[ -d "$WINEPREFIX/drive_c/windows" ] || mkdir -p "$WINEPREFIX/drive_c/windows"
	[ -d "$WINEPREFIX/drive_c/windows/temp" ] || mkdir -p "$WINEPREFIX/drive_c/windows/temp"
	[ -d "$WINEPREFIX/drive_c/windows/inf.done" ] || mkdir -p "$WINEPREFIX/drive_c/windows/inf.done"
	[ -d "$WINEPREFIX/drive_c/windows/profiles" ] || mkdir -p "$WINEPREFIX/drive_c/windows/profiles"
	[ -d "$WINEPREFIX/drive_c/windows/profiles/All Users/Start Menu/Programs" ] || mkdir -p "$WINEPREFIX/drive_c/windows/profiles/All Users/Start Menu/Programs"
	[ -d "$WINEPREFIX/dosdevices" ] || mkdir -p "$WINEPREFIX/dosdevices"

	if [ -h "$WINEPREFIX/dosdevices/c:" ]
	then
		[ -d "$WINEPREFIX/dosdevices/c:" ] || rm -f "$WINEPREFIX/dosdevices/c:"
	fi
	[ -d "$WINEPREFIX/dosdevices/c:" ] || ln -s "$WINEPREFIX/drive_c/" "$WINEPREFIX/dosdevices/c:"

	if [ -h "$WINEPREFIX/dosdevices/z:" ]
	then
		[ -d "$WINEPREFIX/dosdevices/z:" ] || rm -f "$WINEPREFIX/dosdevices/z:"
	fi
	[ -d "$WINEPREFIX/dosdevices/z:" ] || ln -s / "$WINEPREFIX/dosdevices/z:"

	for sdir in \
		drive_c/windows/command drive_c/windows/fonts drive_c/windows/inf \
		"drive_c/windows/profiles/All Users/Start Menu/Programs/TeamViewer 5" \
		drive_c/windows/system drive_c/windows/system32
	do
		if [ -h "$WINEPREFIX/$sdir" ]
		then
			if [ "$(stat --dereference --format %i "$WINEPREFIX/$sdir" 2> /dev/null)" = "$(stat --dereference --format %i "$lower_dir/wine/$sdir")" ]
			then
				continue;
			fi
			rm -f "$WINEPREFIX/$sdir"
		fi

		[ -d "$WINEPREFIX/$sdir" ] || ln -s "$lower_dir/wine/$sdir" "$WINEPREFIX/$sdir"
	done

	if ! [ -d "$WINEPREFIX/drive_c/Program Files/TeamViewer/Version5" ] 
	then
		mkdir -p "$WINEPREFIX/drive_c/Program Files/TeamViewer/Version5"
		cd "$lower_dir/wine/drive_c/Program Files/TeamViewer/Version5"

		for x in *
		do
			prevl="$(pwd)/$x"
			nextl="$WINEPREFIX/drive_c/Program Files/TeamViewer/Version5/$x"
			if [ -h "$nextl" ]
			then
				if [ "$(stat --dereference --format %i "$prevl")" = "$(stat --dereference --format %i "$nextl")" ]
				then
					continue;
				fi
				rm -f "$nextl"
			fi

			[ -d "$nextl" ] || ln -s "$prevl" "$nextl"
		done
	fi
}

# Wine from not standard location
export PATH=$lower_dir/wine/bin:$current_dir:$PATH
export LD_LIBRARY_PATH=$lower_dir/wine/lib:$lower_dir/lib:$LD_LIBRARY_PATH
export WINEPREFIX=$HOME/.teamviewer/5
export WINEDLLPATH=$lower_dir/wine/lib/wine
export WINELOADER=$lower_dir/wine/bin/wine
export WINESERVER=$lower_dir/wine/bin/wineserver

setup_wine

exec >/$WINEPREFIX/winelog 2>&1

# Enable Subpixel Hinting if not already done
if ! [ -e $WINEPREFIX/fs_rgb.reg ]
then
  cp $lower_dir/wine/fs_rgb.reg $WINEPREFIX/fs_rgb.reg
  $WINELOADER regedit $WINEPREFIX/fs_rgb.reg
fi

exe="$1"
shift

# Go
if [ "$1" = "wineserver" ]
then
	shift
	exec "${WINESERVER:-wineserver}" "$@" 
else
	exec "${WINELOADER:-wine}" "$exe" "$@" 
fi

true

