#!/usr/bin/env bash

set -euo pipefail

log() {
	echo ":: $*" >&2
}

err() {
	echo "E: $*" >&2
}

add_env() {
	local file name

	for name; do
		file="${XDG_CONFIG_HOME:-"$HOME/.config"}/${name}.conf"
		if ! [[ -f "${file}" ]]; then
			continue
		fi
		source "${file}"
	done
}

add_flags() {
	declare -g -a flags
	local file name

	for name; do
		file="${XDG_CONFIG_HOME:-"$HOME/.config"}/${name}-flags.conf"
		if ! [[ -f "${file}" ]]; then
			continue
		fi
		while IFS='' read -r line; do
			if ! [[ "${line}" =~ ^[[:space:]]*(#|$) ]]; then
				case "${line}" in
				--patch-krisp) PATCH_KRISP=1 ;;
				*)             flags+=("${line}")
				esac
			fi
		done <"${file}"
	done
}

flags=()
unset PATCH_KRISP
add_env discord
add_flags electron
add_flags electron37
add_flags discord

#
# patch Krisp binary to remove signature check
#

krisp_bin="${XDG_CONFIG_HOME:-"$HOME/.config"}/"

if [[ ${PATCH_KRISP,,} =~ ^(true|yes|y|1)$ ]]; then
	if ! command -v python &>/dev/null; then
		err "unable to patch Krisp: python not found"
	elif ! python -c 'import capstone; import elftools' &>/dev/null; then
		err "unable to patch Krisp: python-capstone and python-pyelftools not found"
	elif ! [[ -w "${krisp_bin}" ]]; then
		err "unable to patch Krisp: ${krisp_bin@Q} not found or not writable"
	else
		log "patching Krisp binary: ${krisp_bin@Q}"
		python -B "/usr/lib/discord/krisp-patcher.py" "${krisp_bin}"
	fi
fi

exec /usr/lib/electron37/electron \
	/usr/lib/discord/resources/app.asar \
	--gtk-version=3 \
	"${flags[@]}" "$@"
