#!/bin/sh
set -e
PREREQ=""

prereqs() {
    echo "$PREREQ"
}

case "$1" in
    prereqs)
        prereqs
        exit 0
        ;;
esac

echo "Current /proc/cmdline:"
cat /proc/cmdline

# 获取cmdline中的root UUID
CMDLINE_ROOT_UUID=$(sed -n 's/.*root=UUID=\([a-zA-Z0-9\-]*\).*/\1/p' /proc/cmdline)
# 获取emmc root分区的UUID
if [ -e /dev/mmcblk2p6 ]; then
    EMMC_ROOT_UUID=$(blkid -s UUID -o value /dev/mmcblk2p6)
else
    EMMC_ROOT_UUID=""
fi

# 获取SD root分区的UUID
if [ -e /dev/mmcblk0p6 ]; then
    SD_ROOT_UUID=$(blkid -s UUID -o value /dev/mmcblk0p6)
else
    SD_ROOT_UUID=""
fi

# 获取SSD root分区的UUID
if [ -e /dev/nvme0n1p6 ]; then
    SSD_ROOT_UUID=$(blkid -s UUID -o value /dev/nvme0n1p6)
else
    SSD_ROOT_UUID=""
fi


# eMMC
if [ "$CMDLINE_ROOT_UUID" = "$EMMC_ROOT_UUID" ]; then
    # 如果存在/dev/mmcblk2p7且/proc/cmdline中不包含overlayroot，则格式化p7并将p7空间分配给p6
    if [ -e /dev/mmcblk2p7 ] && ! grep -q "overlayroot" /proc/cmdline; then
        echo "Found /dev/mmcblk2p7 but overlayroot not enabled. Formatting p7 and expanding p6 with p7 space..."
        
        parted /dev/mmcblk2 rm 7
        sleep 2
        
        # 扩展p6分区到磁盘末尾
        echo "Expanding /dev/mmcblk2p6 to maximum available space..."
        parted /dev/mmcblk2 resizepart 6 100%
        sleep 2

        # 检查并修复文件系统
        e2fsck -f -y /dev/mmcblk2p6

        # 扩展文件系统到分区大小
        resize2fs /dev/mmcblk2p6
        
        echo "Partition cleanup completed."
        exit 0
    fi

    if [ ! -e /dev/mmcblk2p7 ] && grep -q "overlayroot" /proc/cmdline ; then
        echo "Starting resizing operations before mounting filesystem..."

        # 1. 检查并修复文件系统
        e2fsck -f -y /dev/mmcblk2p6

        # 2. 缩小文件系统
        resize2fs -f /dev/mmcblk2p6 10G

        # 3. 缩小分区
        parted /dev/mmcblk2 resizepart 6 11G
        sleep 2
        resize2fs /dev/mmcblk2p6


        # 4. 创建p7分区
        parted --script /dev/mmcblk2 mkpart userdata ext4 11GB 100%
        sleep 2
        # 5. 格式化为 ext4 文件系统
        mkfs.ext4 -F /dev/mmcblk2p7
        echo "userdata partition creation completed."
    fi

# SD
elif [ "$CMDLINE_ROOT_UUID" = "$SD_ROOT_UUID" ]; then
    if [ -e /dev/mmcblk0p7 ] && ! grep -q "overlayroot" /proc/cmdline; then
        echo "Found /dev/mmcblk0p7 but overlayroot not enabled. Deleting p7 partition..."
        
        parted /dev/mmcblk0 rm 7
        sleep 2
        
        echo "Partition p7 deleted."
        exit 0
    fi

    if [ ! -e /dev/mmcblk0p7 ] && grep -q "overlayroot" /proc/cmdline ; then
        echo "Starting resizing operations before mounting filesystem..."

        # 1. 检查并修复文件系统
        e2fsck -f -y /dev/mmcblk0p6

        # 2. 扩展分区到10G
        parted /dev/mmcblk0 resizepart 6 9G
        sleep 2

        # 3. 扩展文件系统到分区大小
        resize2fs /dev/mmcblk0p6

        # 4. 创建p7分区
        parted --script /dev/mmcblk0 mkpart userdata ext4 9GB 100%
        sleep 2
        # 5. 格式化为 ext4 文件系统
        mkfs.ext4 -F /dev/mmcblk0p7
        echo "userdata partition creation completed."
    fi

# SSD
elif [ "$CMDLINE_ROOT_UUID" = "$SSD_ROOT_UUID" ]; then
    # 如果存在/dev/nvme0n1p7且/proc/cmdline中不包含overlayroot，则格式化p7并将p7空间分配给p6
    if [ -e /dev/nvme0n1p7 ] && ! grep -q "overlayroot" /proc/cmdline; then
        echo "Found /dev/nvme0n1p7 but overlayroot not enabled. Formatting p7 and expanding p6 with p7 space..."
        
        parted /dev/nvme0n1 rm 7
        sleep 2
        
        # 扩展p6分区到磁盘末尾
        echo "Expanding /dev/nvme0n1p6 to maximum available space..."
        parted /dev/nvme0n1 resizepart 6 100%
        sleep 2

        # 检查并修复文件系统
        e2fsck -f -y /dev/nvme0n1p6

        # 扩展文件系统到分区大小
        resize2fs /dev/nvme0n1p6
        
        echo "Partition cleanup completed."
        exit 0
    fi

    if [ ! -e /dev/nvme0n1p7 ] && grep -q "overlayroot" /proc/cmdline ; then
        echo "Starting resizing operations before mounting filesystem..."

        # 1. 检查并修复文件系统
        e2fsck -f -y /dev/nvme0n1p6

        # 2. 缩小文件系统
        resize2fs -f /dev/nvme0n1p6 10G

        # 3. 缩小分区
        parted /dev/nvme0n1 resizepart 6 11G
        sleep 2
        resize2fs /dev/nvme0n1p6

        # 4. 创建p7分区
        parted --script /dev/nvme0n1 mkpart userdata ext4 11GB 100%
        sleep 2
        # 5. 格式化为 ext4 文件系统
        mkfs.ext4 -F /dev/nvme0n1p7
        echo "userdata partition creation completed."
    fi
fi