#!/bin/bash

DATA_OFFS="1024"  # up to 1024MB reserved for boot + root


test -n "${OS_VERSION}" || source /etc/init.d/base

case "$1" in
    start)
        msg_begin "Detecting disk device"
        root_dev=$(cat /proc/cmdline | grep -oE 'root=[/a-z0-9]+' | cut -d '=' -f 2)
        if [[ "${root_dev}" =~ ^([/a-z0-9]+)(p[0-9])$ ]]; then  # e.g. /dev/mmcblk0p2
            disk_dev=${BASH_REMATCH[1]}
            disk_dev_prefix=${disk_dev}p
            boot_dev=${disk_dev}p1
            root_dev=${disk_dev}p2
            data_dev=${disk_dev}p3
        elif [[ "${root_dev}" =~ ^([/a-z0-9]+)([0-9])$ ]]; then  # e.g. /dev/sdc2
            disk_dev=${BASH_REMATCH[1]}
            disk_dev_prefix=${disk_dev}
            boot_dev=${disk_dev}1
            root_dev=${disk_dev}2
            data_dev=${disk_dev}3
        else
            msg_fail "unknown (${root_dev})"
            exit 1
        fi

        for ext in disk extra overlay; do
            sed "s,"'${disk_dev_prefix}'",${disk_dev_prefix},g" /etc/fstab.${ext} > /tmp/fstab.${ext}
        done

        # Output disk info to /tmp/disk_info
        {
        echo "DISK_DEV=${disk_dev}"
        echo "DISK_DEV_PREFIX=${disk_dev_prefix}"
        echo "BOOT_DEV=${boot_dev}"
        echo "ROOT_DEV=${root_dev}"
        echo "DATA_DEV=${data_dev}"
        } > /tmp/disk_info

        msg_done "${disk_dev}"

        if [[ -b ${data_dev} ]]; then
            msg_begin "Checking data filesystem"
            if grep -q 'fsck.mode=force' /proc/cmdline; then
                /sbin/e2fsck -fy ${data_dev} &> /tmp/fsck.log
            elif ! grep -q 'fsck.mode=skip' /proc/cmdline; then
                /sbin/e2fsck -y ${data_dev} &> /tmp/fsck.log
            fi
            if [[ $? == 0 ]]; then
                msg_done
            else
                msg_fail
                cat /tmp/fsck.log
            fi
            
            exit 0
        fi

        msg_begin "Creating data partition"
        data_start=$((DATA_OFFS * 2048))
        echo -e "n
            p
            3
            ${data_start}
            \n
            w" | /sbin/fdisk ${disk_dev} &>/dev/null
        partx -a ${disk_dev} &>/dev/null
        test -b ${data_dev} && msg_done || msg_fail

        msg_begin "Formatting data partition"
        mkfs.ext4 -q ${data_dev}
        test $? == 0 && msg_done || msg_fail

        msg_begin "Mounting data partition"
        mount -T /tmp/fstab.disk /data && msg_done || msg_fail

        msg_begin "Copying data skeleton"
        cp -pur /usr/share/dataskel/* /data
        sync
        msg_done

        touch /data/.install_factory_defaults
        ;;

    stop)
        true
        ;;

    *)
        echo "Usage: $0 {start}"
        exit 1
esac
