#!/usr/bin/env bash

set -euo pipefail

ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
FW_DIR="${ROOT_DIR}/esp32_firmware"
IDF_PATH="${ROOT_DIR}/.vendor/esp-idf"
IDF_TOOLS_PATH="${ROOT_DIR}/.vendor/espressif"
IDF_PYTHON_ENV_PATH="${IDF_TOOLS_PATH}/python_env/idf5.4_py3.9_env"
IDF_PYTHON="${IDF_PYTHON_ENV_PATH}/bin/python"
BUILD_DIR="${FW_DIR}/build"

export IDF_PATH
export IDF_TOOLS_PATH
export IDF_PYTHON_ENV_PATH
export PATH="${IDF_PYTHON_ENV_PATH}/bin:${IDF_TOOLS_PATH}/tools/xtensa-esp-elf-gdb/14.2_20240403/xtensa-esp-elf-gdb/bin:${IDF_TOOLS_PATH}/tools/xtensa-esp-elf/esp-14.2.0_20241119/xtensa-esp-elf/bin:${IDF_TOOLS_PATH}/tools/riscv32-esp-elf/esp-14.2.0_20241119/riscv32-esp-elf/bin:${IDF_TOOLS_PATH}/tools/esp32ulp-elf/2.38_20240113/esp32ulp-elf/bin:${PATH}"

usage() {
    cat <<'EOF'
Usage:
  ./esp32_firmware/idf-local.sh configure
  ./esp32_firmware/idf-local.sh build
  ./esp32_firmware/idf-local.sh rebuild

Notes:
  - ESP-IDF is expected at .vendor/esp-idf
  - ESP-IDF tools are expected at .vendor/espressif
  - This script uses direct CMake calls instead of idf.py
EOF
}

configure_project() {
    cmake -S "${FW_DIR}" \
        -B "${BUILD_DIR}" \
        -G "Unix Makefiles" \
        -DPYTHON_DEPS_CHECKED=1 \
        -DPYTHON="${IDF_PYTHON}" \
        -DIDF_TARGET=esp32s3 \
        -DESP_PLATFORM=1
}

build_project() {
    cmake --build "${BUILD_DIR}" -j4
}

case "${1:-}" in
    configure)
        configure_project
        ;;
    build)
        build_project
        ;;
    rebuild)
        configure_project
        build_project
        ;;
    *)
        usage
        exit 1
        ;;
esac
