# Copyright 2025 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

PYTHON_COMPAT=( python3_{10..13} )
DISTUTILS_SINGLE_IMPL=1
DISTUTILS_USE_PEP517=setuptools

inherit distutils-r1 systemd

DESCRIPTION="FastAPI wrapper for Kokoro-82M text-to-speech model"
HOMEPAGE="https://github.com/remsky/Kokoro-FastAPI"
SRC_URI="https://github.com/remsky/Kokoro-FastAPI/archive/v${PV}.tar.gz -> ${P}.tar.gz
	https://github.com/remsky/Kokoro-FastAPI/releases/download/v0.1.4/kokoro-v1_0.pth -> ${P}-kokoro-v1_0.pth
  https://github.com/remsky/Kokoro-FastAPI/releases/download/v0.1.4/config.json -> ${P}-kokoro-v1_0-config.json"
IUSE="standalone test"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="~amd64"

# shellcheck disable=SC2016
RDEPEND="standalone? (
		acct-group/kokoro-fastapi
		acct-user/kokoro-fastapi
	)
	$(python_gen_cond_dep '
		>=dev-python/aiofiles-23.2.1[${PYTHON_USEDEP}]
		>=dev-python/av-14.2.0[${PYTHON_USEDEP}]
		>=dev-python/click-8.0.0[${PYTHON_USEDEP}]
		dev-python/espeakng-loader[${PYTHON_USEDEP}]
		dev-python/fastapi[${PYTHON_USEDEP}]
		>=dev-python/inflect-7.5.0[${PYTHON_USEDEP}]
		dev-python/loguru[${PYTHON_USEDEP}]
		>=dev-python/matplotlib-3.10.0[${PYTHON_USEDEP}]
		dev-python/munch[${PYTHON_USEDEP}]
		>=media-libs/mutagen-1.47.0[${PYTHON_USEDEP}]
		>=dev-python/numpy-1.26.0[${PYTHON_USEDEP}]
		>=dev-python/openai-1.59.6[${PYTHON_USEDEP}]
		>=dev-python/phonemizer-fork-3.3.2[${PYTHON_USEDEP}]
		>=dev-python/psutil-6.1.1[${PYTHON_USEDEP}]
		>=dev-python/pydantic-2.10.4[${PYTHON_USEDEP}]
		>=dev-python/pydantic-settings-2.7.0[${PYTHON_USEDEP}]
		>=dev-python/pydub-0.25.1[${PYTHON_USEDEP}]
		dev-python/python-dotenv[${PYTHON_USEDEP}]
		dev-python/regex[${PYTHON_USEDEP}]
		dev-python/requests[${PYTHON_USEDEP}]
		dev-python/scipy[${PYTHON_USEDEP}]
		dev-python/soundfile[${PYTHON_USEDEP}]
		dev-python/spacy[${PYTHON_USEDEP}]
		dev-python/sqlalchemy[${PYTHON_USEDEP}]
		>=dev-python/text2num-2.5.1[${PYTHON_USEDEP}]
		dev-python/tiktoken[${PYTHON_USEDEP}]
		dev-python/tqdm[${PYTHON_USEDEP}]
    standalone? ( dev-python/uvicorn[${PYTHON_USEDEP}] )
	')
	dev-python/misaki[l10n_en,l10n_ja,l10n_ko,l10n_zh,${PYTHON_SINGLE_USEDEP}]
  dev-python/kokoro[${PYTHON_SINGLE_USEDEP}]
	>=sci-ml/pytorch-2.8.0[${PYTHON_SINGLE_USEDEP}]"
DEPEND="${RDEPEND}"
# shellcheck disable=SC2016
BDEPEND="test? (
		$(python_gen_cond_dep '
			dev-python/httpx[${PYTHON_USEDEP}]
			>=dev-python/jinja2-3.1.6[${PYTHON_USEDEP}]
			dev-python/pytest-asyncio[${PYTHON_USEDEP}]
			dev-python/pytest-cov[${PYTHON_USEDEP}]
			>=dev-python/tomli-2.0.1[${PYTHON_USEDEP}]
		')
  )"
  
PATCHES=(
	"${FILESDIR}/${PN}-rename-package.patch"
	"${FILESDIR}/${PN}-quiet-logging.patch"
)

S="${WORKDIR}/Kokoro-FastAPI-${PV}"

src_prepare() {
	distutils-r1_src_prepare
	mv api/src kokoro_fastapi || die
}

src_install() {
	distutils-r1_src_install
	insinto "/var/lib/${PN}/web"
	doins -r web/*
	local item
	for item in models voices; do
		insinto "/var/lib/${PN}/${item}"
		doins -r kokoro_fastapi/${item}/*
	done
  insinto "/var/lib/${PN}/models/v1_0"
  newins "${DISTDIR}/${P}-kokoro-v1_0.pth" "kokoro-v1_0.pth"
  newins "${DISTDIR}/${P}-kokoro-v1_0-config.json" "config.json"
	if use standalone; then
		systemd_dounit "${FILESDIR}/${PN}-cpu.service"
		systemd_dounit "${FILESDIR}/${PN}-gpu.service"
		newinitd "${FILESDIR}/${PN}-cpu.initd" "${PN}-cpu"
		newinitd "${FILESDIR}/${PN}-gpu.initd" "${PN}-gpu"
	fi
	insinto "$(python_get_sitedir)/kokoro_fastapi/core"
	doins kokoro_fastapi/core/openai_mappings.json
}

pkg_postinst() {
	if use standalone; then
		chown -R "${PN}:${PN}" "/var/lib/${PN}" || die
	fi
	elog
	elog "For CUDA support, add the kokoro-fastapi user to the video group:"
	elog
	elog "  gpasswd -a kokoro-fastapi video"
	elog
}

EPYTEST_PLUGINS=( pytest-{asyncio,cov} )
distutils_enable_tests pytest