#!/bin/bash

# As e2k builds for distro that's vastly different from Ubuntu/Debian and specially handles cross-compiling
# keep it in separate script for now
if [[ $GH_CPU_ARCH == e2k* ]]; then
	exec bash scripts/gha/deps_linux-e2k.sh
fi

. scripts/lib.sh

cd "$GITHUB_WORKSPACE" || exit 1

# "booo, bash feature!", -- posix sh users, probably
declare -A BASE_BUILD_PACKAGES SDL_BUILD_PACKAGES APPIMAGETOOL RUST_TARGET

# bzip2 and opus are added from submodules, freetype replaced by stb_truetype in this build, so it's just compiler toolchain
BASE_BUILD_PACKAGES[common]="desktop-file-utils"
BASE_BUILD_PACKAGES[amd64]="build-essential"
BASE_BUILD_PACKAGES[arm64]="build-essential"
BASE_BUILD_PACKAGES[i386]="gcc-multilib g++-multilib"
BASE_BUILD_PACKAGES[armhf]="crossbuild-essential-armhf libc6:armhf libstdc++6:armhf"
BASE_BUILD_PACKAGES[riscv64]="crossbuild-essential-riscv64"
BASE_BUILD_PACKAGES[ppc64el]="crossbuild-essential-ppc64el"

SDL_BUILD_PACKAGES[common]="cmake ninja-build"
# TODO: figure out how to install fcitx and ibus dev in cross compile environment on gha
# In theory, we better run this in limited container. Right now, some preinstalled PHP shit breaks libpcre builds
# and prevents us from installing crosscompiling packages
SDL_BUILD_PACKAGES[amd64]="libasound2-dev libpulse-dev \
	libaudio-dev libjack-dev libsndio-dev libsamplerate0-dev libx11-dev libxext-dev \
	libxrandr-dev libxcursor-dev libxfixes-dev libxi-dev libxss-dev libwayland-dev \
	libxkbcommon-dev libdrm-dev libgbm-dev libgl1-mesa-dev libgles2-mesa-dev \
	libegl1-mesa-dev libdbus-1-dev libudev-dev libpipewire-0.3-dev libdecor-0-dev"
SDL_BUILD_PACKAGES[i386]="${SDL_BUILD_PACKAGES[amd64]//-dev/-dev:i386} libjack0:i386" # test
SDL_BUILD_PACKAGES[arm64]=${SDL_BUILD_PACKAGES[amd64]}
SDL_BUILD_PACKAGES[armhf]=${SDL_BUILD_PACKAGES[amd64]//-dev/-dev:armhf}
SDL_BUILD_PACKAGES[riscv64]=${SDL_BUILD_PACKAGES[amd64]//-dev/-dev:riscv64}
SDL_BUILD_PACKAGES[ppc64el]=${SDL_BUILD_PACKAGES[amd64]//-dev/-dev:ppc64el}

APPIMAGETOOL[amd64]=https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
APPIMAGETOOL[i386]=https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-i686.AppImage
APPIMAGETOOL[arm64]=https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-aarch64.AppImage
APPIMAGETOOL[armhf]=https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-armhf.AppImage

RUST_TARGET[amd64]=x86_64-unknown-linux-gnu
RUST_TARGET[i386]=i686-unknown-linux-gnu
RUST_TARGET[arm64]=aarch64-unknown-linux-gnu
RUST_TARGET[armhf]=thumbv7neon-unknown-linux-gnueabihf
RUST_TARGET[riscv64]=riscv64gc-unknown-linux-gnu
RUST_TARGET[ppc64el]=powerpc64le-unknown-linux-gnu

regenerate_sources_list()
{
	# this is evil but to speed up update, specify all repositories manually
	sudo rm /etc/apt/sources.list
	sudo rm -rf /etc/apt/sources.list.d

	codename=$(grep DISTRIB_CODENAME /etc/lsb-release | cut -d= -f2)

	for i in "$codename" "$codename-updates" "$codename-backports" "$codename-security"; do
		echo "deb [arch=$GH_CPU_ARCH] http://azure.ports.ubuntu.com/ubuntu-ports $i main universe" | sudo tee -a /etc/apt/sources.list
		echo "deb [arch=amd64] http://azure.archive.ubuntu.com/ubuntu $i main universe" | sudo tee -a /etc/apt/sources.list
	done
}

if [ "$GH_CPU_ARCH" != "amd64" ] && [ "$GH_CPU_ARCH" != "arm64" ] && [ -n "$GH_CPU_ARCH" ]; then
	if [ "$GH_CPU_ARCH" != "i386" ] && [ "$GH_CPU_ARCH" != "armhf" ]; then
		regenerate_sources_list
	fi
	sudo dpkg --add-architecture "$GH_CPU_ARCH"
fi

sudo apt update || die
sudo apt install aptitude || die # aptitude is just more reliable at resolving dependencies

# shellcheck disable=SC2086 # splitting is intended here
sudo aptitude install -y ${BASE_BUILD_PACKAGES[common]} ${BASE_BUILD_PACKAGES[$GH_CPU_ARCH]} ${SDL_BUILD_PACKAGES[common]} ${SDL_BUILD_PACKAGES[$GH_CPU_ARCH]} || die

if [ -n "${APPIMAGETOOL[$GH_CPU_ARCH]}" ]; then
	wget -O appimagetool.AppImage "${APPIMAGETOOL[$GH_CPU_ARCH]}"
	chmod +x appimagetool.AppImage
fi

FFMPEG_ARCHIVE=$(get_ffmpeg_archive)
wget "https://github.com/FWGS/FFmpeg-Builds/releases/download/latest/$FFMPEG_ARCHIVE.tar.xz" -qO- | tar -xJf -
mv "$FFMPEG_ARCHIVE" ffmpeg

wget "https://github.com/libsdl-org/SDL/releases/download/release-$SDL_VERSION/SDL2-$SDL_VERSION.tar.gz" -qO- | tar -xzf -
mv "SDL2-$SDL_VERSION" SDL2_src

rustup target add "${RUST_TARGET[$GH_CPU_ARCH]}"
