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

EAPI=8

inherit systemd optfeature

DESCRIPTION="Policy-driven snapshot management and replication tools for OpenZFS."
HOMEPAGE="https://github.com/jimsalterjrs/sanoid"

if [[ "${PV}" = *9999 ]]; then
	inherit git-r3
	EGIT_REPO_URI="https://github.com/jimsalterjrs/${PN^}.git"
else
	SRC_URI="https://github.com/jimsalterjrs/${PN^}/archive/v${PV}.tar.gz -> ${P}.gh.tar.gz"
	KEYWORDS="~amd64"
fi

LICENSE="GPL-3"
SLOT="0"
IUSE="cron"

BDEPEND="
	dev-lang/perl
	sys-apps/groff
"

RDEPEND="
	dev-lang/perl
	app-arch/gzip
	app-arch/lz4
	cron? ( virtual/cron )
	dev-perl/Capture-Tiny
	dev-perl/Config-IniFiles
	sys-apps/pv
	sys-block/mbuffer
	sys-fs/zfs
	virtual/perl-Data-Dumper
	virtual/perl-Getopt-Long
	virtual/ssh
"

DEPEND="${RDEPEND}"

src_compile() {
	perldoc -onroff -dsanoid.1 sanoid || die "Failed to compile sanoid.1"
	perldoc -onroff -dsyncoid.1 syncoid || die "Failed to compile syncoid.1"
}

DOCS="CHANGELIST LICENSE README.md"

src_prepare() {
	default
	sed -i 's|/usr/sbin|/usr/bin|g' \
		"packages/debian/sanoid.timer" \
		"packages/debian/sanoid.service" \
		"packages/debian/sanoid.sanoid-prune.service" || die
}

src_install() {
	dobin sanoid
	dobin syncoid
	doman sanoid.1 syncoid.1

	# Documents
	einstalldocs

	# Configs
	insinto /etc/sanoid
	doins sanoid.defaults.conf
	doins sanoid.conf

	# Binaries
	dobin sanoid syncoid findoid sleepymutex

	# Cron?
	if use cron; then
		insinto /etc/cron.d
		echo "#* * * * * root TZ=UTC /usr/bin/sanoid --cron" > "${PN}.cron" || die
		newins "${PN}.cron" "${PN}"
	fi

	# Systemd units
	systemd_dounit "packages/debian/sanoid.service"
	systemd_dounit "packages/debian/sanoid.timer"
	systemd_dounit "packages/debian/sanoid.sanoid-prune.service"
}

pkg_postinst() {
	optfeature "lzop compression support" app-arch/lzop
	optfeature "pigz compression support" app-arch/pigz
	optfeature "zstd compression support" app-arch/zstd

	if [[ -z ${REPLACING_VERSIONS} ]]; then
		elog "You will need to set up your ${EROOT}/etc/sanoid/sanoid.conf file before"
		elog "running sanoid for the first time. For details, please consult the"
		elog "documentation on https://github.com/jimsalterjrs/sanoid."
		if systemd_is_booted; then
			elog ""
			elog "To enable sanoid via systemd timer, run:"
			elog "  systemctl enable --now sanoid.timer"
			if use cron; then
				elog ""
				elog "or"
				elog ""
			fi
		fi
		if use cron; then
			elog "To enable sanoid via cron, uncomment the cron job in /etc/cron.d/sanoid."
		fi
	else
		elog "Removing old cache files (if any)"
		[[ -f /var/cache/sanoidsnapshots.txt ]] && rm -v /var/cache/sanoidsnapshots.txt
		[[ -f /var/cache/sanoid/snapshots.txt ]] && rm -v /var/cache/sanoid/snapshots.txt
		[[ -f /var/cache/sanoid/datasets.txt ]] && rm -v /var/cache/sanoid/datasets.txt
	fi
}