set dotenv-required := true

export MSYS2_ARG_CONV_EXCL := "*"
export MSYS2_ENV_CONV_EXCL := "*"
remote_ssh_target := env("REMOTE_SSH_TARGET")
remote_docker_container := env("REMOTE_DOCKER_CONTAINER")
remote_root := "$REMOTE_SSH_TARGET:$REMOTE_WORKDIR"
rsync_flags := "-avLh --progress --stats --itemize-changes"
upload_excludes := "--exclude-from=.stignore"

upload:
    rsync {{ rsync_flags }} {{ upload_excludes }} . {{ remote_root }}/; \

sync-pkgs:
    uv sync --inexact

sync-data:
    python -m habitat_sim.utils.datasets_download --uids habitat_test_scenes --data-path data/
    python -m habitat_sim.utils.datasets_download --uids habitat_example_objects --data-path data/

ssh:
    ssh \
    -L 127.0.0.1:8385:127.0.0.1:42705 \
    -L 127.0.0.1:9098:127.0.0.1:9098 \
    -L 127.0.0.1:2718:172.30.0.2:2718 \
    {{ remote_ssh_target }}

docker:
    docker exec -it {{ remote_docker_container }} bash

marimo +notebook:
    uv run marimo edit {{ notebook }} --host 0.0.0.0 --port 2718 --no-token

add +packages:
    uv add {{ packages }} --no-sync
    just sync-pkgs

remove +packages:
    uv remove {{ packages }} --no-sync
    just sync-pkgs

remote cmd:
    uv run python scripts/remote_docker_run.py run -- {{ quote(cmd) }}

remote-check:
    uv run python scripts/remote_docker_run.py check

remote-dry cmd:
    uv run python scripts/remote_docker_run.py run --dry-run -- {{ quote(cmd) }}

# ── CAM verification ──────────────────────────────────────────────────────────

# Run all CAM tests in one pass (model + top + all modules)
cam-test-full:
    just remote "make -C hw/sim clean && make -C hw/sim test-all"

# Run top CAM tests
cam-test-top:
    just remote "make -C hw/sim clean && make -C hw/sim test-top"

# Run full-scale CAM Yosys synthesis and resource reporting
cam-synth:
    make -C hw/syn synth

# Run Python reference model tests
cam-test-py:
    make -C hw/sim test-model

# Run a specific CAM module test (e.g., cam-test-module MODULE=cam_core_banked)
cam-test-module MODULE:
    just remote "make -C hw/sim clean && make -C hw/sim test-module MODULE={{ MODULE }}"

# Run a single test case within a module (e.g., cam-test MODULE=cam_core_banked TESTCASE=banked_core_reads_aligned_eight_row_batch_after_one_cycle)
cam-test MODULE TESTCASE:
    just remote "make -C hw/sim clean && make -C hw/sim test-module MODULE={{ MODULE }} COCOTB_TESTCASE={{ TESTCASE }}"
