#!/bin/sh
set -eu

. neko/update/utils

# Apply patches
run './neko/update/patch.sh'
br

# Show messages
for message in $(find neko/messages -type f ! -name '*.resolved' -print | sort); do
  file=$(basename -- "${message}")

  if [ ! -f "neko/flags/${file}" ]; then
    if contains '--install' "$@"; then
      touch "neko/flags/${file}"
    else
      say 'There is an important notice!'
      cat "${message}"

      say 'Continue? (Are you ready for upgrading?)'
      printf '[y/N] > '
      read -r yn

      case "${yn}" in
        [Yy]|[Yy][Ee][Ss])
          touch "neko/flags/${file}"
          say "Let's go!"
          say "To read the message again, run: \$ cat ${message}"
          br
          ;;
        *)
          say "Okay, please run this script again when you're ready!"
          exit 1
          ;;
      esac
    fi
  fi
done

# Update
docker_update() {
  ./neko/update/container.sh 'docker' "$@"
}
podman_update() {
  ./neko/update/container.sh 'podman' "$@"
}
native_update() {
  ./neko/update/native.sh "$@"
}

if   contains '--docker' "$@"; then docker_update "$@"
elif contains '--podman' "$@"; then podman_update "$@"
elif contains '--native' "$@"; then native_update "$@"

else
  say 'Do you use Docker or Podman?'
  printf 'd: Docker, p: Podman, n: No [d/p/N] > '
  read -r resp

  case "${resp}" in
    [Yy]|[Yy][Ee][Ss])
      sadsay "Watch out! ${resp} is not a valid answer." >&2
      exit 2
      ;;
    [Dd]) docker_update "$@" ;;
    [Pp]) podman_update "$@" ;;
    *)    native_update "$@" ;;
  esac
fi

# Done
say 'Enjoy your sabakan life~'