#!/bin/bash
set -euo pipefail

SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
APP_ROOT_DIR="$(dirname "$SCRIPT_DIR")"
. "$APP_ROOT_DIR/config.sh"

if [ $# -lt 2 ]; then
	echo "Usage: $0 /path/to/src/firefox x64|arm64|win32" >&2
	exit 1
fi

gecko_path=$1
arch=$2

if [ ! -d "$gecko_path" ]; then
	echo "$gecko_path is not a directory" >&2
	exit 1
fi

# Install required Rust version
rustup toolchain install $RUST_VERSION
if [ $arch = "x64" ]; then
	rust_target=x86_64
elif [ $arch = "arm64" ]; then
	rust_target=aarch64
elif [ $arch = "win32" ]; then
	rust_target=i686
else
	echo "Unknown architecture $arch" >&2
	exit 1
fi
rustup default $RUST_VERSION
rustup target add $rust_target-pc-windows-msvc

cp "$SCRIPT_DIR/mozconfig" "$gecko_path"

if [[ $arch == "arm64" || $arch == "win32" ]]; then
	export Z_ARCH=$arch
	export RUST_TARGET=$rust_target-pc-windows-msvc
fi

cd "$gecko_path"
./mach build
./mach package

# Copy the packaged ZIP back to app/win/ for launcher/xul.dll extraction
case $arch in
	x64)   zip_suffix=win64 ;;
	arm64) zip_suffix=win64-aarch64 ;;
	win32) zip_suffix=win32 ;;
esac
zip_file=$(ls "$gecko_path"/obj-*/dist/firefox-*.en-US.${zip_suffix}.zip 2>/dev/null | head -1) || true
if [ -z "$zip_file" ] || [ ! -f "$zip_file" ]; then
	echo "Could not find packaged zip for $arch in $gecko_path/obj-*/dist/" >&2
	exit 1
fi
cp "$zip_file" "$SCRIPT_DIR/"
echo "Copied $(basename "$zip_file") to $SCRIPT_DIR"
