set shell := ["/usr/bin/env", "bash", "-euo", "pipefail", "-c"]

[private]
default:
	@just --choose

# Run controller
run-controller $RUST_LOG="debug,h2=info,hyper_util=info,tower=info":
  cargo run --package patagia-controller -- --log-stderr

# Run controller local development
dev-controller:
  watchexec --clear --restart --stop-signal INT --debounce 300ms -- just run-controller

# Run agent
run-agent $RUST_LOG="debug,h2=info,hyper_util=info,tower=info":
  cargo run --package patagia-agent

# Run agent local development
dev-agent:
  watchexec --clear --restart --stop-signal INT --debounce 300ms -- just run-agent

# Lint all source code
lint:
 cargo clippy

# Format all source code
fmt:
 nix fmt

# Update all dependencies
update: update-nix update-rust-deps

# Update rust dependencies
update-rust-deps:
  cargo upgrade --recursive
  cargo update --recursive

# Update nix flake packages
update-nix:
  nix flake update

# Find unused dependencies with cargo machete
machete:
  cargo machete

# Generate OpenAPI spec
open-api:
  cargo xtask open-api

# Run all tests
check: check-nix

# check-nix
check-nix:
  nix flake check

# Run PostgreSQL for development and testing
dev-postgres:
  mkdir -p "$XDG_RUNTIME_DIR/patagia-postgres"
  podman volume exists patagia-postgres || podman volume create patagia-postgres
  podman run \
  --detach \
  --replace \
  --name patagia-postgres \
  --env POSTGRES_DB=patagia \
  --env POSTGRES_USER=patagia \
  --env POSTGRES_PASSWORD=swordfish \
  --volume patagia-postgres:/var/lib/postgresql/data \
  --volume "$XDG_RUNTIME_DIR/patagia-postgres:/var/run/postgresql" \
  docker.io/postgres:17

# Reset PostgreSQL data and start
dev-postgres-reset: dev-postgres-clean dev-postgres

# Clean up PostgreSQL data
dev-postgres-clean:
  podman rm -f patagia-postgres || true
  podman volume rm patagia-postgres || true

# Connect to PostgreSQL with psql
dev-postgres-psql:
  podman exec -it patagia-postgres psql -U patagia