#!/bin/bash

version="0.2.1"
reldate="2026/10/24"

scriptname=$(basename ${0})

if (( EUID != 0 )); then
    echo "${scriptname} must be run as root"
    exit 1
fi

TEMPDIR="/var/cache/nanolx"
LOGFILE="${TEMPDIR}/new_packages.log"
NEWLIST="${TEMPDIR}/package_list_new.txt"
OLDLIST="${TEMPDIR}/package_list_old.txt"

GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
RESET='\033[0m'

case "${1}" in
    pre)
        mkdir -p "${TEMPDIR}"
        apt-cache pkgnames 2>/dev/null | sort > "${OLDLIST}"
    ;;
    post)
        if [ -f "${OLDLIST}" ]; then
            apt-cache pkgnames 2>/dev/null | sort > "${NEWLIST}"
            NEW_PKGS=$(comm -13 "${OLDLIST}" "${NEWLIST}")

            if [ -n "${NEW_PKGS}" ]; then
                PKG_COUNT=$(echo "${NEW_PKGS}" | wc -l)
                TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
                LOGTMP=$(mktemp)

                echo -e "=== ${PKG_COUNT} new packages found on ${TIMESTAMP} ===\n" >> "${LOGTMP}"

                echo -e "\n${YELLOW}================================================"
                echo -e "${GREEN} ★ Apt Hook: ${PKG_COUNT} new packages(s) found"
                echo -e "${YELLOW}================================================\n"

                echo "${NEW_PKGS}" | while read -r pkg; do
                    if [ -n "${pkg}" ]; then
                        IFS=$'\t' read -r VERSION DESC < <(
                            apt show "${pkg}" 2>/dev/null | awk '
                                /^Version:/ { sub(/^Version: /, ""); ver=$0 }
                                /^Description:/ { sub(/^Description: /, ""); desc=$0; exit }
                                END { print ver "\t" desc }
                            '
                        )
                        {
                            echo -e "  • ${GREEN}${pkg}${RESET} (${CYAN}${VERSION}${RESET})"
                            echo -e "    ${BLUE}↳${RESET} ${DESC}"
                            echo ""
                        } | tee >(ansifilter >> "${LOGTMP}")
                    fi
                done

                if [ -f "${LOGFILE}" ]; then
                    cat "${LOGFILE}" >> "${LOGTMP}"
                fi
                mv "${LOGTMP}" "${LOGFILE}"

                echo -e "${YELLOW}================================================"
                echo -e "${BLUE}Log saved in:${RESET} ${LOGFILE}"
                echo -e "${YELLOW}================================================${RESET}\n"
            fi

            rm -f "${OLDLIST}" "${NEWLIST}"
        fi
    ;;
    clear )
        if [ -f "${LOGFILE}" ]; then
            echo "removing history of newly added packages"
            rm "${LOGFILE}"
        else
            echo "no history of newly added packages exists"
        fi
    ;;
    show )
        if [ -f "${LOGFILE}" ]; then
            if [ -n "${PAGER}" ]; then
                ${PAGER} "${LOGFILE}"
            else
                less "${LOGFILE}"
            fi
        else
            "no new packages recorded by nanolx-apt-hook"
        fi
    ;;
esac
