#!/bin/bash
PARTITIONS=(
"0x00002000@0x00004000(uboot)"
"0x00002000@0x00006000(trust)"
"0x00002000@0x00008000(misc)"
"0x00002000@0x0000a000(dtbo)"
"0x00000800@0x0000c000(vbmeta)"
"0x00020000@0x0000c800(boot)"
"0x00002000@0x0002c800(security)"
"0x00030000@0x0002e800(recovery)"
"0x000c0000@0x0005e800(backup)"
"0x000c0000@0x0011e800(cache)"
"0x00008000@0x001de800(metadata)"
"0x00000800@0x001e6800(baseparameter)"
"0x00008000@0x001e7000(logo)"
"0x00614000@0x001ef000(super)"
"-@0x00803000(userdata:grow)"
)
dec2hex() {
	NUM="${1}"
	while (( $NUM % 512 )) ; do
	        NUM=$((NUM+1))
	done
	NUM=$((NUM / 512))
	HEX=$( printf "%x" "${NUM}" )
	while [ ${#HEX} -ne 8 ]; do
		HEX="0${HEX}"
	done
	echo "0x${HEX}"
}

hex2dec() {
	NUM=$(printf "%d" "${1}")
	NUM=$((NUM * 512))
	echo ${NUM}
}


if [ -z "${1}" ]; then
	if [ -f "${ROCKDEV_ROOT}/super.new.img" ]; then
		mv -v "${ROCKDEV_ROOT}/super.new.img" "${ROCKDEV_SUPER_TARGET_DIR}/super.img"
		mv -v "${ROCKDEV_ROOT}/super.new.img.size" "${ROCKDEV_SUPER_TARGET_DIR}/super.img.size"
	fi

	if [ -f "${ROCKDEV_ROOT}/${ROCKDEV_ROM_NAME}" ]; then
		echo "Backing up previous ${ROCKDEV_ROOT}/${ROCKDEV_ROM_NAME} ..."
		mv  "${ROCKDEV_ROOT}/${ROCKDEV_ROM_NAME}" "${ROCKDEV_ROOT}/${ROCKDEV_ROM_NAME}.bak"
	fi
	ROCKDEV_ROMDUMP="${ROCKDEV_ROMDUMP_DIR}"
else
	if [ -d "${1}" ] && [ $(echo "${1}" | grep ".dump$" -c) -gt 0 ]; then
		ROCKDEV_ROMDUMP="$(realpath "${1}")"
	else
		echo "Invalid directory: ${1}";
	fi
fi

echo "Updating parameter.txt with new super.img and userdata size..."
SUPERSIZE=$(cat "${ROCKDEV_ROMDUMP}/Image/super.img.size")
SUPERSIZE_HEX=$(dec2hex "${SUPERSIZE}")
SUPERSIZE_NEW=$(hex2dec "${SUPERSIZE_HEX}")

PARAMLINE="CMDLINE:mtdparts=rk29xxnand:"
for f in "${PARTITIONS[@]}"; do
	if [ $(echo "${f}" | grep "super" -c) -eq 1 ]; then
		PARAMLINE+="${SUPERSIZE_HEX}@0x001ef000(super),"
	elif [ $(echo "${f}" | grep "userdata" -c) -eq 1 ]; then
		USERDATA_START=$(dec2hex $(expr $(hex2dec "0x001ef000") + $(hex2dec "${SUPERSIZE_HEX}" + 512)))
		PARAMLINE+="-@${USERDATA_START}(userdata:grow)"
	else
		PARAMLINE+="${f},"
	fi
done
cat "${ROCKDEV_ROMDUMP}/Image/parameter.txt" | grep -v CMDLINE > "${ROCKDEV_ROMDUMP}/Image/parameter.tmp"
echo "${PARAMLINE}" >> "${ROCKDEV_ROMDUMP}/Image/parameter.tmp"
mv "${ROCKDEV_ROMDUMP}/Image/parameter.tmp" "${ROCKDEV_ROMDUMP}/Image/parameter.txt"

echo "Updating image.cfg Firmware DateTime with current DateTime..."
sed -i "s|FW_DateTime \= \(.*\)|FW_DateTime = $(date -u +"%Y.%m.%d_%H:%M:%S")|" "${ROCKDEV_ROMDUMP}/image.cfg"


echo "Creating ${ROCKDEV_ROOT}/${ROCKDEV_ROM_NAME} ..."
wine "${ROCKDEV_SCRIPTS}/imgrepacker/imgRePackerRK.exe" \
/rmd4 "$(winepath -w "${ROCKDEV_ROMDUMP}")" 2>/dev/null

