#!/bin/bash

set -e

VERSION=`bin/buildinfo.py long`
SHORT_VERSION=`bin/buildinfo.py short`

BOARDS_ESP32="tlora-v2 tlora-v1 tlora_v1_3 tlora-v2-1-1.6 tbeam heltec-v2.0 heltec-v2.1 tbeam0.7"
#BOARDS_ESP32=tbeam

# FIXME note nrf52840dk build is for some reason only generating a BIN file but not a HEX file nrf52840dk-geeksville is fine
BOARDS_NRF52="rak4631 t-echo"

OUTDIR=release/latest

# We keep all old builds (and their map files in the archive dir)
ARCHIVEDIR=release/archive 

rm -f $OUTDIR/firmware*

mkdir -p $OUTDIR/bins $ARCHIVEDIR
rm -r $OUTDIR/bins/* || true
mkdir -p $OUTDIR/bins/universal $OUTDIR/elfs/universal

# build the named environment and copy the bins to the release directory
function do_build() {
	BOARD=$1
	isNrf=$3
	
    echo "Building for $BOARD with $PLATFORMIO_BUILD_FLAGS"
    rm -f .pio/build/$BOARD/firmware.*

    # The shell vars the build tool expects to find
    export APP_VERSION=$VERSION

    # Are we building a universal/regionless rom?
    export HW_VERSION="1.0"
    basename=universal/firmware-$BOARD-$VERSION

    pio run --environment $BOARD # -v
    SRCELF=.pio/build/$BOARD/firmware.elf
    cp $SRCELF $OUTDIR/elfs/$basename.elf

    if [ "$isNrf" = "false" ]
    then
        echo "Copying ESP32 bin file"
        SRCBIN=.pio/build/$BOARD/firmware.bin
        cp $SRCBIN $OUTDIR/bins/$basename.bin
    else
        echo "Generating NRF52 uf2 file"
        SRCHEX=.pio/build/$BOARD/firmware.hex
        bin/uf2conv.py $SRCHEX -c -o $OUTDIR/bins/$basename.uf2 -f 0xADA52840
    fi
}

function do_boards() {
	declare boards=$1
	declare isNrf=$2
	for board in $boards; do
		# Build universal
		do_build $board "" "$isNrf" 
	done
}

# Make sure our submodules are current
git submodule update 

# Important to pull latest version of libs into all device flavors, otherwise some devices might be stale
platformio lib update 

do_boards "$BOARDS_ESP32" "false"
do_boards "$BOARDS_NRF52" "true"

echo "Building SPIFFS for ESP32 targets"
pio run --environment tbeam -t buildfs
cp .pio/build/tbeam/spiffs.bin $OUTDIR/bins/universal/spiffs-$VERSION.bin

# keep the bins in archive also
cp $OUTDIR/bins/universal/spiffs* $OUTDIR/bins/universal/firmware* $OUTDIR/elfs/universal/firmware* $ARCHIVEDIR

echo Updating android bins $OUTDIR/forandroid
rm -rf $OUTDIR/forandroid
mkdir -p $OUTDIR/forandroid
cp -a $OUTDIR/bins/universal/*.bin $OUTDIR/forandroid/

cat >$OUTDIR/curfirmwareversion.xml <<XML
<?xml version="1.0" encoding="utf-8"?>

<!-- This file is kept in source control because it reflects the last stable
release.  It is used by the android app for forcing software updates.  Do not edit.
Generated by bin/buildall.sh -->

<resources>
    <string name="cur_firmware_version" translatable="false">$VERSION</string>
    <string name="short_firmware_version" translatable="false">$SHORT_VERSION</string>
</resources>
XML

echo Generating $ARCHIVEDIR/firmware-$VERSION.zip
rm -f $ARCHIVEDIR/firmware-$VERSION.zip
zip --junk-paths $ARCHIVEDIR/firmware-$VERSION.zip $ARCHIVEDIR/spiffs-$VERSION.bin $OUTDIR/bins/universal/firmware-*-$VERSION.* images/system-info.bin bin/device-install.sh bin/device-update.sh

echo BUILT ALL