#!/bin/sh
ENV_PROC_MTD=`cat /proc/mtd | grep '"env"' | cut -d ':' -f 1`

. /usr/local/etc/zy-nand-profile

if [ -e /boot/barebox/bin/boot ]; then
  if [ ! -e /boot/barebox/bin/b0 ]; then
    cp -p /boot/barebox/bin/boot /boot/barebox/bin/b0
  fi
  if [ ! -e /boot/barebox/bin/b1 ]; then
    cp -p /boot/barebox/bin/b0 /boot/barebox/bin/b1
    sed -i 's|^. /env/config|. /env/config\nnext_bootfrom="1"|g' /boot/barebox/bin/b1
  fi
  if [ ! -e /boot/barebox/bin/b2 ]; then
    cp -p /boot/barebox/bin/b0 /boot/barebox/bin/b2
    sed -i 's|^. /env/config|. /env/config\nnext_bootfrom="2"|g' /boot/barebox/bin/b2
  fi
  if ! grep -q 'x$next_bootfrom = x2' /boot/barebox/bin/boot ; then
    cd /boot/barebox/
    patch -p1 < /usr/local/share/linux-bsp-nas5xx/barebox-bin-boot.patch
    cd - > /dev/null
  fi

  MODEL_NAME=NAS
  DRIVE_BAYS=0
  NET_IFS=0
  if [ -e /etc/modelname ]; then
    MODEL_NAME=`cat /etc/modelname`

    if [ "x${MODEL_NAME:0:5}" = "xNSA31" ]; then
      DRIVE_BAYS=1
    elif [ "x${MODEL_NAME:0:5}" = "xNAS52" -o "x${MODEL_NAME:0:5}" = "xNAS32" -o "x${MODEL_NAME:0:5}" = "xNSA32" ]; then
      DRIVE_BAYS=2
    elif [ "x${MODEL_NAME:0:5}" = "xNAS54" ]; then
      DRIVE_BAYS=4
    fi

    if [ "x${MODEL_NAME:0:5}" = "xNSA31" -o "x${MODEL_NAME:0:5}" = "xNAS32" -o "x${MODEL_NAME:0:5}" = "xNSA32" ]; then
      NET_IFS=1
    elif [ "x${MODEL_NAME:0:5}" = "xNAS54" -o "x${MODEL_NAME:0:5}" = "xNAS52" ]; then
      NET_IFS=2
    fi
  fi

  if [ $DRIVE_BAYS != 0 ]; then
    echo "${MODEL_NAME}: drive_bays=${DRIVE_BAYS}"
  fi

  ROOT_PART=`df -h '/bin' | grep '/dev' | cut -d " " -f 1`
  if [ "x${ROOT_PART}" = "x/dev/root" ]; then
    ROOT_PART=`mount | sed -n 's|^/dev/\(.*\) on / .*|\1|p'`
    if [ "x${ROOT_PART}" != "x" ]; then
      ROOT_PART=/dev/${ROOT_PART}
    fi
  fi

  ROOT_ID=/dev/sda2
  ROOT_LBL=`blkid | grep "${ROOT_PART}:" | tr ' ' '\n' | grep -E '^LABEL=' | tr -d '"'`
  ROOT_PLBL=`blkid | grep "${ROOT_PART}:" | tr ' ' '\n' | grep -E '^PARTLABEL=' | tr -d '"'`
  ROOT_PUID=`blkid | grep "${ROOT_PART}:" | tr ' ' '\n' | grep -E '^PARTUUID=' | tr -d '"'`

  if [ "x${ROOT_PLBL}" != "x" -a "x${ROOT_PLBL}" = "xPART${ROOT_LBL}" ]; then
    ROOT_ID=${ROOT_PUID}
    echo using root ${ROOT_ID}

    sed -i 's|root=/dev/sda2 rootdelay=|root='${ROOT_ID}' rootdelay=|g' /boot/barebox/bin/boot
    sed -i 's|root=PARTLABEL=.* rootdelay=|root='${ROOT_ID}' rootdelay=|g' /boot/barebox/bin/boot
    sed -i 's|root=PARTUUID=.* rootdelay=|root='${ROOT_ID}' rootdelay=|g' /boot/barebox/bin/boot
  fi

  if [ $DRIVE_BAYS != 0 ]; then
    sed -i 's|netif_num=.* root=|root=|g' /boot/barebox/bin/boot
    sed -i 's|ihd_num=.* root=|root=|g' /boot/barebox/bin/boot
    sed -i 's|syno_hw_version=.* root=|root=|g' /boot/barebox/bin/boot
    sed -i 's|drive_bays=.* root=|root=|g' /boot/barebox/bin/boot

    sed -i 's|root='${ROOT_ID}'|drive_bays='${DRIVE_BAYS}' syno_hw_version='${MODEL_NAME}'v10 ihd_num='${DRIVE_BAYS}' root='${ROOT_ID}'|g' /boot/barebox/bin/boot
    if [ $NET_IFS != 0 ]; then
      sed -i 's|root='${ROOT_ID}'|netif_num='${NET_IFS}' root='${ROOT_ID}'|g' /boot/barebox/bin/boot
    fi
  fi
fi

if [ -e /boot/barebox/config -a -e /firmware/sbin/bareboxenv ]; then
  echo "*** Creating bb.env ***"
  /firmware/sbin/bareboxenv -s /boot/barebox /boot/bb.env
fi

if [ -e /boot/bb.env -a -e /dev/mtd${ENV_MTD} -a -e /sbin/flash_erase -a -e /sbin/flashcp -a x${ENV_PROC_MTD} = xmtd${ENV_MTD} ]; then
  echo "*** Erasing ***"
  /sbin/flash_erase /dev/mtd${ENV_MTD} 0 0
  echo "*** Writing ***"
  /sbin/flashcp /boot/bb.env /dev/mtd${ENV_MTD}
fi

