#!/usr/bin/env bash

playwright:local() {
  bash e2e/Taskfile playwright:local "$@"
}

playwright:ui() {
  bash e2e/Taskfile playwright:ui "$@"
}

refresh_sqlx_db() {
  rm -f some_user.db
  for migration in migrations/each_user/*.sql; do
    echo "Applying $migration..."
    echo "BEGIN TRANSACTION;$(cat "$migration");COMMIT TRANSACTION;"\
      | sqlite3 some_user.db
  done
}

_env() {
  refresh_sqlx_db > /dev/null
  DATABASE_URL=sqlite:some_user.db \
  CACHE_BUST_ASSETS_DIR=static \
    "$@"
}

_cargo() {
    _env cargo "$@"
}

edit() {
  _env nvim
}

deploy_to_server() {
  where="$1"
  _cargo build --release
  rsync -v -essh ./target/release/mascarpone "$where:~" \
    && rsync -rav -essh ./hashed_static "$where:~/" \
    && ssh -t "$where" "sudo mv -f mascarpone /usr/bin/ && sudo rm -rf /var/local/mascarpone/hashed_static && sudo mv -f hashed_static /var/local/mascarpone/ && sudo systemctl restart mascarpone"
}

dev() {
  find src static migrations | entr -ccdr ./Taskfile _cargo run -- serve
}

release() {
  set -euo pipefail
  bash e2e/Taskfile playwright:ci
  _cargo test
  new_tag=$(git-cliff --unreleased --bumped-version)
  git tag -m "$new_tag" "$new_tag"
  cargo set-version "${new_tag#v}"
  mv CHANGELOG.md CHANGELOG.old
  cat <(git cliff) <(printf "\n") CHANGELOG.old > CHANGELOG.md
  rm CHANGELOG.old
}

"$@"
