#!/bin/bash
#
# double-check
# Snukware package consistency checker
#

VERSION="1.1"

PKGDIR="/var/log/packages"
REPODIR="/var/cache/snukware"

INSTALLED_COUNT=0
REPO_COUNT=0

##############################################################################
# Installed packages
##############################################################################

check_installed_packages() {

    echo "[INFO] Scanning installed package database..."
    echo

    if [[ ! -d "$PKGDIR" ]]; then
        echo "[FAIL] Package database not found: $PKGDIR"
        exit 1
    fi

    local duplicates

    duplicates=$(
        find "$PKGDIR" -maxdepth 1 -type f -printf "%f\n" |
        sed -E 's/-[^-]+-[^-]+-[^-]+$//' |
        sort |
        uniq -d
    )

    if [[ -z "$duplicates" ]]; then
        echo "[OK] No duplicate installed packages found."
        echo
        return
    fi

    echo "=== DUPLICATE INSTALLED PACKAGES ==="
    echo

    while read -r pkg
    do
        [[ -z "$pkg" ]] && continue

        echo "[WARN] $pkg"
        echo "       Installed versions:"

        find "$PKGDIR" -maxdepth 1 -type f -printf "%f\n" |
        grep "^${pkg}-" |
        sort -V |
        sed 's/^/         /'

        echo

    done <<< "$duplicates"

    INSTALLED_COUNT=$(echo "$duplicates" | wc -l)
}

##############################################################################
# Repository
##############################################################################

check_repository() {

    echo "[INFO] Scanning package repository..."
    echo

    if [[ ! -d "$REPODIR" ]]; then
        echo "[WARN] Repository not found: $REPODIR"
        echo
        return
    fi

    local duplicates

    duplicates=$(
        find "$REPODIR" -type f -name "*.txz" -printf "%f\n" |
        sed -E 's/-[^-]+-[^-]+-[^-]+\.txz$//' |
        sort |
        uniq -d
    )

    if [[ -z "$duplicates" ]]; then
        echo "[OK] No multiple package archives found."
        echo
        return
    fi

    echo "=== MULTIPLE PACKAGE ARCHIVES ==="
    echo

    while read -r pkg
    do
        [[ -z "$pkg" ]] && continue

        count=$(
            find "$REPODIR" -type f -name "${pkg}-*.txz" |
            wc -l
        )

        echo "[WARN] $pkg ($count archives)"
        echo "       Package archives:"

        find "$REPODIR" -type f -name "${pkg}-*.txz" |
        sort -V |
        sed 's/^/         /'

        echo

    done <<< "$duplicates"

    REPO_COUNT=$(echo "$duplicates" | wc -l)
}

##############################################################################
# Summary
##############################################################################

summary() {

    echo "=== SUMMARY ==="
    echo

    printf "Installed duplicate groups : %d\n" "$INSTALLED_COUNT"
    printf "Repository package groups  : %d\n" "$REPO_COUNT"

    echo

    if (( INSTALLED_COUNT == 0 && REPO_COUNT == 0 )); then
        echo "Status: PASS"
        echo
        exit 0
    else
        echo "Status: WARNING"
        echo
        exit 1
    fi
}

##############################################################################
# Main
##############################################################################

echo
echo "Snukware Package Consistency Check v$VERSION"
echo

check_installed_packages
check_repository
summary
