#!/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=1280x1024
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
patchelf --force-rpath --set-rpath $PREFIX/glibc/lib32 --set-interpreter $PREFIX/glibc/lib32/ld-linux-armhf.so.3 $PREFIX/glibc/bin/box86
rm -rf $PREFIX/glibc/bin/{wine,wine64,wineserver}
ln -sf $WINE_PATH/bin/wine $PREFIX/glibc/bin/wine
ln -sf $WINE_PATH/bin/wine64 $PREFIX/glibc/bin/wine64
ln -sf $WINE_PATH/bin/wineserver $PREFIX/glibc/bin/wineserver

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

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
	
	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

# Check if the user has root privileges
if [ "$(id -u)" != "0" ]; then
    echo "requires root, Please run it as root."
	sleep 3
    exit 1
fi

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

# Root
echo "Cleaning RAM..."
sync && echo 3 > /proc/sys/vm/drop_caches

# Terminate unnecessary processes
echo "Terminating unnecessary processes..."
killall -9 $(pgrep -f "xfce4-session") 2>/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 &> /dev/null

# 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 >/dev/null 2>&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 running processes
rm -rf $PREFIX/tmp/pulse-* &>/dev/null
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

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