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

EAPI=8

inherit wrapper

MY_DATE="${PV##*.}"
MY_BASE="${PV%.*}"
MY_TAG="cachyos-${MY_BASE}-${MY_DATE}-slr"

DESCRIPTION="CachyOS Proton build with NTSync support and performance optimizations"
HOMEPAGE="https://github.com/CachyOS/proton-cachyos"

IUSE="+abi_x86_32 +abi_x86_64 +cpu_flags_x86_avx2 cpu_flags_x86_avx512f"

SRC_URI="
	cpu_flags_x86_avx512f? (
		https://github.com/CachyOS/proton-cachyos/releases/download/${MY_TAG}/proton-cachyos-${MY_BASE}-${MY_DATE}-slr-x86_64_v4.tar.xz
	)
	!cpu_flags_x86_avx512f? (
		cpu_flags_x86_avx2? (
			https://github.com/CachyOS/proton-cachyos/releases/download/${MY_TAG}/proton-cachyos-${MY_BASE}-${MY_DATE}-slr-x86_64_v3.tar.xz
		)
		!cpu_flags_x86_avx2? (
			https://github.com/CachyOS/proton-cachyos/releases/download/${MY_TAG}/proton-cachyos-${MY_BASE}-${MY_DATE}-slr-x86_64.tar.xz
		)
	)
"

LICENSE="BSD BSD-2 LGPL-2.1+ ZLIB gsm libpng2 libtiff MIT OPENLDAP"
SLOT="${PV}"
KEYWORDS="-* ~amd64"
REQUIRED_USE="|| ( abi_x86_32 abi_x86_64 )"

RDEPEND="
	app-emulation/wine-desktop-common
	dev-libs/glib:2
	dev-libs/libgcrypt:0
	media-libs/alsa-lib
	media-libs/fontconfig
	media-libs/freetype:2
	media-libs/libglvnd
	media-libs/libpulse
	media-libs/libsdl2
	media-libs/vulkan-loader
	net-libs/gnutls
	sys-apps/dbus
	sys-libs/zlib
	x11-libs/libX11
	x11-libs/libXcomposite
	x11-libs/libXcursor
	x11-libs/libXext
	x11-libs/libXfixes
	x11-libs/libXi
	x11-libs/libXrandr
	x11-libs/libXrender
	x11-libs/libXxf86vm
	abi_x86_32? (
		dev-libs/glib:2[abi_x86_32]
		media-libs/alsa-lib[abi_x86_32]
		media-libs/fontconfig[abi_x86_32]
		media-libs/freetype:2[abi_x86_32]
		media-libs/libglvnd[abi_x86_32]
		media-libs/vulkan-loader[abi_x86_32]
		x11-libs/libX11[abi_x86_32]
		x11-libs/libXext[abi_x86_32]
	)
"
IDEPEND=">=app-eselect/eselect-wine-2"

RESTRICT="mirror strip"

WINE_PREFIX="/usr/lib/${PN}-${PV}"
WINE_DATADIR="/usr/share/${PN}-${PV}"
WINE_INCDIR="/usr/include/${PN}-${PV}"

QA_PREBUILT="*"

pkg_setup() {
	if use cpu_flags_x86_avx512f; then
		MY_ARCH="x86_64_v4"
	elif use cpu_flags_x86_avx2; then
		MY_ARCH="x86_64_v3"
	else
		MY_ARCH="x86_64"
	fi
	MY_P="proton-cachyos-${MY_BASE}-${MY_DATE}-slr-${MY_ARCH}"
	S="${WORKDIR}/${MY_P}"
}

src_install() {
	dodir "${WINE_PREFIX}/bin"
	dodir "${WINE_PREFIX}/lib/wine"
	dodir "${WINE_PREFIX}/share/wine"
	dodir "${WINE_INCDIR}/wine"

	# Install binaries
	if [[ -d "${S}/files/bin" ]]; then
		exeinto "${WINE_PREFIX}/bin"
		doexe "${S}/files/bin"/*
	fi

	# Install wine libs to lib/wine/ (where the binary expects them)
	if [[ -d "${S}/files/lib/wine" ]]; then
		cp -a "${S}/files/lib/wine/"* "${ED}${WINE_PREFIX}/lib/wine/" || die
	fi

	# Create symlink wine -> lib/wine for eselect-wine compatibility
	dosym -r "${WINE_PREFIX}/lib/wine" "${WINE_PREFIX}/wine"

	# Install share data to prefix/share/wine (where binary expects ../share/wine)
	if [[ -d "${S}/files/share/wine" ]]; then
		cp -a "${S}/files/share/wine/"* "${ED}${WINE_PREFIX}/share/wine/" || die
	fi

	# Create share symlink for eselect-wine
	dosym -r "${WINE_PREFIX}/share" "${WINE_DATADIR}"

	keepdir "${WINE_INCDIR}/wine"

	# Create variant wrappers for eselect-wine
	local bin
	for bin in "${ED}${WINE_PREFIX}/bin"/*; do
		[[ -f ${bin} && -x ${bin} ]] || continue
		local binname="${bin##*/}"
		make_wrapper "${binname}-${PN#wine-}-${PV}" "${WINE_PREFIX}/bin/${binname}"
	done
}

pkg_postinst() {
	eselect wine update --if-unset

	local arch_info
	use cpu_flags_x86_avx512f && arch_info="AVX-512 (v4)"
	use cpu_flags_x86_avx2 && ! use cpu_flags_x86_avx512f && arch_info="AVX2 (v3)"
	use cpu_flags_x86_avx2 || arch_info="baseline"

	elog "To select: eselect wine set ${PN}-${PV}"
	elog "Optimized for: ${arch_info}"
	elog ""
	elog "NTSync (kernel 6.14+):"
	elog "  modprobe ntsync && PROTON_USE_NTSYNC=1"
}

pkg_postrm() {
	eselect wine update --if-unset
}