#!/bin/bash

shopt -s extglob nullglob

# XXX: make detection code from kernel-install shared
BOOT_ROOT='/boot/efi'

# when creating a snapshot we fetch all bls configs from previous snapshot dir,
# mangle them to contain current snapshot number, then install to efi partition.
create_snapshot()
{
	subvol="$1"
	fs="$2"
	num="$3"

	[ "$fs" = btrfs ] || return 1

	# don't handle this here if called within transactional-update. We have
	# to run after it's done doing it's thing.
	[ -n "$TRANSACTIONAL_UPDATE" -a -z "$TRANSACTIONAL_UPDATE_PLUGIN" ] && return 0

	export SNAPSHOT="$num"
	export SUBVOL="@/.snapshots/$num/snapshot"
	for k in "$subvol/.snapshots/$num"/snapshot/usr/lib/modules/*/vmlinuz; do
		v="${k%/*}"
		v="${v##*/}"
		/usr/bin/kernel-install add "$v" "$k"
	done
}

delete_snapshot()
{
	subvol="$1"
	fs="$2"
	num="$3"

	[ "$fs" = btrfs ] || return 1

	export SNAPSHOT="$num"
	export SUBVOL="@/.snapshots/$num/snapshot"
	for k in "$subvol/.snapshots/$num"/snapshot/usr/lib/modules/*/vmlinuz; do
		v="${k%/*}"
		v="${v##*/}"
		/usr/bin/kernel-install remove "$v" "$k"
	done
}

set_default_snapshot()
{
	subvol="$1"
	fs="$2"
	num="$3"

	[ "$fs" = btrfs ] || return 1

	configs=("$subvol/.snapshots/$num"/bls-*.conf)
	configs=("${configs##*/bls-}")
	# FIXME: somehow we should know which kernel is default
	configs=($(printf '%s\n' "${configs[@]}"|sort))
	conf="${configs[0]}"
	if [ -n "$conf" ]; then
		bootctl set-default "$conf"
	fi
}

h()
{
	echo "Available commands:"
	echo "${!commands[@]}"
}

declare -A commands

commands['create-snapshot']=create_snapshot
commands['delete-snapshot']=delete_snapshot
commands['set-default-snapshot']=set_default_snapshot
commands['help']=h

logger -t snapper "$0 $@"

cmd="$1"
shift
[ -n "$cmd" ] || cmd=help
if [ "${#commands[$cmd]}" -gt 0 ]; then
	${commands[$cmd]} "$@"
fi
