#!/bin/bash
set -euo pipefail

source ${HOME}/bin/script_framework.sh

TARGET="${HOME}/.local/share/arch-package-index"

# Check for pacman (and with it for Archlinux)
which pacman >/dev/null 2>&1 || {
	fail "Tool 'pacman' not found: This script only works for Archlinux"
}

# Check for comm to be installed
which comm >/dev/null 2>&1 || {
fail "Please install 'comm' utility"
}

# Ensure the target dir exists
mkdir -p ${TARGET}

# CD into target dir
pushd ${TARGET} >/dev/null 2>&1

if ! [ -d .git ]; then
	step "Initializing empty git dir"
	git init -q
fi

[ -f groups.txt ] || {
	warn "No groups.txt found, creating one with 'base' group."
	warn "You might want to edit your ${TARGET}/groups.txt and add more groups installed on your system..."
	echo "base" >groups.txt
}

step "Collecting installed packages..."

# Collect packages not contained in groups
pacman -Qgq $(cat groups.txt) | sort >group-packages.txt

# Collect packages
comm -23 <(pacman -Qeq | sort) group-packages.txt >non-group-packages.txt
comm -23 <(pacman -Qeqn | sort) group-packages.txt >official-packages.txt
comm -23 non-group-packages.txt official-packages.txt >aur-packages.txt

# Remove temporary stores
rm group-packages.txt non-group-packages.txt

info "Package files updated"

step "Creating update commit..."

git_files=(
	aur-packages.txt
	groups.txt
	official-packages.txt
)

git add "${git_files[@]}"
git commit -q --no-gpg-sign -m 'Update from arch-package-index' "${git_files[@]}"

popd >/dev/null 2>&1