#!/bin/sh

set -eu

artifact_dir=${1:-kernel-artifacts}

if [ ! -d "$artifact_dir" ]; then
    echo "No existe el directorio de artifacts: $artifact_dir" >&2
    exit 1
fi

packages_file=$(mktemp)
trap 'rm -f "$packages_file"' EXIT HUP INT TERM

found_deb=false
for deb in "$artifact_dir"/*.deb; do
    [ -f "$deb" ] || continue
    found_deb=true
    package=$(dpkg-deb -f "$deb" Package)
    case "$package" in
        linux-image-*-espos|linux-headers-*-espos)
            printf '%s\n' "$package" >> "$packages_file"
            ;;
    esac
done

if [ "$found_deb" = false ]; then
    echo "No se encontraron paquetes .deb en $artifact_dir" >&2
    exit 1
fi

sort -u "$packages_file" -o "$packages_file"

selected_kernel=
while IFS= read -r image_package; do
    case "$image_package" in
        linux-image-*-espos)
            kernel=${image_package#linux-image-}
            kernel=${kernel%-espos}
            headers_package="linux-headers-${kernel}-espos"
            if grep -Fxq "$headers_package" "$packages_file"; then
                if [ -z "$selected_kernel" ] || dpkg --compare-versions "$kernel" gt "$selected_kernel"; then
                    selected_kernel=$kernel
                fi
            fi
            ;;
    esac
done < "$packages_file"

if [ -z "$selected_kernel" ]; then
    echo "No existe una pareja linux-image/linux-headers con la misma versión en los artifacts" >&2
    echo "Paquetes detectados:" >&2
    sed 's/^/  /' "$packages_file" >&2
    exit 1
fi

image_package="linux-image-${selected_kernel}-espos"
headers_package="linux-headers-${selected_kernel}-espos"

# This output is deliberately source-compatible shell with values restricted
# to Debian binary package-name characters by the patterns above.
printf 'KERNEL_VERSION=%s\n' "$selected_kernel"
printf 'IMAGE_PACKAGE=%s\n' "$image_package"
printf 'HEADERS_PACKAGE=%s\n' "$headers_package"
printf 'METAPACKAGE_VERSION=%s-1\n' "$selected_kernel"
