# Copyright 1999-2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit desktop

ELECTRON_VERSION=42.2.0

DESCRIPTION="Official IVPN desktop GUI"
HOMEPAGE="https://www.ivpn.net/ https://github.com/ivpn/desktop-app"
SRC_URI="https://github.com/ivpn/desktop-app/archive/v${PV}.tar.gz -> ivpn-${PV}.tar.gz
	https://github.com/FlyingWaffleDev/gentoo-ivpn-deps/releases/download/ivpn-${PV}/${P}-npm-deps.tar.xz
	amd64? ( https://github.com/electron/electron/releases/download/v${ELECTRON_VERSION}/electron-v${ELECTRON_VERSION}-linux-x64.zip )"
S="${WORKDIR}/desktop-app-${PV}/ui"

LICENSE="GPL-3"
SLOT="0"
KEYWORDS="~amd64"
RESTRICT="mirror strip"

RDEPEND="!net-vpn/ivpn-ui-bin
	~net-vpn/ivpn-${PV}
	app-accessibility/at-spi2-core:2
	dev-libs/expat
	dev-libs/glib:2
	dev-libs/nspr
	dev-libs/nss
	media-libs/alsa-lib
	media-libs/mesa
	net-print/cups
	sys-apps/dbus
	virtual/libudev
	x11-libs/cairo
	x11-libs/gtk+:3
	x11-libs/libX11
	x11-libs/libXcomposite
	x11-libs/libXdamage
	x11-libs/libXext
	x11-libs/libXfixes
	x11-libs/libXrandr
	x11-libs/libxcb
	x11-libs/libxkbcommon
	x11-libs/pango"
BDEPEND="app-arch/unzip
	>=net-libs/nodejs-22.12.0[npm]"

QA_PREBUILT="opt/ivpn/ui/bin/*"

src_unpack() {
	unpack "ivpn-${PV}.tar.gz" "${P}-npm-deps.tar.xz"
}

src_compile() {
	local electron_dist="${T}/electron-dist"
	local npm_args=(
		--audit=false
		--color=false
		--fund=false
		--ignore-scripts
		--offline
		--progress=false
		--cache "${WORKDIR}/npm-cache"
	)
	export ELECTRON_BUILDER_CACHE="${T}/electron-builder-cache"
	export NO_UPDATE_NOTIFIER=1
	export npm_config_cache="${WORKDIR}/npm-cache"
	export npm_config_offline=true
	export npm_config_update_notifier=false

	npm ci "${npm_args[@]}" || die "npm ci failed"
	npm run build || die "UI compilation failed"

	mkdir "${electron_dist}" || die
	cp "${DISTDIR}/electron-v${ELECTRON_VERSION}-linux-x64.zip" \
		"${electron_dist}/" || die

	./node_modules/.bin/electron-builder \
		--linux dir \
		--x64 \
		--config electron-builder.config.js \
		--config.electronDist="${electron_dist}" \
		--publish never || die "Electron packaging failed"
}

src_install() {
	insinto /opt/ivpn/ui/bin
	doins -r dist/linux-unpacked/.
	fperms 0755 /opt/ivpn/ui/bin/{ivpn-ui,chrome-sandbox,chrome_crashpad_handler}

	insinto /opt/ivpn/ui
	doins References/Linux/ui/ivpnicon.svg
	domenu References/Linux/ui/IVPN.desktop
}