# Copyright (C) 2025 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#!/usr/bin/bash

source `dirname $0`/src/preamble.sh

function start_render_() {
    start_
    if [[ ! "$GITHUB_WORKFLOW" ]]; then
        if [ ! -d ${MESA_LIB_DIR} ]; then
            bash ${BUILD_COMMON_DIR}/get-mesa.sh
        fi

        if [ ! -d ${GLTF_DIR} ]; then
            cat ${RENDERDIFF_TEST_DIR}/tests/gltf_models.txt | xargs bash ${BUILD_COMMON_DIR}/get-gltf-sample-assets.sh
        fi

        # Install python deps
        python3 -m venv ${VENV_DIR}
        source ${VENV_DIR}/bin/activate

        NEEDED_PYTHON_DEPS=("numpy" "tifffile")
        for cmd in "${NEEDED_PYTHON_DEPS[@]}"; do
            if ! python3 -m pip show -q "${cmd}"; then
                python3 -m pip install ${cmd}
            fi
        done
    fi
    # -W enables the webgpu build
    # -f forces regeneration of cmake build files
    # -X points to the mesa directory, which contains the compiled gl and vk drivers.
    GLTF_VIEWER_PATH="$(pwd)/out/cmake-debug/samples/gltf_viewer"
    if [[ "$NOREBUILD" == "true" ]] && [[ -f ${GLTF_VIEWER_PATH} ]]; then
        echo "Skipping build of gltf_viewer"
    else
        CXX=`which clang++` CC=`which clang` ./build.sh -f -W -X ${MESA_DIR} -p desktop debug gltf_viewer
    fi
}

function end_render_() {
    if [[ ! "$GITHUB_WORKFLOW" ]]; then
        deactivate # End python virtual env
    fi
    end_
}

# Following steps are taken:
#  - Get and build mesa
#  - Build gltf_viewer
#  - Run a test

for i in "$@"
do
case $i in
    --test_filter=*)
    TEST_FILTER="${i#*=}"
    shift # past argument=value
    ;;
    --no_rebuild)
    NOREBUILD="true"
    shift # past argument with no value
    ;;
    --num_threads=*)
    NUM_THREADS="${i#*=}"
    shift # past argument=value
    ;;
    *)
          # unknown option
    ;;
esac
done


start_render_ && \
    python3 ${RENDERDIFF_TEST_DIR}/src/render.py \
            --gltf_viewer="$(pwd)/out/cmake-debug/samples/gltf_viewer" \
            --test="${RENDERDIFF_TEST_DIR}/tests/presubmit.json" \
            --output_dir="${RENDER_OUTPUT_DIR}" \
            --opengl_lib="${MESA_LIB_DIR}" \
            --vk_icd="${MESA_VK_ICD_PATH}" \
            ${TEST_FILTER:+--test_filter="$TEST_FILTER"} \
            ${NUM_THREADS:+--num_threads="$NUM_THREADS"} && \
    end_render_
