project() {
  local cmd=$1
  log_status "project $*"
  shift

  export PROJECT_DIR=$PWD

  "project_$cmd" "$@"
}

# Languages

project_erlang() {
  export ERL_AFLAGS="-kernel shell_history enabled"

  export REBAR_CACHE_DIR=$(direnv_layout_dir)/rebar
  export REBAR_GLOBAL_CONFIG_DIR=$(direnv_layout_dir)/rebar/config
  export REBAR_GLOBAL_CACHE_DIR=$(direnv_layout_dir)/rebar/cache
}

project_elixir() {
  project_erlang

  export MIX_HOME=$(direnv_layout_dir)/mix
  export HEX_HOME=$(direnv_layout_dir)/hex

  PATH_add $MIX_HOME/bin
  PATH_add $HEX_HOME/bin
}

project_java() {
  export M2_HOME=$(direnv_layout_dir)/m2

  export GRADLE_HOME=$(direnv_layout_dir)/gradle

  PATH_add $GRADLE_HOME/bin
}

project_node() {
  export NODE_PATH=$(direnv_layout_dir)/node
  export NPM_CONFIG_USERCONFIG=$(direnv_layout_dir)/npm/npmrc
  export NPM_CONFIG_PREFIX=$(direnv_layout_dir)/npm/config
  export NPM_CONFIG_CACHE=$(direnv_layout_dir)/npm/cache
  export NPM_CONFIG_DEVDIR=$(direnv_layout_dir)/npm/dev

  export YARN_ENABLE_TELEMETRY=false
  export NEXT_TELEMETRY_DISABLED=1

  PATH_add $NODE_PATH/bin
  PATH_add node_modules/.bin
}

project_python() {
  export PYTHONUSERBASE=$(direnv_layout_dir)/python-user
  path_add PYTHONPATH $(realpath $PYTHONUSERBASE/lib/python*/site-packages)

  export POETRY_HOME=$(direnv_layout_dir)/poetry/data
  export POETRY_CACHE_DIR=$(direnv_layout_dir)/poetry/cache

  PATH_add $PYTHONUSERBASE/bin
}

project_ruby() {
  export GEM_HOME=$(direnv_layout_dir)/gem
  export BUNDLE_USER_HOME=$(direnv_layout_dir)/bundle

  PATH_add $GEM_HOME/bin
}

project_rust() {
  export CARGO_HOME=$(direnv_layout_dir)/cargo

  PATH_add $CARGO_HOME/bin
}

# Frameworks

project_phoenix() {
  project_elixir
  project_node
}

project_rails() {
  project_ruby
  project_node
}

project_tauri() {
  project_rust
  project_node
}