#!/bin/bash

cd
mkdir -p /sdcard/Android/data/com.termux/files/Download

. $PREFIX/glibc/opt/scripts/configs
. $PREFIX/glibc/opt/conf/path.conf &>/dev/null
. $PREFIX/glibc/opt/conf/cores.conf &>/dev/null
. $PREFIX/glibc/opt/conf/force_compatibility.conf &>/dev/null

function stop-all {
	rm -rf $PREFIX/tmp/pulse-*
	pulseaudio -k &>/dev/null
	unset PULSE_SERVER
	pkill pulseaudio
	rm -rf $PREFIX/tmp/.virgl_test &>/dev/null
	pkill virgl
	rm -rf $PREFIX/tmp/.virgl_test &>/dev/null
}
stop-all
if [ -e $PREFIX/glibc/opt/virgl/virgl-enabled ]; then
	chmod +x $PREFIX/glibc/opt/virgl/libvirgl_test_server.so
	TMPDIR=$PREFIX/tmp $PREFIX/glibc/opt/virgl/libvirgl_test_server.so &>/dev/null &
fi
sleep 1
if [ -e $PREFIX/glibc/opt/virgl/virgl-enabled ]; then
	chmod 777 $PREFIX/tmp/.virgl_test
fi
export RESOLUTION=1280x600
if [ "$STARTUP_COMPATIBILITY_MODE" = "1" ]; then
	autores=""
else
	autores=$(DISPLAY=:0 xrandr | grep current | awk '{print $8$9$10}' | tr -d ,)
fi
if [ ! "$autores" = "1280x1024" ] && [ ! "$autores" = "" ]; then
	export RESOLUTION=$autores
	echo "$autores">$PREFIX/glibc/opt/last-resolution.conf
elif [ -e $PREFIX/glibc/opt/last-resolution.conf ]; then
	export RESOLUTION=$(cat $PREFIX/glibc/opt/last-resolution.conf)
fi

chmod +x $PREFIX/glibc/bin/{box86,box64}
chmod +x $WINE_PATH/bin/{wine,wine64,wineserver}
patchelf --force-rpath --set-rpath $PREFIX/glibc/lib --set-interpreter $PREFIX/glibc/lib/ld-linux-aarch64.so.1 $PREFIX/glibc/bin/box64 &> /dev/null
patchelf --force-rpath --set-rpath $PREFIX/glibc/lib32 --set-interpreter $PREFIX/glibc/lib32/ld-linux-armhf.so.3 $PREFIX/glibc/bin/box86 &> /dev/null
rm -rf $PREFIX/glibc/bin/{wine,wine64,wineserver}
ln -sf $WINE_PATH/bin/wine $PREFIX/glibc/bin/wine &> /dev/null
ln -sf $WINE_PATH/bin/wine64 $PREFIX/glibc/bin/wine64 &> /dev/null
ln -sf $WINE_PATH/bin/wineserver $PREFIX/glibc/bin/wineserver &> /dev/null

export GLIBC_BIN=$PREFIX/glibc/bin
## export PATH=$PREFIX/glibc/wine/lib:$PREFIX/glibc/wine/lib64:$PATH &> /dev/null
unset LD_PRELOAD &> /dev/null

