#!/bin/bash

# Written with the help of chatgpt o3-mini
function klabels {
	local header=
	local padding=
	local trim_length=
	local line_text=
	local first_line=
	local max_key_length=0
	local max_label_length=0
	local key=
	local value=
	local filter_value="$1"
	local filter_key="$2"

	while IFS= read -r line; do
		if [ -z "$header" ]; then
			header="$line"
			padding="${header//LABELS/}"
			padding="${padding//?/ }"
			echo "$header"
			trim_length=${#padding}
			continue
		fi

		line_text="${line:0:trim_length}"
		first_line=
		IFS=',' read -ra labels <<< "${line:trim_length}"

		# Calculate the maximum key length to align key=value pairs
		for label in "${labels[@]}"; do
			key="${label%%=*}"
			max_key_length=$(( ${#key} > max_key_length ? ${#key} : max_key_length ))
		done

		# Loop through labels and align them
		for label in "${labels[@]}"; do
			key="${label%%=*}"
			value="${label#*=}"

			if [ -n "$filter_key" ] && ! [[ "$key" == *$filter_key* ]] ; then
				continue
			fi

			if [ -n "$filter_value" ] && ! [[ "$value" == *$filter_value* ]] ; then
				continue
			fi


			# Format the label to align the '=' sign
			printf -v formatted_label "%-${max_key_length}s = %s" "$key" "$value"

			if [ -z "$first_line" ]; then
				first_line=1

				# Print a line separator based on the longest key length
				separator_length=$((max_key_length + trim_length))
				printf "%${separator_length}s\n" | tr ' ' "-"

				echo "$line_text$formatted_label"
			else
				echo "$padding$formatted_label"
			fi
		done
	done
}