#!/bin/bash
# Copyright 2024 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
#
# Setup a python3 virtual environment for running the study_serve.py.
# This will install the require dependencies automatically.
#
# Usage: python-venv-setup.sh [venv-path]
#
# The default venv-path is ".venv" inside of biod/study directory.

main() {
    local loc="$1"

    local script_dir
    if ! script_dir="$(dirname "${BASH_SOURCE[0]}")"; then
        echo "Error - Failed to get script's directory." >&2
        exit 1
    fi

    # Default the location to ".venv" in the study directory.
    if [[ -z "${loc}" ]]; then
        loc="${script_dir}/.venv"
    fi

    # Create new python3 virtual environment.
    rm -rf "${loc}"
    if ! python3 -m venv "${loc}"; then
        echo "Error - Failed to setup a python virtualenv." >&2
        exit 1
    fi

    # Install dependencies in the new virtual environment.
    local requirements=(
        "${script_dir}/requirements.txt"
        "${script_dir}/analysis-tool/requirements.txt"
    )
    local req
    for req in "${requirements[@]}"; do
        if ! "${loc}/bin/pip3" install -r "${req}"; then
            echo "Error - Failed to install python dependencies '${req}'." >&2
            exit 1
        fi
    done

    # Setup gitignore.
    echo -e "# This directory should not be committed.\n*" >"${loc}/.gitignore"
}

main "$@"
