# Build a folder ./.env that contains the dev-shell which load all the right env
# vars.
#
# To speed up the nix evaluation, we only rebuild our environment when `./nix`
# or any of the `default.nix` files change. We do this by adding all these files
# to the nix store and using the store paths as a cache key.

nix_files=$(find . -name '*.nix' | grep -v '^./dist-newstyle')
for nix_file in $nix_files; do
  watch_file "$nix_file"
done
watch_file ./services/nginz/third_party/nginx-zauth-module/*
watch_file ./libs/libzauth/**/*
store_paths=$(echo "$nix_files" ./services/nginz/third_party/nginx-zauth-module/ ./libs/libzauth/ | xargs nix-store --add ./nix)
layout_dir=$(direnv_layout_dir)
env_dir=./.env

export NIX_CONFIG='extra-experimental-features = nix-command'

[[ -d "$layout_dir" ]] || mkdir -p "$layout_dir"

if [[ ! -d "$env_dir" || ! -f "$layout_dir/nix-rebuild" || "$store_paths" != $(<"$layout_dir/nix-rebuild") ]]; then
  bcmd=nix
  if command -v nom &>/dev/null; then
    if [[ "${USE_NOM}" != "0" ]]; then
      bcmd=nom
    fi
  fi
  echo "🔧 Building environment"
  $bcmd build -f nix wireServer.devEnv -Lv --out-link ./.env --fallback
  echo "$store_paths" >"$layout_dir/nix-rebuild"
fi

PATH_add "./.env/bin"
PATH_add "./.env-hs-run/bin"
path_add "PKG_CONFIG_PATH" "./.env/lib/pkgconfig"
path_add "LIBRARY_PATH" "./.env/lib"
path_add "PYTHONPATH" "./hack/python"
PATH_add "./dist"

# source .profile from `$env`. This sets NIX_PATH to pkgs defined in
# ./nix/default.nix. Tis is useful for nix tooling that runs inside this direnv,
# e.g. "nix-shell -p foo" will get "foo" for pkgs defined in ./nix/default.nix
[[ -f "./.env/.profile" ]] && source_env "./.env/.profile"

# Locale
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8

# RabbitMQ
export RABBITMQ_USERNAME=guest
export RABBITMQ_PASSWORD=alpaca-grapefruit

export RABBITMQ_USERNAME_V0=guest
export RABBITMQ_PASSWORD_V0=alpaca-grapefruit

export RABBITMQ_USERNAME_V1=guest
export RABBITMQ_PASSWORD_V1=alpaca-grapefruit

# Redis
export REDIS_PASSWORD=very-secure-redis-cluster-password
export REDIS_ADDITIONAL_WRITE_PASSWORD=very-secure-redis-master-password

# Integration tests
export INTEGRATION_DYNAMIC_BACKENDS_POOLSIZE=3

# AWS credentials for locally running services
# Keep these in sync with deploy/dockerephmeral/init.sh
export AWS_REGION="eu-west-1"
export AWS_ACCESS_KEY_ID="dummykey"
export AWS_SECRET_ACCESS_KEY="dummysecret"

# integration test suite timeout
export TEST_TIMEOUT_SECONDS=2

# OTEL
OTEL_SEMCONV_STABILITY_OPT_IN=http

# uncomment if you plan to run the integration setup manually against kube-ci
# unset AWS_REGION
# unset AWS_ACCESS_KEY_ID
# unset AWS_SECRET_ACCESS_KEY
# source_env ../cailleach/.envrc

# allow local .envrc overrides
[[ -f .envrc.local ]] && source_env .envrc.local