if [ ! -e $WINEPREFIX/.update-timestamp ]; then
	echo "Configuring $WINEPREFIX. This may take a few minutes"
	rm -rf $WINEPREFIX
	unset BOX86_DYNAREC_BIGBLOCK
	unset BOX64_DYNAREC_BIGBLOCK
	unset WINEESYNC
	unset WINEESYNC_TERMUX
	unset BOX86_DYNAREC_CALLRET
	unset BOX64_DYNAREC_CALLRET
	if [ -e $WINE_PATH/lib/wine/i386-windows/shell32-bak.dll ]; then
		mv $WINE_PATH/lib/wine/i386-windows/shell32-bak.dll $WINE_PATH/lib/wine/i386-windows/shell32.dll &>/dev/null
		mv $WINE_PATH/lib/wine/x86_64-windows/shell32-bak.dll $WINE_PATH/lib/wine/x86_64-windows/shell32.dll &>/dev/null
		mv $WINE_PATH/lib64/wine/x86_64-windows/shell32-bak.dll $WINE_PATH/lib64/wine/x86_64-windows/shell32.dll &>/dev/null
	fi

	WINEDLLOVERRIDES="winegstreamer=disabled,mscoree=disabled" taskset -c $PRIMARY_CORES $GLIBC_BIN/box64 $GLIBC_BIN/wine64 wineboot -u >${LOG_PATH}_wineboot.txt 2>&1
	## DISPLAY=:0 $GLIBC_BIN/box64 $GLIBC_BIN/wine explorer /desktop=shell,$RESOLUTION winecfg
	if [ ! -e $WINEPREFIX/.update-timestamp ]; then
		echo "Cannot configure. See ${LOG_PATH}_wineboot.txt"
		$GLIBC_BIN/box64 $GLIBC_BIN/wineserver -k &>/dev/null
		export LD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so
		rm -rf $PREFIX/tmp/pulse-*
		pulseaudio -k &>/dev/null
		pkill -f pulseaudio
		sleep 5
		exit
	fi
	
	echo "disable">$WINEPREFIX/.update-timestamp
	7z x $PREFIX/glibc/opt/prefix/drive_c.7z -o$WINEPREFIX/drive_c -y &>/dev/null
	echo "Installing DirectX"
	7z x $PREFIX/glibc/opt/prefix/directx.7z -o$WINEPREFIX/drive_c -y &>/dev/null
	echo "Installing Start Menu shortcuts"
	cp -r $PREFIX/glibc/opt/prefix/start/* "$WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start Menu" &> /dev/null
	rm -rf "$WINEPREFIX/dosdevices/z:"
	ln -sf /data/data/com.termux/files "$WINEPREFIX/dosdevices/z:"
	ln -sf /sdcard/Download "$WINEPREFIX/dosdevices/d:"
	ln -sf /sdcard/Android/data/com.termux/files/Download "$WINEPREFIX/dosdevices/e:"
	echo "Installing registry tweaks"
	cp $PREFIX/glibc/opt/prefix/marlett.ttf $WINEPREFIX/drive_c/windows/Fonts
	taskset -c $PRIMARY_CORES $GLIBC_BIN/box64 $GLIBC_BIN/wine64 regedit $PREFIX/glibc/opt/prefix/user.reg &>/dev/null
	taskset -c $PRIMARY_CORES $GLIBC_BIN/box64 $GLIBC_BIN/wine64 regedit $PREFIX/glibc/opt/prefix/system.reg &>/dev/null
	if [ ! "$STARTUP_COMPATIBILITY_MODE" = "1" ]; then
		echo "Installing PhysX 9.10, 7-Zip, Visual C++ Redistributable"
		DISPLAY=:0 taskset -c $PRIMARY_CORES $GLIBC_BIN/box64 $GLIBC_BIN/wine64 explorer /desktop=shell,640x480 cmd /c "start Z:\\usr\\glibc\\opt\\apps\\install.bat" >${LOG_PATH}_redist.txt 2>&1 &> /dev/null
		if [ ! -e $PREFIX/glibc/opt/virgl/virgl-enabled ]; then
			sleep 1
			echo "Installing dxvk-async-2.3"
		DISPLAY=:0 taskset -c $PRIMARY_CORES $GLIBC_BIN/box64 $GLIBC_BIN/wine64 explorer /desktop=shell,640x480 cmd /c "cd Z:\\usr\\glibc\\opt\\prefix\\d3d && start Z:\\usr\\glibc\\opt\\prefix\\d3d\\dxvk-gplasync-2.3.bat" &> /dev/null
			sleep 1
			echo "Installing turnip-v4"
			DISPLAY=:0 taskset -c $PRIMARY_CORES $GLIBC_BIN/box64 $GLIBC_BIN/wine64 explorer /desktop=shell,640x480 cmd /c "cd Z:\\usr\\glibc\\opt\\prefix\\mesa && start Z:\\usr\\glibc\\opt\\prefix\\mesa\\turnip-v4.bat" &>/dev/null
		else
			sleep 1
			echo "Installing wined3d-8.0.2"
			DISPLAY=:0 taskset -c $PRIMARY_CORES $GLIBC_BIN/box64 $GLIBC_BIN/wine64 explorer /desktop=shell,640x480 cmd /c "cd Z:\\usr\\glibc\\opt\\prefix\\d3d && start Z:\\usr\\glibc\\opt\\prefix\\d3d\\wined3d-8.0.2.bat" &>/dev/null
		fi
	fi
	sleep 3
	
	if [ -e $WINE_PATH/lib/wine/i386-unix/libwine.so.1 ]; then
		mv $WINE_PATH/lib/wine/i386-windows/shell32.dll $WINE_PATH/lib/wine/i386-windows/shell32-bak.dll &>/dev/null
		mv $WINE_PATH/lib/wine/x86_64-windows/shell32.dll $WINE_PATH/lib/wine/x86_64-windows/shell32-bak.dll &>/dev/null
		mv $WINE_PATH/lib64/wine/x86_64-windows/shell32.dll $WINE_PATH/lib64/x86_64-windows/shell32-bak.dll &>/dev/null
	else
		rm -rf $WINE_PATH/lib/wine/i386-unix/shell32.dll.so &>/dev/null
		rm -rf $WINE_PATH/lib/wine/x86_64-unix/shell32.dll.so &>/dev/null
		rm -rf $WINE_PATH/lib64/wine/x86_64-unix/shell32.dll.so &>/dev/null
	fi
	$GLIBC_BIN/box64 $GLIBC_BIN/wineserver -k &>/dev/null
fi

if ! ls $PREFIX/glibc/opt/prefix/start/Registry/2.* &>/dev/null; then
	cp -r $PREFIX/glibc/opt/prefix/start/Registry/2.* $WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start\ Menu/Registry
fi

rm -rf "$WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start Menu/Install/media foundation (for RE)"

if [ ! -e "$WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start Menu/Install/media foundation (for RE).lnk" ]; then
	cp "$PREFIX/glibc/opt/prefix/start/Install/media foundation (for RE).lnk" "$WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start Menu/Install"
fi

rm -rf $PREFIX/glibc/opt/prefix/start-default

rm -d $PREFIX/glibc/opt/prefix/start/Install/1.* &>/dev/null
rm -d $PREFIX/glibc/opt/prefix/start/Install/2.* &>/dev/null
rm -d $WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start\ Menu/Install/1.* &>/dev/null
rm -d $WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start\ Menu/Install/2.* &>/dev/null

if ls $PREFIX/glibc/opt/prefix/start/Install/1.* &>/dev/null && ls $WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start\ Menu/Install/1.* &>/dev/null; then
	rm -rf $WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start\ Menu/Install/1.*/* &>/dev/null
	cp $PREFIX/glibc/opt/prefix/start/Install/1.*/* $WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start\ Menu/Install/1.* &>/dev/null
fi

if ls $PREFIX/glibc/opt/prefix/start/Install/2.* &>/dev/null && ls $WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start\ Menu/Install/2.* &>/dev/null; then
	rm -rf $WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start\ Menu/Install/2.*/* &>/dev/null
	cp $PREFIX/glibc/opt/prefix/start/Install/2.*/* $WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start\ Menu/Install/2.* &>/dev/null
fi

##if [ ! -e $WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start\ Menu/DXVK\ Settings ]; then
##	cp -r $PREFIX/glibc/opt/prefix/start/DXVK\ Settings $WINEPREFIX/drive_c/ProgramData/Microsoft/Windows/Start\ Menu &>/dev/null
##fi

## $GLIBC_BIN/box64 $GLIBC_BIN/wineserver -k &>/dev/null
#!/data/data/com.termux/files/usr/bin/bash

# Kill open X11 processes
kill -9 $(pgrep -f "termux.x11") &> /dev/null

# Enable PulseAudio over Network
pulseaudio --start --load="module-native-protocol-tcp auth-ip-acl=127.0.0.1 auth-anonymous=1" --exit-idle-time=-1 

# Prepare termux-x11 session
export XDG_RUNTIME_DIR=${TMPDIR}
nohup termux-x11 :0 >/dev/null 2>&1 &

# Wait a bit until termux-x11 gets started.
sleep 3

# Launch Termux X11 main activity
am start --user 0 -n com.termux.x11/com.termux.x11.MainActivity >/dev/null 2>&1 & 
sleep 1

# Set audio server
export PULSE_SERVER=127.0.0.1

# Run XFCE4 Desktop
env DISPLAY=:0 dbus-launch --exit-with-session xfce4-session >/dev/null 2>&1 &

echo "Type Done To Stop"
REBOOT=0
while true; do
read -t 3 i
case "$i" in
Done)
	kill -9 $(pgrep -f "termux.x11") &> /dev/null
	pkill pulseaudio 2>/dev/null
	pkill virgl 2>/dev/null
	break
;;
esac
done

export LD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so
stop-all

if [ "$REBOOT" = "1" ]; then
	exec $0
fi
