default:
    @just --list

core-wheel-dir := "../wren-core-py/target/wheels/"

# ─── Install (light) ──────────────────────────────────────────────
# Uses the locked prebuilt wren-core-py wheel. No Rust toolchain required.
# Dev tools come from uv's default dev dependency group.

install:
    uv sync

install-all:
    uv sync --all-extras

install-extra extra:
    #!/usr/bin/env bash
    set -euo pipefail
    if [ "{{ extra }}" = "mysql" ]; then
        mysql_prefix=$(brew --prefix mysql-client 2>/dev/null || true)
        if [ -n "$mysql_prefix" ]; then
            export PKG_CONFIG_PATH="$mysql_prefix/lib/pkgconfig:${PKG_CONFIG_PATH:-}"
        fi
    fi
    uv sync --extra {{ extra }}

install-memory:
    uv sync --extra memory

# ─── Local engine (opt-in; requires Rust + Cargo) ─────────────────
# Use only when testing core/wren against local Rust changes.

# Low-level helper: builds the wheel only; does not modify .venv.
build-core:
    cd ../wren-core-py && just install && just build

# Rebuild and overlay the local wheel into the current .venv.
use-local-core:
    just build-core
    uv pip install --reinstall --no-index --find-links {{ core-wheel-dir }} wren-core-py

# First-time setup for engine development: light sync + local overlay.
install-local:
    just install
    just use-local-core

# ─── Run (read-only; assumes dependencies are installed) ──────────
# --no-sync preserves any local core overlay. Re-run an install recipe
# after dependency changes.

dev:
    uv run --no-sync wren

test:
    uv run --no-sync pytest tests/ -v

test-unit:
    uv run --no-sync pytest tests/unit/ -v -m unit

test-datafusion:
    uv run --no-sync pytest tests/connectors/test_datafusion.py -v -m datafusion

test-duckdb:
    uv run --no-sync pytest tests/connectors/test_duckdb.py -v -m duckdb

test-postgres:
    uv run --no-sync pytest tests/connectors/test_postgres.py -v -m postgres

test-mysql:
    uv run --no-sync pytest tests/connectors/test_mysql.py tests/connectors/test_mysql_connector.py -v -m mysql

test-snowflake:
    uv run --no-sync pytest tests/connectors/test_snowflake.py -v -m snowflake

test-canner:
    uv run --no-sync pytest tests/connectors/test_canner.py -v -m canner

test-clickhouse:
    uv run --no-sync pytest tests/connectors/test_clickhouse.py -v -m clickhouse

test-trino:
    uv run --no-sync pytest tests/connectors/test_trino.py -v -m trino

test-connector marker:
    uv run --no-sync pytest tests/connectors/ -v -m {{ marker }}

test-memory:
    uv run --no-sync pytest tests/unit/test_memory.py -v

lint:
    uv run --no-sync ruff format --check src/
    uv run --no-sync ruff check src/

format:
    uv run --no-sync ruff format src/
    uv run --no-sync ruff check --fix src/

build:
    uv build

alias fmt := format
alias install-dev := install
