# Copyright 2026 Nadeŭka <me+oss@nadevko.cc>
# Distributed under the terms of the GNU General Public License v2
# Based on gui-office/thunderbird-bin-156.0.1::nadevko
EAPI=8
: ${WMCLASS:='thunderbird-daily'}
: ${MOZ_APP_ARGS:='--name=thunderbird-daily-bin'}
[[ -v MOZ_GMP_PLUGIN_LIST ]] || MOZ_GMP_PLUGIN_LIST=( gmp-gmpopenh264 gmp-widevinecdm )

VERIFY_SIG_OPENPGP_KEY_PATH="${BROOT}"/usr/share/openpgp-keys/mozilla.asc
inherit desktop linux-info optfeature pax-utils verify-sig xdg

MY_PV="158.0a1"
BUILD_ID="${PV##*_p}"

YYYY="${BUILD_ID:0:4}"
MM="${BUILD_ID:4:2}"
DD="${BUILD_ID:6:2}"
HH="${BUILD_ID:8:2}"
MIN="${BUILD_ID:10:2}"
SEC="${BUILD_ID:12:2}"

BUILD_DIR="${YYYY}-${MM}-${DD}-${HH}-${MIN}-${SEC}-comm-central"
BASE_URI="https://archive.mozilla.org/pub/thunderbird/nightly/${YYYY}/${MM}/${BUILD_DIR}"
BASE_L10N_URI="https://archive.mozilla.org/pub/thunderbird/nightly/${YYYY}/${MM}/${BUILD_DIR}-l10n"

DESCRIPTION='Thunderbird Mail and Calendar Client (Daily channel)'
HOMEPAGE='https://www.thunderbird.net/channel/'
SRC_URI="
	amd64? (
		${BASE_URI}/thunderbird-${MY_PV}.en-US.linux-x86_64.tar.xz -> ${P}-amd64.tar.xz
		verify-sig? ( ${BASE_URI}/thunderbird-${MY_PV}.en-US.linux-x86_64.tar.xz.asc -> ${P}-amd64.tar.xz.asc )
	)
	arm64? (
		${BASE_URI}/thunderbird-${MY_PV}.en-US.linux-aarch64.tar.xz -> ${P}-arm64.tar.xz
		verify-sig? ( ${BASE_URI}/thunderbird-${MY_PV}.en-US.linux-aarch64.tar.xz.asc -> ${P}-arm64.tar.xz.asc )
	)
"
S="${WORKDIR}"/thunderbird

LICENSE='MPL-2.0 GPL-2 LGPL-2.1'
SLOT=0
KEYWORDS=~amd64

IUSE='+gmp-autoupdate verify-sig wayland'
RESTRICT='!verify-sig? ( test ) strip'

QA_PREBUILT="opt/${PN}/*"

RDEPEND='
	|| (
		media-libs/libpulse
		media-sound/apulse
	)
	>=app-accessibility/at-spi2-core-2.46.0:2
	>=dev-libs/glib-2.26:2
	>=media-libs/freetype-2.4.10
	>=x11-libs/cairo-1.10[X]
	>=x11-libs/gtk+-3.11:3[X,wayland?]
	media-libs/alsa-lib
	media-libs/fontconfig
	media-video/ffmpeg
	sys-apps/dbus
	virtual/freedesktop-icon-theme
	x11-libs/gdk-pixbuf:2
	x11-libs/libX11
	x11-libs/libxcb
	x11-libs/libXcomposite
	x11-libs/libXcursor
	x11-libs/libXdamage
	x11-libs/libXext
	x11-libs/libXfixes
	x11-libs/libXi
	x11-libs/libXrandr
	x11-libs/libXrender
'
BDEPEND='
	app-arch/unzip
	app-misc/jq
	verify-sig? ( >=res-openpgp/mozilla-20260806 )
'

MOZ_LANGS=(
	af ar ast be bg br ca cak cs cy da de dsb el en-CA en-GB es-AR es-ES
	es-MX et eu fi fr fy-NL ga-IE gd gl he hr hsb hu hy-AM id is it ja ka
	kab kk ko lt lv mk ms nb-NO nl nn-NO pa-IN pl pt-BR pt-PT rm ro ru sk
	sl sq sr sv-SE th tr uk uz vi zh-CN zh-TW
)
MOZ_TOO_REGIONALIZED_FOR_L10N=(
	fy-NL ga-IE hy-AM nb-NO nn-NO pa-IN sv-SE
)
for _lang in "${MOZ_LANGS[@]}"; do
	if has ${_lang} "${MOZ_TOO_REGIONALIZED_FOR_L10N[@]}"; then
		_xflag=${_lang%%-*}
	else
		_xflag=${_lang}
	fi

	SRC_URI+="
		l10n_${_xflag}? (
			${BASE_L10N_URI}/linux-x86_64/xpi/thunderbird-${MY_PV}.${_lang}.langpack.xpi -> ${P}-${_lang}.xpi
		)
	"
	IUSE+=" l10n_${_xflag}"
done
unset _lang _xflag

pkg_setup() {
	CONFIG_CHECK='~SECCOMP'
	WARNING_SECCOMP='CONFIG_SECCOMP not set! DRM-protected content will not work'
	linux-info_pkg_setup
}

