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

EAPI=8

inherit bash-completion-r1 desktop unpacker xdg

BUILD_ID="202508150626"

DESCRIPTION="AI IDE that helps you do your best work by turning ideas into production code"
HOMEPAGE="https://kiro.dev/"
SRC_URI="https://prod.download.desktop.kiro.dev/releases/${BUILD_ID}--distro-linux-x64-deb/${BUILD_ID}-distro-linux-x64.deb -> ${P}.deb"

LICENSE="MIT"
SLOT="0"
KEYWORDS="~amd64"
IUSE="wayland"

RESTRICT="mirror strip bindist"

RDEPEND="
	>=app-accessibility/at-spi2-core-2.5.3
	app-crypt/libsecret
	>=dev-libs/expat-2.1_beta3
	>=dev-libs/glib-2.37.3:2
	>=dev-libs/nspr-4.9
	>=dev-libs/nss-3.26
	>=media-libs/alsa-lib-1.0.17
	>=media-libs/mesa-17.1.0[gbm(+)]
	>=net-misc/curl-7.0.0
	>=net-print/cups-1.6.0
	>=sys-apps/dbus-1.9.14
	>=sys-apps/util-linux-2.25
	>=x11-libs/cairo-1.6.0
	>=x11-libs/gtk+-3.9.10:3[wayland?]
	>=x11-libs/libdrm-2.4.75
	>=x11-libs/libX11-1.4.99.1
	>=x11-libs/libxcb-1.9.2
	>=x11-libs/libXcomposite-0.4.4
	>=x11-libs/libXdamage-1.1
	x11-libs/libXext
	x11-libs/libXfixes
	>=x11-libs/libxkbcommon-0.5.0
	>=x11-libs/libxkbfile-1.1.0
	x11-libs/libXrandr
	>=x11-libs/pango-1.14.0
	>=x11-misc/xdg-utils-1.0.2
	wayland? ( dev-libs/wayland )
	media-libs/vulkan-loader
"

# QA overrides for Electron binaries
QA_PREBUILT="
	opt/kiro/kiro
	opt/kiro/chrome_crashpad_handler
	opt/kiro/chrome-sandbox
	opt/kiro/lib*.so*
"

S="${WORKDIR}"

src_unpack() {
	unpack_deb ${A}
}

src_prepare() {
	default
	
	# Debug: Show package structure
	einfo "=== PACKAGE STRUCTURE DEBUG ==="
	einfo "Desktop files found:"
	find . -name "*.desktop" -type f || true
	
	if [[ -f usr/share/applications/kiro.desktop ]]; then
		einfo "Original kiro.desktop content:"
		cat usr/share/applications/kiro.desktop
	fi
	
	einfo "Icon files found:"
	find . -name "*.png" -o -name "*.svg" -o -name "*.ico" | head -20 || true
	einfo "=============================="
	
	# Configure chrome-sandbox permissions
	if [[ -f usr/share/kiro/chrome-sandbox ]]; then
		chmod 4755 usr/share/kiro/chrome-sandbox || die "Failed to set chrome-sandbox permissions"
	fi
	
	# Remove Debian files
	rm -rf DEBIAN/ || die "Failed to remove Debian files"
	
	# Remove cross-platform binaries to eliminate QA warnings
	einfo "Cleaning up unnecessary cross-platform binaries..."
	
	local files_removed=0
	
	# Remove ARM64/aarch64 binaries
	while IFS= read -r -d '' file; do
		rm -f "${file}" && ((files_removed++))
	done < <(find usr/share/kiro -path "*/arm64/*" -type f -print0 2>/dev/null)
	
	while IFS= read -r -d '' file; do
		rm -f "${file}" && ((files_removed++))
	done < <(find usr/share/kiro -path "*/aarch64/*" -type f -print0 2>/dev/null)
	
	while IFS= read -r -d '' file; do
		rm -f "${file}" && ((files_removed++))
	done < <(find usr/share/kiro -name "*arm64*" -type f -print0 2>/dev/null)
	
	# Remove other platform binaries
	while IFS= read -r -d '' file; do
		rm -f "${file}" && ((files_removed++))
	done < <(find usr/share/kiro -path "*/darwin/*" -o -path "*/win32/*" -o -name "*.dll" -o -name "*.dylib" -type f -print0 2>/dev/null)
	
	# Clean up empty directories
	find usr/share/kiro -type d -empty -delete 2>/dev/null || true
	
	einfo "Removed ${files_removed} unnecessary cross-platform files"
	
	# Verify main executable exists
	[[ -f usr/share/kiro/kiro ]] || die "Main Kiro executable not found after cleanup!"
}

