#!/usr/bin/bash
#last-update 12/01/2025
export TEXTDOMAIN="Tuningdrake"
applang="$(locale|grep LANG|cut -d '=' -f 2|cut -d '.' -f 1|cut -d '_' -f 1)"
case "$applang" in
	es|pt|fr);;
	*)export LANGUAGE=en;;
esac

dialog_type ()
{
	if [ -z "$DISPLAY" ] ; then
		dialogtype="cli"
	else
		dialogtype="zenity"
		if ! which zenity 2>&1 >/dev/null ; then
			dialogtype="cli"
		fi
	fi
}

dialog_text ()
{
	case $dialogtype in
	"cli") echo "$1";;
	"zenity")zenity  --info --text="$1" --no-wrap;;
	esac
}

dialog_warning ()
{
	case $dialogtype in
	"cli") echo "$(gettext "ADVERTENCIA"): $1";;
	"zenity")zenity  --warning --text="$1" --no-wrap;;
	esac
}
dialog_type
if [ "$UID" != 0 ]; then
	case $dialogtype in
		"cli")
			gettext "Proporcione clave de root"
	        echo
			su - -c "$0 $@" ;;
		"zenity")pkexec $0 $@ ;;
	esac
	exit $?
fi

autoMod=0
ignoreGreatest=1
samev=0
while [ $# -gt 0 ]; do
	case $1 in
		"--auto")autoMod=1;;
		"--greatest")ignoreGreatest=0;;
		"--same")samev=1;;
		-h|--help|*) echo "kernel-clean [--all] [--auto] [--same] [--greatest] [-h] [--help]
--auto $(gettext "Modo automatico")
--greatest $(gettext "Habilita desinstalar kernels con la version mayor")
--same $(gettext "Incluir variantes del kernel con la misma versión que el actual")
-h|--help $(gettext "Muestra esta ayuda")"
		exit;;
	esac
	shift
done
KINFO="$(uname -r)"
KRUN="$(echo -n $KINFO|cut -d '-' -f1)-$(echo -n $KINFO|cut -d '-' -f3)"
TIPO="$(echo -n $KINFO|cut -d '-' -f2)"
KMAX=0

if [ "$dialogtype" = "zenity" ] ; then
	rpm --noverify -qa|grep ^kernel|grep -v -F "headers
firmware
latest" > /tmp/kernel-list&& killall zenity&  (i=1; while pgrep rpm; do echo $i && i=$((i+1)); done)|zenity \
--progress --pulsate --no-cancel --text="$(gettext "Buscando kernels instalados")"
else
	echo
	dialog_text "$(gettext "Buscando kernels instalados")"
rpm --noverify -qa|grep ^kernel|grep -v -F "headers
firmware
latest" > /tmp/kernel-list
fi

for ker in $(cat /tmp/kernel-list|grep -v devel) ; do 
    if echo -n $ker|grep stable-testing ; then
		ver=$(echo -n $ker|cut -d "-" -f5-6)
    else
		if echo -n $ker|grep mainline ; then
			ver=$(echo -n $ker|cut -d "-" -f4-5)
		else
			ver=$(echo -n $ker|cut -d "-" -f3-4)
		fi
	fi
	case $(vercmp $(echo -n $ver|cut -d '-' -f1) $(echo -n $KMAX|cut -d '-' -f1)) in
		1) KMAX="$ver";;
		0) if [ $(echo -n $ver|cut -d '-' -f2|cut -d '.' -f1) -gt $(echo -n $KMAX|cut -d '-' -f2|cut -d '.' -f1) ]; then 
			KMAX="$ver"  
		   fi;;
	esac
done
if [ $ignoreGreatest -eq 1 ] ; then
	KLAST=$KMAX
else
	KLAST=$(echo -n $KRUN|cut -d "-" -f1-2)
fi
if [ "$KLAST" = "$KRUN" ] && [ $samev -eq 1 ] ;  then
	#UGLY FIX TO KERNELS IN SAME VERSION != FLAVOR BE IGNORED
 KLAST="0.0.0"	
fi


FILTRO="$(cat /tmp/kernel-list|grep -v  $TIPO-$KRUN|grep -v $TIPO-devel-$KRUN|grep -v $KLAST)"
if [ -z "$FILTRO" ]; then
	dialog_text "$(gettext "No hay kernels para quitar")"
	exit
fi
if [ ! "$KMAX" = "$(echo -n $KRUN|cut -d "-" -f1-2)" ]; then
	dialog_warning "$(gettext "No esta ejecutando el kernel") $KMAX 
$(gettext "No se quitara"):  
kernel-$TIPO-$KRUN
kernel-$TIPO-devel-$KRUN
"
fi
if [ $autoMod -eq 1 ]; then
	RKERNEL="$FILTRO"
else 
	for ver in $FILTRO; do
		if [ "$dialogtype" = "zenity" ]; then
			KLIST="$KLIST TRUE $ver"
		else
			KLIST="$KLIST $ver"
		fi
	done
	RKERNEL=""
	opc=""
	case $dialogtype in
	"zenity")
		RKERNEL=$(zenity --list --text="$(gettext "Lista de Kernels")" --checklist --multiple \
		--column=" " --column "$(gettext "Versión") " $KLIST --separator=" ");;
	"cli")
		while [ "$opc" != "$(gettext "Salir")" ] &&  [ "$opc" != "$(gettext "Limpiar")" ] ; do
			clear
			gettext "Seleccione version a Quitar"
			echo
			gettext "Su selecccion se añadira a una lista"
			echo
			echo
			gettext "Salir" 
			echo
			gettext "Sale de la aplicación sin hacer nada"
			echo
			echo
			gettext "Limpiar"
			echo 
			gettext "Quitara todos los kernels seleccionados"
			echo
			echo
			select opc in $KLIST $(gettext "Salir") $(gettext "Limpiar") ; do
				if  [ "$opc" != "$(gettext "Salir")" ] &&  [ "$opc" != "$(gettext "Limpiar")" ]; then 
					if echo -n "$RKERNEL" |grep $(echo -n "$opc")  ;then
						dialog_warning "$(gettext "Ya selecciono el kernel")"
						read
					else
						RKERNEL="$RKERNEL $opc"
					fi
				fi
				break
			done
		done;;
	esac
	if  [ "$opc" = "$(gettext "Salir")" ]; then
		exit
	fi
fi
if [ -n "$RKERNEL" ] ; then

	[ "$dialogtype" = "cli" ] && urpme $RKERNEL && dialog_text  "$(gettext "Se desintalaron"):
$(echo $RKERNEL|sed -e 's|[:space:]|\n|g')"
	[ "$dialogtype" = "zenity" ] && (urpme $RKERNEL >&1)|zenity --progress --pulsate --auto-close --no-cancel\
	 && dialog_text "$(gettext "Se desintalaron"):
$(echo $RKERNEL|sed -e 's|[[:space:]]|\n|g')"
fi
rm /tmp/kernel-list
