#!/bin/bash
# fixmp2.sh
set -euo pipefail

# Dry-run guard: export DRY_RUN=true to preview changes
DRY_RUN=${DRY_RUN:-false}
echo "DRY_RUN=${DRY_RUN}"

run() {
  if [[ "${DRY_RUN}" == "true" ]]; then
    echo "DRY_RUN: $*"
  else
    echo "RUN: $*"
    "$@"
  fi
}

# Set correct mountpoints for bpool
run zfs set mountpoint=none bpool
run zfs set mountpoint=none bpool/BOOT
run zfs set mountpoint=/boot bpool/BOOT/ubuntu_w2a3xq

# Set correct mountpoints for rpool
run zfs set mountpoint=none rpool
run zfs set mountpoint=none rpool/ROOT
run zfs set mountpoint=/ rpool/ROOT/ubuntu_w2a3xq
run zfs set mountpoint=/srv rpool/ROOT/ubuntu_w2a3xq/srv
run zfs set mountpoint=/usr rpool/ROOT/ubuntu_w2a3xq/usr
run zfs set mountpoint=/usr/local rpool/ROOT/ubuntu_w2a3xq/usr/local
run zfs set mountpoint=/var rpool/ROOT/ubuntu_w2a3xq/var
run zfs set mountpoint=/var/games rpool/ROOT/ubuntu_w2a3xq/var/games
run zfs set mountpoint=/var/lib rpool/ROOT/ubuntu_w2a3xq/var/lib
run zfs set mountpoint=/var/lib/AccountsService rpool/ROOT/ubuntu_w2a3xq/var/lib/AccountsService
run zfs set mountpoint=/var/lib/NetworkManager rpool/ROOT/ubuntu_w2a3xq/var/lib/NetworkManager
run zfs set mountpoint=/var/lib/apt rpool/ROOT/ubuntu_w2a3xq/var/lib/apt
run zfs set mountpoint=/var/lib/dpkg rpool/ROOT/ubuntu_w2a3xq/var/lib/dpkg
run zfs set mountpoint=/var/log rpool/ROOT/ubuntu_w2a3xq/var/log
run zfs set mountpoint=/var/mail rpool/ROOT/ubuntu_w2a3xq/var/mail
run zfs set mountpoint=/var/snap rpool/ROOT/ubuntu_w2a3xq/var/snap
run zfs set mountpoint=/var/spool rpool/ROOT/ubuntu_w2a3xq/var/spool
run zfs set mountpoint=/var/www rpool/ROOT/ubuntu_w2a3xq/var/www

# Set correct mountpoints for user data
run zfs set mountpoint=/home rpool/USERDATA/home_w8nipt
run zfs set mountpoint=/root rpool/USERDATA/root_w8nipt

# Set correct mountpoints for special datasets (if needed)
run zfs set mountpoint=none rpool/USERDATA
run zfs set mountpoint=none rpool/keystore
run zfs set mountpoint=none rpool/var
run zfs set mountpoint=none rpool/var/lib
x

# Ensure bootfs is set to the intended root dataset (idempotent)
if [[ "${DRY_RUN}" == "true" ]]; then
  echo "DRY_RUN: zpool get -H -o value bootfs rpool"
  echo "DRY_RUN: zpool set bootfs=rpool/ROOT/ubuntu_w2a3xq rpool"
else
  cur_bootfs=$(zpool get -H -o value bootfs rpool 2>/dev/null || echo "-")
  if [[ "$cur_bootfs" != "rpool/ROOT/ubuntu_w2a3xq" ]]; then
    echo "Setting rpool bootfs -> rpool/ROOT/ubuntu_w2a3xq (was: $cur_bootfs)"
    zpool set bootfs=rpool/ROOT/ubuntu_w2a3xq rpool
  else
    echo "rpool bootfs already rpool/ROOT/ubuntu_w2a3xq"
  fi
fi

# Remount all datasets (dry-run will show action)
if [[ "${DRY_RUN}" == "true" ]]; then
  echo "DRY_RUN: zfs mount -a"
else
  zfs mount -a
fi

echo "ZFS mountpoints restored (DRY_RUN=${DRY_RUN})."
echo "If DRY_RUN=true, re-run with DRY_RUN=false to apply changes."
