#!/bin/bash

declare -a pkgs
while read pkg; do
    pkgs+=("${pkg}")
done

declare operation
operation="${1}"

declare conf_file
conf_file='/etc/pacman-zfs-snapshot.conf'

declare important_names snaps_trivial_keep snaps_important_keep snaps_trivial_suffix snaps_important_suffix
if [[ -r "${conf_file}" ]]; then
    source "${conf_file}"
fi

if [[ ! "${important_names}" ]]; then important_names='linux'; fi
if [[ ! "${snaps_trivial_keep}" ]]; then snaps_trivial_keep='5'; fi
if [[ ! "${snaps_important_keep}" ]]; then snaps_important_keep='5'; fi
if [[ ! "${snaps_trivial_suffix}" ]]; then snaps_trivial_suffix='trv'; fi
if [[ ! "${snaps_important_suffix}" ]]; then snaps_important_suffix='imp'; fi
if [[ ! "${pkgs_list_max_length}" ]]; then pkgs_list_max_length='24'; fi

function split_pkgs_by_importance () {
    local pkgs_in_transaction
    pkgs_in_transaction=("${@}")
    for pkg in "${pkgs_in_transaction[@]}"; do
        if grep -Piq -- '^'"${important_names}"'$' <<<"${pkg}"; then
            important_pkgs_in_transaction+=("${pkg}")
        else
            trivial_pkgs_in_transaction+=("${pkg}")
        fi
    done
}

function set_severity () {
    if [[ "${#important_pkgs_in_transaction[@]}" -ge '1' ]]; then
        severity='imp'
    else
        severity='trv'
    fi
}

function write_pkg_list_oneline () {
    local unabridged_pkg_list_oneline
    if [[ "${severity}" == 'imp' ]]; then
        for pkg in "${important_pkgs_in_transaction[@]}"; do
            if [[ "${unabridged_pkg_list_oneline}" ]]; then
                unabridged_pkg_list_oneline="${unabridged_pkg_list_oneline}"','"${pkg}"
            else
                unabridged_pkg_list_oneline="${pkg}"
            fi
        done
    fi
    if [[ "${#trivial_pkgs_in_transaction[@]}" -ge '1' ]]; then
        for pkg in "${trivial_pkgs_in_transaction[@]}"; do
            if [[ "${unabridged_pkg_list_oneline}" ]]; then
                unabridged_pkg_list_oneline="${unabridged_pkg_list_oneline}"','"${pkg}"
            else
                unabridged_pkg_list_oneline="${pkg}"
            fi
        done
    fi
}

function main () {
    local pkgs_in_transaction
    pkgs_in_transaction=("${@}")

    local -a important_pkgs_in_transaction trivial_pkgs_in_transaction
    split_pkgs_by_importance "${pkgs_in_transaction[@]}"

    local severity
    set_severity

    local pkg_list_oneline
    write_pkg_list_oneline

    #for pkg in "${!important_pkgs_in_transaction[@]}"; do
    #    printf -- 'Array item '"'"'%s'"'"' equals '"'"'%s'"'"'\n' "${pkg}" "${important_pkgs_in_transaction[${pkg}]}"
    #done
}

main "${pkgs[@]}"