#!/bin/bash
set -e

IS_CORE=""

if [ "$1" == "--core" ]; then
    shift
    IS_CORE=yes
elif [ "$1" == "--no-core" ]; then
    shift
elif echo $PWD | grep -q "trezor-core"; then
    IS_CORE=yes
fi

if [ -n "$1" ]; then
    OUTDIR=`readlink -f "$1"`
fi

cd "$(dirname "$0")"

# set up paths
INDEX="__init__.py"
GENPATH="${OUTDIR:-../trezorlib/messages}"
PROTO_PATH="../vendor/trezor-common/protob"
PROTO_FILES="types messages"

# set up temporary directory & cleanup
TMPDIR=$(mktemp -d)
function cleanup {
    rm -r $TMPDIR
}
trap cleanup EXIT

# set up pb2 outdir
PB2_OUT="$TMPDIR/pb2"
mkdir -p "$PB2_OUT"

# compile .proto files to python2 modules using google protobuf library
for file in $PROTO_FILES; do
    protoc --python_out="$PB2_OUT" -I/usr/include -I"$PROTO_PATH" "$PROTO_PATH/$file.proto"
done


if [ -n "$IS_CORE" ]; then
    # generate for micropython
    PB2PY_OPTS="-m"
else
    # create index (__init__.py)
    echo "# Automatically generated by pb2py" > $TMPDIR/$INDEX
    echo >> $TMPDIR/$INDEX
    PB2PY_OPTS="-l $TMPDIR/$INDEX"
fi

# convert google protobuf library to trezor's internal format
for file in $PROTO_FILES; do
    ./pb2py $PB2PY_OPTS -P "trezorlib.protobuf" -p "$PB2_OUT" "$file" "$TMPDIR"
done

if [ -n "$IS_CORE" ]; then
    cp "$TMPDIR/MessageType.py" "$TMPDIR/wire_types.py"
fi

# ensure $GENPATH exists and is empty of messages
mkdir -p "$GENPATH"
# only remove messages - there could possibly be other files not starting with capital letter
rm -f "$GENPATH"/[A-Z]*.py

# move generated files to the destination
# (this assumes $INDEX is *.py, otherwise we'd have to add $INDEX separately)
mv "$TMPDIR"/*.py "$GENPATH"

# the exit trap handles removing the tmp directory
