#!/bin/bash
#
# Copyright (C) 2023 Nethesis S.r.l.
# SPDX-License-Identifier: GPL-2.0-only
#

# Check for free space on the OS disk and create a ext4 partition using the free space.
# Parameters:
#  - preserve, disk space to preserve for future use; optional, default to 100MiB

set -e

part=$(lsblk -ln | grep "/rom" | uniq | awk '{print $1}')
dev="/dev/$(lsblk -lno pkname /dev/$part)"
preserve=${1:-100}

# find free space
free_part=$(parted -s -m $dev unit MiB print free 2>/dev/null | grep free | tail -n -1)

if [ -z "${free_part}" ]; then
    # no free space
    exit 3
fi

# find free space start and end
start_current=$(echo $free_part | awk -F':' '{print $2}')
end=$(echo $free_part | awk -F':' '{print $3}')
# remove MB suffix
start_new=${start_current::-3}
# preserve some space for future use
start_new=$((start_new + preserve))
# create new partition
parted -s --fix -a optimal ${dev} unit MiB mkpart primary ext4 ${start_new}MiB 100% &>/dev/null
# mkfs on newly created partition number 3
part=$(lsblk $dev -o KNAME | sed -n \$p)
part_no=$(echo $part | sed -E 's/.*(.)/\1/')
if [ ${part_no} == 3 ]
then
    mkfs.ext4 -q -F -L ns_data /dev/${part} >/dev/null
else
    echo "ERROR: Wrong partition number ${part_no}"
    exit 1
fi
echo '{"device": "/dev/'${part}'"}'
