# Copyright 2022-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

MATRIX_RUST_SDK_V="0.1.0-beta.1"
DESCRIPTION="A moderation tool for Matrix"
HOMEPAGE="https://github.com/matrix-org/mjolnir"
# TODO: replace PF with P in deps tarball on bump
SRC_URI="
	https://github.com/matrix-org/mjolnir/archive/refs/tags/v${PV}.tar.gz -> ${P}.tar.gz
	https://tastytea.de/files/gentoo/${PF}-deps.tar.xz
	elibc_glibc? (
		amd64? (
			https://github.com/matrix-org/matrix-rust-sdk/releases/download/matrix-sdk-crypto-nodejs-v${MATRIX_RUST_SDK_V}/matrix-sdk-crypto.linux-x64-gnu.node -> matrix-sdk-crypto-${MATRIX_RUST_SDK_V}.linux-x64-gnu.node
		)
	)
	elibc_musl? (
		amd64? (
			https://github.com/matrix-org/matrix-rust-sdk/releases/download/matrix-sdk-crypto-nodejs-v${MATRIX_RUST_SDK_V}/matrix-sdk-crypto.linux-x64-musl.node -> matrix-sdk-crypto-${MATRIX_RUST_SDK_V}.linux-x64-musl.node
		)
	)
"

# NOTE: to generate the deps archive:
#       tar -xf /var/cache/distfiles/${P}.tar.gz && cd ${P}
#       yarn --cache-folder ./yarn-cache install
#       tar -caf ${P}-deps.tar.xz yarn-cache

LICENSE="0BSD Apache-2.0 BSD BSD-2 ISC MIT PYTHON Unlicense"
SLOT="0"
KEYWORDS="~amd64"
IUSE="doc"

RDEPEND=">=net-libs/nodejs-18"
BDEPEND="
	|| (
		net-libs/nodejs[corepack]
		sys-apps/yarn
	)
	dev-lang/typescript
"

MY_YARNOPTS="--offline --non-interactive --no-progress --verbose"

PATCHES=( "${FILESDIR}"/${P}-node-20.patch )

src_prepare() {
	default

	yarn ${MY_YARNOPTS} --cache-folder ../yarn-cache install || die

	local my_libc="gnu"
	use elibc_musl && my_libc="musl"
	local my_arch="x64"

	# this is not cached but downloaded by a script usually
	mkdir -p node_modules/@matrix-org/matrix-sdk-crypto-nodejs || die
	cp "${DISTDIR}"/matrix-sdk-crypto-${MATRIX_RUST_SDK_V}.linux-${my_arch}-${my_libc}.node \
		node_modules/@matrix-org/matrix-sdk-crypto-nodejs/matrix-sdk-crypto.linux-${my_arch}-${my_libc}.node \
		|| die
}

src_compile() {
	yarn ${MY_YARNOPTS} build || die
}

src_install() {
	insinto /opt/${PN}
	doins -r node_modules

	insinto /opt/${PN}/${PN}
	doins -r lib/*

	keepdir /opt/${PN}/config

	einstalldocs
	dodoc config/default.yaml
	use doc && dodoc docs/*

	newinitd "${FILESDIR}"/${PN}.initd ${PN}
}

pkg_postinst() {
	if [[ ! -f "${EROOT}"/opt/${PN}/config/production.yaml ]]; then
		elog "Copy the configuration example from /usr/share/doc/${PF}/default.yaml*"
		elog "into /opt/${PN}/config/production.yaml and edit it."
	fi
}