# Get some variables provided by autosubmit.
# TODO: What do we do to ensure that these variables are defined in the proj file?
WORKDIR=%HPCROOTDIR%
ICON_VERSION=%ICON_VERSION%
SPACK_URL=%spack.url%
SPACK_BRANCH=%spack.branch%
SPACK_COMPILER=%spack.compiler%

# If the workdir directory does not exist create it
if [ ! -d ${WORKDIR} ]; then
  mkdir -p ${WORKDIR}
fi

# Go to the working directory
cd ${WORKDIR}

# Check if experiment's spack installation already exists, if it doesn't, clone it.
SPACK_ENV=spack/share/spack/setup-env.sh
if [ ! -f ${SPACK_ENV} ]; then
  echo "Spack folder not found!"
  exit 1
fi

# Setup the spack environment
source ${SPACK_ENV}

# Use spack to get a recent enough version of python3
if [ $( spack find python@3.8: &>/dev/null
  echo $?
) -ne 0 ]; then
  echo "Installing a version of python3"
  # Compile openmpi with schedulers=slurm
  spack install python@3.8:
else
  echo "python@3.8: already installed!"
fi

# Load the python module
spack load python@3.8:

PYTHON_ENVIRONMENT_FOLDER=%python_environment.folder_name%

if [ ! -d ${PYTHON_ENVIRONMENT_FOLDER} ]; then
  # Create virtual environment
  python3 -m venv --prompt AS ${PYTHON_ENVIRONMENT_FOLDER}
fi

# Load environment
source ${PYTHON_ENVIRONMENT_FOLDER}/bin/activate

# Create a link to the binary
ln -sf $(which python3) ${WORKDIR}/python3

# Install the requirements via pip
# TODO: Due to a incompatibility issue between latest numba and numpy I have to add this here. Hopefully removable soon.
requirements="%python_environment.requirements%"

# Convert list with python format to a bash array
requirements=($( echo ${requirements} | sed "s/'//g" | tr -d '[],'))

#TODO: Shouldn't be necessary but it is for now to overcome an issue with a repetition of the requirements.
# Use sort and uniq to get the unique elements
unique_requirements=($(printf "%s\n" "${requirements[@]}" | sort -u))

# Print the unique elements
echo "${unique_requirements[@]}"

# Install requirements.
for requirement in ${unique_requirements[@]} ; do
  python -m pip install ${requirement}
done
