EAPI=8

EGIT_REPO_URI="https://gitlab.com/kelseythedreamer/omorifortune.git"
EGIT_COMMIT="v143.143143"

inherit git-r3

DESCRIPTION="omori fortune generator but in 11 languages for no reason"
HOMEPAGE="https://gitlab.com/kelseythedreamer/omorifortune"

LICENSE="BSD-2"
SLOT="143"
KEYWORDS="~amd64"
IUSE="+lua rust c cpp csharp python zig javascript brainfuck asm go webkit"

DEPEND=""
RDEPEND="
	lua? ( >=dev-lang/lua-5.4 )
	rust? ( dev-lang/rust )
	c? ( llvm-core/clang )
	cpp? ( llvm-core/clang )
	csharp? ( dev-lang/mono )
	python? ( >=dev-lang/python-3.10 )
	zig? ( dev-lang/zig )
	javascript? ( net-libs/nodejs )
	go? ( dev-lang/go )
	games-misc/cowsay
	webkit? (
		net-libs/webkit-gtk:4.1
		x11-libs/gtk+:3
	)
"
BDEPEND="
	c? ( llvm-core/clang )
	cpp? ( llvm-core/clang )
	rust? ( dev-lang/rust )
	go? ( dev-lang/go )
	zig? ( dev-lang/zig )
	asm? ( dev-lang/nasm )
"

QA_FLAGS_IGNORED="usr/bin/omorifortune-rs"

src_prepare() {
	default
}

src_compile() {
	if use csharp; then
		mcs -out:csharp/omorifortune-cs csharp/Program.cs || die
	fi

	if use python; then
		chmod +x python/omorifortune.py || die
	fi

	if use zig; then
		cd zig && zig build-exe main.zig -O ReleaseSmall -femit-bin=omorifortune-zig || die
		cd ..
	fi

	if use javascript; then
		chmod +x javascript/omorifortune.js || die
	fi

	use lua && { chmod +x lua/omorifortune.lua || die; }
	use c && { cd c && emake && cd .. || die; }
	use cpp && { cd cpp && emake && cd .. || die; }
	use rust && { cd rust && cargo build --release && cp target/release/omorifortune-rs . && cd .. || die; }
	use go && { cd go && go build -o omorifortune-go . && cd .. || die; }
	use asm && { cd asm && emake && cd .. || die; }
	use brainfuck && { cd brainfuck && emake && cd .. || die; }
	use webkit && { cd webkit && emake && cd .. || die; }
}

src_install() {
	insinto /usr/share/omorifortune
	doins -r messages/
	doins -r web/

	use rust && { dobin rust/omorifortune-rs || die; }
	use c && { dobin c/omorifortune-c || die; }
	use cpp && { dobin cpp/omorifortune-cpp || die; }
	use zig && { dobin zig/omorifortune-zig || die; }
	use asm && { dobin asm/omorifortune-asm || die; }
	use go && { dobin go/omorifortune-go || die; }
	use brainfuck && { dobin brainfuck/omorifortune-bf || die; }
	use brainfuck && { dobin brainfuck/bf_interp || die; }
	use brainfuck && { insinto /usr/share/omorifortune; doins brainfuck/omorifortune.bf; }
	use webkit && { dobin webkit/omorifortune-webkit || die; }

	insinto /usr/share/cowsay/cows
	doins "${FILESDIR}/omori.cow"

	if use lua; then
		insinto /usr/share/omorifortune
		newins lua/omorifortune.lua omorifortune.lua
		doins lua/messages-calm.lua lua/messages-dark.lua
		cat > "${T}/omorifortune-lua" <<- WRAPPER || die
			#!/bin/sh
			exec lua /usr/share/omorifortune/omorifortune.lua "\$@"
		WRAPPER
		dobin "${T}/omorifortune-lua" || die
	fi

	if use python; then
		insinto /usr/share/omorifortune
		newins python/omorifortune.py omorifortune.py
		cat > "${T}/omorifortune-py" <<- WRAPPER || die
			#!/bin/sh
			exec python3 /usr/share/omorifortune/omorifortune.py "\$@"
		WRAPPER
		dobin "${T}/omorifortune-py" || die
	fi

	if use javascript; then
		insinto /usr/share/omorifortune
		newins javascript/omorifortune.js omorifortune.js
		cat > "${T}/omorifortune-js" <<- WRAPPER || die
			#!/bin/sh
			exec node /usr/share/omorifortune/omorifortune.js "\$@"
		WRAPPER
		dobin "${T}/omorifortune-js" || die
	fi

	if use csharp; then
		insinto /usr/share/omorifortune
		newins csharp/omorifortune-cs omorifortune-cs
		cat > "${T}/omorifortune-cs" <<- WRAPPER || die
			#!/bin/sh
			exec mono /usr/share/omorifortune/omorifortune-cs "\$@"
		WRAPPER
		dobin "${T}/omorifortune-cs" || die
	fi
}

pkg_postinst() {
	elog ""
	elog "messages have two categories:"
	elog "  calm - atmospheric, less intense"
	elog "  dark - psychological horror. you were warned."
	elog ""
	elog "  why did you do this"
	elog ""
}