src_unpack() {
	if use verify-sig; then
		local tarball
		use amd64 && tarball="${P}-amd64.tar.xz"
		use arm64 && tarball="${P}-arm64.tar.xz"
		verify-sig_verify_detached "${DISTDIR}/${tarball}" "${DISTDIR}/${tarball}.asc"
	fi
	default
}

src_install() {
	local dest=/opt/${PN}

	# /opt
	dodir "${dest}"
	cp -a . "${ED}${dest}" || die
	touch "${ED}${dest}"/is-packaged-app || die

	# bins & wrappers
	cp "${FILESDIR}"/${PN} "${T}" || die
	local exports=MOZ_APP_LAUNCHER
	if has_version -r media-sound/apulse[-sdk]; then
		echo -n "LD_LIBRARY_PATH=\"${EPREFIX}/usr/$(get_libdir)" >> "${T}"/${PN} || die
		echo '/apulse${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}"' >> "${T}"/${PN} || die
		exports+=' LD_LIBRARY_PATH'
	fi
	cat >> "${T}"/${PN} <<-EOF || die
		MOZ_APP_LAUNCHER='${EPREFIX}/usr/bin/${PN}'
		export ${exports}
		exec '${dest}/thunderbird' ${MOZ_APP_ARGS} "\$@"
	EOF
	dobin "${T}"/${PN}

	# configs
	local policies="${ED}${dest}/distribution/policies.json"
	if [[ -f ${policies} ]]; then
		jq -s '.[0] * .[1]' "${policies}" "${FILESDIR}"/policies.json > "${T}"/policies.json || die
	else
		cp "${FILESDIR}"/policies.json "${T}" || die
	fi
	insinto "${dest}"/distribution
	doins "${T}"/policies.json

	cp "${FILESDIR}"/maintainer-prefs.js "${T}" || die
	if ! use gmp-autoupdate; then
		local plugin
		for plugin in "${MOZ_GMP_PLUGIN_LIST[@]}"; do
			echo "pref(\"media.${plugin}.autoupdate\", false);" >> "${T}"/maintainer-prefs.js || die
		done
	fi
	insinto "${dest}"/defaults/pref
	doins "${T}"/maintainer-prefs.js

	# desktop
	sed \
		-e "s|@MOZ_APP_EXEC@|${EPREFIX}/usr/bin/${PN}|g" \
		-e "s|@WMCLASS@|${WMCLASS}|g" \
		"${FILESDIR}"/${PN}.desktop > "${T}"/${PN}.desktop || die
	domenu "${T}"/${PN}.desktop

	# icons
	local icon size icon_installed=0
	for icon in chrome/icons/default/default*.png browser/chrome/icons/default/default*.png; do
		[[ -f "${icon}" ]] || continue
		size=${icon##*/default}
		newicon -s "${size%.png}" "${icon}" ${PN}.png
		icon_installed=1
	done
	[[ ${icon_installed} -eq 1 ]] || die 'No program icons could be installed'

	if [[ -f chrome/icons/default/TB-symbolic.svg ]]; then
		insinto /usr/share/icons/hicolor/symbolic/apps
		newins chrome/icons/default/TB-symbolic.svg ${PN}-symbolic.svg
	fi

	# language packs
	local lang xflag emid
	for lang in "${MOZ_LANGS[@]}"; do
		if has ${lang} "${MOZ_TOO_REGIONALIZED_FOR_L10N[@]}"; then
			xflag=${lang%%-*}
		else
			xflag=${lang}
		fi

		use l10n_${xflag} || continue
		emid=$(unzip -p "${DISTDIR}/${P}-${lang}.xpi" manifest.json |
			jq -r '.browser_specific_settings.gecko.id // .applications.gecko.id')
		[[ -n ${emid} && ${emid} != null ]] || emid="langpack-${lang}@thunderbird.mozilla.org"
		insinto "${dest}"/distribution/extensions
		newins "${DISTDIR}"/${P}-${lang}.xpi ${emid}.xpi
	done

	# dictionaries
	rm -rf "${ED}${dest}"/dictionaries || die
	dosym "${EPREFIX}"/usr/share/hunspell "${dest}"/dictionaries

	# docs
	einstalldocs

	# permissions & security
	pax-mark m "${ED}${dest}"/{thunderbird,thunderbird-bin,crashhelper,crashreporter,gfxtest,pingsender,updater,rnpkeys,rnp-cli}
}

pkg_postinst() {
	xdg_pkg_postinst

	use gmp-autoupdate ||
		elog "USE='-gmp-autoupdate' disabled auto-updates for: ${MOZ_GMP_PLUGIN_LIST[*]}"

	optfeature 'desktop integration' sys-apps/xdg-desktop-portal
	optfeature 'fallback mouse cursor theme e.g. on WMs' gnome-base/gsettings-desktop-schemas
	optfeature 'location detection via Wi-Fi' net-misc/networkmanager
	optfeature 'pdf and web pages printing' net-print/cups
	optfeature 'speech synthesis (text-to-speech) support' app-accessibility/speech-dispatcher
	optfeature 'system spell checking dictionaries' app-text/hunspell
	use wayland && optfeature 'wayland screen sharing' media-video/pipewire
}