#!/bin/sh

PUBLIC_MOUNT="$(grep -oP 'mount=\K[^ ]+' /proc/cmdline)"

[ -n "$PUBLIC_MOUNT" ] || exit 0
IFS=';' read -r -a pairs <<< "$PUBLIC_MOUNT"
for pair in "${pairs[@]}"; do
	IFS='^' read -r -a parts <<< "$pair"
	if [ "${#parts[@]}" -eq 4 ]; then
		LOWER="${parts[0]}"
		UPPER="${parts[1]}"
		WORK="${parts[2]}"
		MERGED="${parts[3]}"
		[ -n "$LOWER" ] && mkdir -p "$LOWER"
		[ -n "$UPPER" ] && mkdir -p "$UPPER"
		[ -n "$WORK" ] && mkdir -p "$WORK"
		[ -n "$MERGED" ] && mkdir -p "$MERGED"
		mount -t overlay overlay -olowerdir="$LOWER",upperdir="$UPPER",workdir="$WORK" "$MERGED"
	elif [ "${#parts[@]}" -eq 2 ]; then
		DEVICE="${parts[0]}"
		MOUNT_POINT="${parts[1]}"
		mkdir -p "$MOUNT_POINT"

		DEVICE_ID=""
		case "$DEVICE" in
			LABEL=*)
				LABEL_NAME="${DEVICE#LABEL=}"
				DEVICE_ID="$(blkid -l -t LABEL="$LABEL_NAME" -o device 2>/dev/null)"
				if [ -z "$DEVICE_ID" ]; then
					echo "ERROR: No device with LABEL='$LABEL_NAME'" >&2
					continue
				fi
				;;
			UUID=*)
				UUID_NAME="${DEVICE#UUID=}"
				DEVICE_ID="$(blkid -l -t UUID="$UUID_NAME" -o device 2>/dev/null)"
				if [ -z "$DEVICE_ID" ]; then
					echo "ERROR: No device with UUID='$UUID_NAME'" >&2
					continue
				fi
				;;
			*)
				DEVICE_ID="$DEVICE"
				;;
		esac

		if [ -n "$DEVICE_ID" ]; then
			if [ -d "$DEVICE_ID" ] && [ -d "$MOUNT_POINT" ]; then
				mount --bind "$DEVICE_ID" "$MOUNT_POINT"
			else
				mount "$DEVICE_ID" "$MOUNT_POINT"
			fi
		else
			echo "ERROR: Device $DEVICE_ID do not exist" >&2
		fi
	else
		echo "ERROR: expected 2 or 4 parameters, got ${#parts[@]}" >&2
	fi
done
exit 0
