#!/usr/bin/env bash
set -euo pipefail

repo_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
board="${1:-}"
idf_dir="$repo_dir/.cache/esp-idf-v5.5.4"
tools_dir="$repo_dir/.cache/espressif"

if [[ "$board" != "m5stack-stopwatch" ]]; then
    echo "Usage: $0 m5stack-stopwatch" >&2
    echo "Waveshare support is reserved but intentionally not presented as implemented." >&2
    exit 2
fi

defaults="sdkconfig.defaults"
config_files=("$repo_dir/firmware/sdkconfig.defaults")
if [[ -f "$repo_dir/config/sdkconfig.defaults.local" ]]; then
    defaults="sdkconfig.defaults;../config/sdkconfig.defaults.local"
    config_files+=("$repo_dir/config/sdkconfig.defaults.local")
fi

if [[ ! -f "$idf_dir/export.sh" ]]; then
    echo "ESP-IDF 5.5.4 is not installed. Run ./scripts/setup-cloud.sh first." >&2
    exit 1
fi

config_key="$(sha256sum "${config_files[@]}" | sha256sum | cut -c1-16)"
sdkconfig="$repo_dir/.cache/sdkconfig/$board-$config_key"

mkdir -p "$repo_dir/.cache/idf-components" "$repo_dir/.cache/sdkconfig" "$repo_dir/dist/$board"
export IDF_TOOLS_PATH="$tools_dir"
export IDF_COMPONENT_CACHE_PATH="$repo_dir/.cache/idf-components"
# shellcheck disable=SC1091
source "$idf_dir/export.sh" >/dev/null

cd "$repo_dir/firmware"
idf.py -D DEVICE_LAB_BOARD=m5stack_stopwatch -D SDKCONFIG="$sdkconfig" \
    -D SDKCONFIG_DEFAULTS="$defaults" build
python "$repo_dir/firmware/tests/cjk_subset_linked_test.py" "$repo_dir/firmware/build/device_lab.elf"
python "$repo_dir/scripts/package-firmware.py" "$repo_dir/firmware/build" "$repo_dir/dist/$board" "$board"
python "$repo_dir/firmware/tests/vendor_i2c_abi_test.py" "$repo_dir/firmware/build/device_lab.elf"

echo "Firmware artifacts: $repo_dir/dist/$board"
