#!/bin/bash -x

DEV=$1
shift

if [ -z "$DEV" ]; then
   echo "Usage: $0 <device> [--data-size MB] [--dns-server IP]"
   exit 0
fi

if [ $(id -u) != 0 ]; then
  echo "Please run this script as root"
  exit 1
fi

DATA_SIZE=1024 # megabytes

if [ ! -e "${DEV}" ]; then
  echo "$DEV does not exist!"
  exit 1
fi

while [ "$1" ]; do
  key="$1"
  case $key in
    --data-size)
      DATA_SIZE=$2
      shift
      shift
      ;;
    *)
      echo "Invalid option: $1"
      exit 1
      ;;
  esac
done

echo "Working on ${DEV}, creating data partition ${DATA_SIZE} Mb"

fdisk -l "$DEV" > /dev/null || exit 1

if fdisk -l "$DEV"|grep "^${DEV}3"; then
  echo "Data partition already exists, aborting"
  exit 1
fi

SECTORS=$(fdisk -l "$DEV" | grep "sectors$" | awk '{print $7}')
SIZE=$((SECTORS))
DATA_SIZE_SECTORS=$((DATA_SIZE*1024*1024/512))
START_DATA=$((SIZE-DATA_SIZE_SECTORS))

echo "Creating data partition"

echo -e "n\np\n\n$START_DATA\n\nw" | fdisk "${DEV}" || exit 1

partprobe "${DEV}" || exit 1

mkfs.ext4 -F -L data "${DEV}3" || exit 1

echo "Resizing system partition"

START_SYSTEM=$(fdisk -l "${DEV}"|grep "^${DEV}2"|awk '{ print $2 }')
END_SYSTEM=$((START_DATA-1))

echo -e "d\n2\nw" | fdisk "${DEV}" # do not check exit code here

partprobe "${DEV}" || exit 1

echo -e "n\np\n2\n$START_SYSTEM\n$END_SYSTEM\nw" | fdisk "$DEV"

partprobe "${DEV}" || exit 1

e2fsck -y -f "$DEV"2 || exit 1

resize2fs "$DEV"2 || exit 1

echo "Partitions updated"

MOUNTPOINT="/tmp/sdcard-$RANDOM"

echo "Mounting ${DEV}2 to ${MOUNTPOINT}"

mkdir -p ${MOUNTPOINT}
mount "${DEV}2" ${MOUNTPOINT} || exit 1

mkdir -p ${MOUNTPOINT}/var/roboplc/data

echo "Preparing fstab"

(
cat <<EOF
LABEL=data /var/roboplc/data ext4 noatime,nofail,x-systemd.device-timeout=5s 0 0

tmpfs /tmp tmpfs defaults,nosuid,nodev 0 0
tmpfs /var/tmp tmpfs defaults,nosuid,nodev 0 0
tmpfs /var/log tmpfs defaults,nosuid,nodev,mode=0755 0 0
tmpfs /var/run tmpfs defaults,nosuid,nodev,mode=0755 0 0
tmpfs /var/lock tmpfs defaults,nosuid,nodev,mode=0755 0 0
tmpfs /run tmpfs defaults,nosuid,nodev,mode=0755 0 0
tmpfs /var/cache tmpfs defaults,nosuid,nodev,mode=0755 0 0
tmpfs /var/spool tmpfs defaults,nosuid,nodev,mode=0755 0 0
EOF
) >> ${MOUNTPOINT}/etc/fstab || exit 1

echo "Finalizing"

umount ${MOUNTPOINT}
rmdir ${MOUNTPOINT}
sync

echo "ALL DONE!"
