#!/bin/bash

# omarchy:summary=Create or restore system snapshots with snapper
# omarchy:args=<create|restore>
# omarchy:requires-sudo=true

set -e

COMMAND="$1"

if [[ -z $COMMAND ]]; then
  echo "Usage: omarchy-snapshot <create|restore>" >&2
  exit 1
fi

if omarchy-cmd-missing snapper; then
  exit 127 # omarchy-update can use this to just ignore if snapper is not available
fi

case "$COMMAND" in
create)
  # The description is just a label, so never let it abort the snapshot.
  DESC="$(omarchy-version 2>/dev/null || echo unknown)"

  # Get existing snapper config names from CSV output
  mapfile -t CONFIGS < <(sudo snapper --csvout list-configs | awk -F, 'NR>1 {print $1}')

  # Snapper installed but unconfigured snapshots nothing. Staying quiet here
  # reads as a successful snapshot, so the next update looks recoverable when
  # nothing has ever been captured.
  if (( ${#CONFIGS[@]} == 0 )); then
    echo -e "\e[33mNo Snapper configs found, so no snapshot was created.\e[0m" >&2
    echo "Configure Snapper with: sudo bash -euo pipefail \"$OMARCHY_PATH/install/config/snapper.sh\"" >&2
    exit 1
  fi

  echo -e "\e[32mCreate system snapshot\e[0m"

  for config in "${CONFIGS[@]}"; do
    sudo snapper -c "$config" create -c number -d "$DESC"
    sudo snapper -c "$config" cleanup number
  done

  echo "Snapshots can be selected during boot."
  ;;
restore)
  sudo limine-snapper-restore
  ;;
esac
