#!/bin/bash
set -Eeuo pipefail

SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
# shellcheck source=common.sh
source "$SCRIPT_DIR/common.sh"

parse_arguments "$@"
[[ -n "$ROOT_PARTITION" ]] || fail "System partition was not provided."
[[ -n "$DISK_SELECTED" ]] || fail "Target disk was not provided."
[[ "$RESTORE_MODE" =~ ^[123]$ ]] || fail "Invalid restore mode: $RESTORE_MODE"
require_block_device "$DISK_SELECTED"

trap 'cleanup_mount_tree' EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
show_progress "Preparing mount points"
mount_filesystems
verify_selected_root
repair_root_fstab
repair_mkinitcpio_config

case "$RESTORE_MODE" in
    2) repair_arch_packages 0 ;;
    3) repair_arch_packages 1 ;;
esac
detect_grub_commands

chroot_run \
    "Installing GRUB in Legacy mode" \
    "$GRUB_INSTALL_COMMAND" --force --target=i386-pc --recheck --boot-directory=/boot "$DISK_SELECTED"
refresh_boot_files
validate_boot_files

show_progress "Finishing the restore"
sync
cleanup_mount_tree || fail "GRUB was restored, but a filesystem could not be unmounted."
trap - EXIT
log_message "Legacy GRUB restore completed successfully"
printf 'EVENT:SUCCESS:Restore operation completed.\n'