src_install() {
	# Install application to /opt/kiro
	insinto /opt/kiro
	doins -r usr/share/kiro/*
	
	# Fix permissions for executables
	fperms +x /opt/kiro/kiro
	fperms +x /opt/kiro/chrome_crashpad_handler
	fperms 4755 /opt/kiro/chrome-sandbox
	
	# Fix permissions for shared libraries
	local lib
	for lib in usr/share/kiro/lib*.so*; do
		if [[ -f "${lib}" ]]; then
			local basename_lib="${lib##*/}"
			fperms +x "/opt/kiro/${basename_lib}"
		fi
	done
	
	# Additional approach for libraries using find in destination
	find "${D}/opt/kiro" -name "*.so*" -type f -print0 | while IFS= read -r -d '' so_file; do
		local rel_path="${so_file#${D}}"
		fperms +x "${rel_path}"
	done
	
	# Wrapper script with enhanced error handling
	exeinto /usr/bin
	newexe - kiro <<-'EOF'
		#!/bin/bash
		# Kiro IDE wrapper script
		
		set -e
		
		export ELECTRON_IS_DEV=0
		export ELECTRON_FORCE_IS_PACKAGED=true
		
		declare -a KIRO_ARGS
		
		KIRO_ARGS=(
			--no-sandbox
			--disable-gpu-sandbox
			--disable-software-rasterizer
			--enable-features=VaapiVideoDecoder
			--disable-dev-shm-usage
			--disable-background-timer-throttling
		)
		
		# Wayland support detection
		if [[ -n "${WAYLAND_DISPLAY}" ]] && command -v wayland-scanner >/dev/null 2>&1; then
			KIRO_ARGS+=(
				--ozone-platform=wayland
				--enable-features=UseOzonePlatform
			)
		fi
		
		# Verify installation
		if [[ ! -x /opt/kiro/kiro ]]; then
			echo "Error: Kiro executable not found or not executable" >&2
			exit 1
		fi
		
		exec /opt/kiro/kiro "${KIRO_ARGS[@]}" "$@"
	EOF
	
	# Icons - comprehensive installation following Cursor pattern
	einfo "Installing icons..."
	
	# Install all available icon structures
	if [[ -d usr/share/icons ]]; then
		einfo "Installing icon theme structure from usr/share/icons"
		insinto /usr/share
		doins -r usr/share/icons
	fi
	
	# Install pixmaps
	if [[ -d usr/share/pixmaps ]]; then
		einfo "Installing pixmap icons from usr/share/pixmaps"
		insinto /usr/share/pixmaps
		doins usr/share/pixmaps/*
	fi
	
	# Create specific icon entries for the application
	local icon_name="kiro"
	local icon_installed=false
	
	# Try different icon sources
	if [[ -f usr/share/pixmaps/code-oss.png ]]; then
		einfo "Installing main icon from pixmaps/code-oss.png"
		newicon usr/share/pixmaps/code-oss.png "${icon_name}.png"
		icon_installed=true
		
		# Also install to hicolor theme in multiple sizes
		local sizes=(16 22 24 32 48 64 128 256)
		for size in "${sizes[@]}"; do
			newicon -s "${size}" usr/share/pixmaps/code-oss.png "${icon_name}.png"
		done
	fi
	
	# Debug: Show what icons were installed
	einfo "Icon installation summary:"
	einfo "  Target icon name: ${icon_name}"
	einfo "  Icon installed: ${icon_installed}"
	
	# Desktop entry - completely rewrite to ensure correct paths
	if [[ -f usr/share/applications/kiro.desktop ]]; then
		einfo "Processing desktop file..."
		
		# Show original content
		einfo "Original desktop file:"
		cat usr/share/applications/kiro.desktop
		
		# Instead of sed, create a new desktop file from scratch to ensure correctness
		cat > kiro-fixed.desktop <<-EOF
			[Desktop Entry]
			Version=1.0
			Type=Application
			Name=Kiro IDE
			Comment=AI IDE that helps you do your best work by turning ideas into production code
			Exec=/opt/kiro/kiro %F
			Icon=${icon_name}
			Categories=Development;IDE;TextEditor;
			MimeType=text/plain;inode/directory;
			StartupWMClass=kiro
			StartupNotify=true
			Terminal=false
		EOF
		
		# If there are additional fields in the original, try to preserve them
		if grep -q "^Keywords=" usr/share/applications/kiro.desktop; then
			local keywords
			keywords=$(grep "^Keywords=" usr/share/applications/kiro.desktop | head -1)
			echo "${keywords}" >> kiro-fixed.desktop
		fi
		
		if grep -q "^GenericName=" usr/share/applications/kiro.desktop; then
			local generic_name
			generic_name=$(grep "^GenericName=" usr/share/applications/kiro.desktop | head -1)
			echo "${generic_name}" >> kiro-fixed.desktop
		fi
		
		# Show corrected content
		einfo "Corrected desktop file:"
		cat kiro-fixed.desktop
		
		domenu kiro-fixed.desktop
		einfo "Desktop file installed successfully"
	else
		ewarn "No desktop file found at usr/share/applications/kiro.desktop"
		
		# Create minimal desktop file if none exists
		cat > kiro-minimal.desktop <<-EOF
			[Desktop Entry]
			Version=1.0
			Type=Application
			Name=Kiro IDE
			Comment=AI IDE for development
			Exec=/opt/kiro/kiro %F
			Icon=${icon_name}
			Categories=Development;IDE;TextEditor;
			StartupWMClass=kiro
			StartupNotify=true
			Terminal=false
		EOF
		
		domenu kiro-minimal.desktop
		einfo "Created minimal desktop file"
	fi
	
	# URL handler - also completely rewrite if it exists
	if [[ -f usr/share/applications/kiro-url-handler.desktop ]]; then
		einfo "Processing URL handler desktop file..."
		
		cat > kiro-url-handler-fixed.desktop <<-EOF
			[Desktop Entry]
			Version=1.0
			Type=Application
			Name=Kiro IDE URL Handler
			Comment=Handle Kiro IDE URLs
			Exec=/opt/kiro/kiro --open-url %U
			Icon=${icon_name}
			Categories=Development;IDE;
			NoDisplay=true
			StartupNotify=true
			Terminal=false
			MimeType=x-scheme-handler/kiro;
		EOF
		
		domenu kiro-url-handler-fixed.desktop
		einfo "URL handler desktop file installed"
	fi
	
	# MIME types
	if [[ -f usr/share/mime/packages/kiro-workspace.xml ]]; then
		insinto /usr/share/mime/packages
		doins usr/share/mime/packages/kiro-workspace.xml
	fi
	
	# AppData
	if [[ -f usr/share/appdata/kiro.appdata.xml ]]; then
		insinto /usr/share/metainfo
		newins usr/share/appdata/kiro.appdata.xml dev.kiro.kiro.appdata.xml
	fi
	
	# Shell completions
	if [[ -f usr/share/bash-completion/completions/kiro ]]; then
		dobashcomp usr/share/bash-completion/completions/kiro
	fi
	
	if [[ -f usr/share/zsh/vendor-completions/_kiro ]]; then
		insinto /usr/share/zsh/site-functions
		doins usr/share/zsh/vendor-completions/_kiro
	fi
}

pkg_postinst() {
	xdg_pkg_postinst
	
	# Verify installation
	if [[ ! -x "${EROOT}/opt/kiro/kiro" ]]; then
		eerror "Kiro executable was not installed correctly!"
		eerror "Please check the installation and file a bug report."
		die "Installation verification failed"
	fi
	
	elog "Kiro IDE ${PV} (build ${BUILD_ID}) successfully installed!"
	elog ""
	elog "Installation verified:"
	elog "  Executable: ${EROOT}/opt/kiro/kiro"
	elog "  Wrapper: ${EROOT}/usr/bin/kiro"
	elog "  Desktop file: ${EROOT}/usr/share/applications/kiro-fixed.desktop"
	elog ""
	elog "If Kiro doesn't appear in your application menu:"
	elog "  1. Update desktop database: update-desktop-database"
	elog "  2. Update icon cache: gtk-update-icon-cache -f -t /usr/share/icons/hicolor"
	elog "  3. Restart your desktop environment or log out/in"
	elog ""
	elog "You can also launch Kiro manually:"
	elog "  Direct: /opt/kiro/kiro"
	elog "  Via wrapper: kiro (if wrapper script exists)"
	elog ""
	elog "This version has been optimized for amd64 systems with"
	elog "unnecessary cross-platform binaries removed."
	elog ""
	elog "To optimize your experience:"
	elog "  • Make sure you have a stable connection for AI features"
	elog "  • Install updated drivers for better GPU performance"
	elog ""
	elog "Configuration: ~/.config/kiro/"
	elog "Documentation: https://kiro.dev/"
	
	if ! groups "${USER}" 2>/dev/null | grep -q video; then
		ewarn "User is not in the 'video' group."
		ewarn "Run: usermod -a -G video \${USER}"
	fi
}

pkg_postrm() {
	xdg_pkg_postrm
}