#!/usr/bin/env bash
set -e

ROOT=$(dirname "$0")/..
DIST="${ROOT}/dist"

function get_package
{
    python -c "from neo4j._meta import package; print(package)"
}

function set_package
{
    sed -i 's/^package = .*/package = "'$1'"/g' neo4j/_meta.py
}

function get_version
{
    python -c "from neo4j._meta import version; print(version)"
}

function set_version
{
    sed -i 's/^version = .*/version = "'$1'"/g' neo4j/_meta.py
}

function check_file
{
    FILE=$1
    echo -n "Checking file $(basename ${FILE})... "
    if [ -f "${FILE}" ]
    then
        echo "OK"
    else
        echo "missing"
        STATUS=1
    fi
}

function set_metadata_and_setup
{
    PACKAGE="$1"; shift
    VERSION="$1"; shift

    cd ${ROOT}

    # Capture original package metadata
    ORIGINAL_PACKAGE=$(get_package)
    ORIGINAL_VERSION=$(get_version)
    echo "Source code originally configured for package ${ORIGINAL_PACKAGE}/${ORIGINAL_VERSION}"
    echo "----------------------------------------"
    grep "package\s\+=" neo4j/_meta.py
    grep "version\s\+=" neo4j/_meta.py
    echo "----------------------------------------"

    function cleanup() {
      # Reset to original package metadata
      set_package "${ORIGINAL_PACKAGE}"
      set_version "${ORIGINAL_VERSION}"
      echo "Source code reconfigured back to original package ${ORIGINAL_PACKAGE}/${ORIGINAL_VERSION}"
      echo "----------------------------------------"
      grep "package\s\+=" neo4j/_meta.py
      grep "version\s\+=" neo4j/_meta.py
      echo "----------------------------------------"
    }
    trap cleanup EXIT

    # Temporarily override package metadata
    set_package "${PACKAGE}"
    set_version "${VERSION}"
    echo "Source code reconfigured for package ${PACKAGE}/${VERSION}"
    echo "----------------------------------------"
    grep "package\s\+=" neo4j/_meta.py
    grep "version\s\+=" neo4j/_meta.py
    echo "----------------------------------------"

    # Create source distribution
    find . -name *.pyc -delete
    rm -rf ${ROOT}/*.egg-info 2> /dev/null
    python setup.py $*
    check_file "${DIST}/${PACKAGE}-${VERSION}.tar.gz"

  trap - EXIT
  cleanup
}

function setup
{
    ARGS="$*"
    rm -rf ${DIST} 2> /dev/null
    set_metadata_and_setup "neo4j-driver" ${ARGS}   # Legacy package; can be removed in 2.0
    set_metadata_and_setup "neo4j" ${ARGS}
}
