#!/bin/bash

. "${MFEXT_HOME}/lib/bash_utils.sh"

set -eu

function usage() {
    echo "usage: freeze_requirements /path/to/requirements.txt"
}

if test "${1:-}" = "--help"; then
    usage
    exit 0
fi
if test "${1:-}" = ""; then
    usage
    exit 1
fi
REQUIREMENTS="$1"
REALPATH=$(readlink -m "${REQUIREMENTS}")
REALDIRNAME=$(dirname "${REALPATH}")
OVERRIDE=0
if test -f "${REALDIRNAME}/override"; then
    OVERRIDE=1
fi

TEMPO_LAYER_LABEL="tempolayer$$"
TEMPO_LAYER_PATH="$(pwd)/${TEMPO_LAYER_LABEL}"

CONSTRAINT=""
IFS=":" read -ra PATHS <<< "${PYTHONPATH:-}"
if test "${PATHS:-}" != ""; then
    for P in "${PATHS[@]}"; do
        F="${P}/requirements${METWORK_PYTHON_MODE:-}.txt"
        if test -f "${F}"; then
            CONSTRAINT="${CONSTRAINT} -c ${F}"
        fi
    done
fi

bootstrap_layer.sh "${TEMPO_LAYER_LABEL}" "${TEMPO_LAYER_PATH}"
layer_load "${TEMPO_LAYER_PATH}" >&2

mkdir -p "${TEMPO_LAYER_PATH}/tmp"
export TMPDIR="${TEMPO_LAYER_PATH}/tmp"
FREEZED_REQUIREMENTS="freezed_requirements.$$"
mkdir -p src
mkdir -p tmp_src

N=$(cat "${REQUIREMENTS}" |grep -c "^[^#].*[a-zA-Z0-9].*" || true)
if test "${N}" -eq 0; then
    rm -Rf "${TEMPO_LAYER_PATH}"
    exit 0
fi

cat "${REQUIREMENTS}" |sed 's/^git+/-e git+/g' > "${REQUIREMENTS}.tmp"

if test ${OVERRIDE} = 1; then
    CONSTRAINT="--ignore-installed"
fi
    
# shellcheck disable=SC2086
unsafe_pip install --src=./tmp_src --prefix="${TEMPO_LAYER_PATH}" -r "${REQUIREMENTS}.tmp" ${CONSTRAINT} >&2
PYTHONPATH=$(echo "${PYTHONPATH}" |awk -F ":" '{print $1;}')
export PYTHONPATH
unsafe_pip freeze -l |grep -v "^appdirs==" |grep -v "^packaging==" |grep -v "^pyparsing==" |grep -v "^six==" |grep -v "^virtualenv==" >${FREEZED_REQUIREMENTS}
for req in $(grep "^http:" "${REQUIREMENTS}.tmp"); do
    package=$(echo "$req" | awk -F "#egg=" '{print $2;}')
    grep -v "^$package==" ${FREEZED_REQUIREMENTS} > ${FREEZED_REQUIREMENTS}.2
    echo "$req" >> ${FREEZED_REQUIREMENTS}.2
    mv -f ${FREEZED_REQUIREMENTS}.2 ${FREEZED_REQUIREMENTS}
done
rm -Rf tmp_src src ${REQUIREMENTS}.tmp

N=$(cat "${REQUIREMENTS}" |grep '^--' |wc -l)
if test ${N} -gt 0; then
  cat "${REQUIREMENTS}" |grep '^--'
fi
cat "${FREEZED_REQUIREMENTS}"
rm -Rf "${TEMPO_LAYER_PATH}"
rm -f "${FREEZED_REQUIREMENTS}"
