# browser-cli — task runner
# Run `just` or `just --list` to see all recipes.

# Default browser profile for `install` / quick checks
browser := "brave"

# Show available recipes
default:
    @just --list

# ── Setup ──────────────────────────────────────────────────────────────

# Install Python deps + Node deps for the extension build
setup:
    uv sync
    npm ci

# Register the native messaging host for a browser (default: {{browser}})
install browser=browser:
    uv run browser-cli install {{browser}}

# ── Python ─────────────────────────────────────────────────────────────

# Run the full Python test suite
test:
    uv run pytest -q

# Run tests verbosely
testv:
    uv run pytest -v

# Run a single test file or node id, e.g. `just test-one tests/test_api.py`
test-one target:
    uv run pytest -v {{target}}

# Run tests with a coverage report
cov:
    uv run pytest --cov=browser_cli --cov-report=term-missing

# ── Extension (TypeScript / MV3) ───────────────────────────────────────

# Build the extension bundle (extension/background.js)
build:
    npm run build:extension

# Run the JS (node:test) extension tests
test-ext:
    npm run test:extension

# Full extension gate: tsc + build + node --check + JS tests
check:
    npm run check:extension

# ── Everything ─────────────────────────────────────────────────────────

# Run the complete gate: extension check + Python tests
ci: check test

# ── Release ────────────────────────────────────────────────────────────

# Show the current version
version:
    @grep -m1 '^version' pyproject.toml | cut -d'"' -f2

# Bump version in pyproject.toml AND extension/manifest.json, e.g. `just bump 0.10.5`
bump new:
    sed -i 's/^version = ".*"/version = "{{new}}"/' pyproject.toml
    sed -i 's/"version": ".*"/"version": "{{new}}"/' extension/manifest.json
    @echo "bumped to {{new}} — remember to update uv.lock (uv lock) and rebuild the extension"

# Verify both version files agree
version-check:
    @py=$(grep -m1 '^version' pyproject.toml | cut -d'"' -f2); \
     ext=$(grep -m1 '"version"' extension/manifest.json | cut -d'"' -f4); \
     if [ "$py" = "$ext" ]; then echo "ok: $py"; else echo "MISMATCH pyproject=$py manifest=$ext"; exit 1; fi

# Build into /tmp/dist-browser-cli and publish using credentials from .env
publish:
    #!/usr/bin/env bash
    set -euo pipefail
    set -a
    [ ! -f .env ] || source .env
    set +a
    rm -rf /tmp/dist-browser-cli
    mkdir -p /tmp/dist-browser-cli
    uv build --out-dir /tmp/dist-browser-cli
    uv publish /tmp/dist-browser-cli/*

# ── Demos ──────────────────────────────────────────────────────────────

# Run the Python SDK demo
demo:
    uv run python examples/demo.py
