#!/bin/bash

. /etc/rc.d/efw_lib.sh

UPGRADED=/etc/upgrade/upgrade.d
PRE_HOOKS=/etc/upgrade/pre-upgrade.d
LOG="/var/efw/product/openfw-updates.log"
PIDFILE="/var/run/openfw-update.pid"

trap "rm -f $PIDFILE; exit" INT TERM EXIT

loadSettings /var/efw/main/settings

function setupchannels() {
    smart channel --remove-all -y > /dev/null 2>&1
    smart channel --add openfw \
        baseurl="https://repo.openfw.com.br" \
        type=rpm-md -y > /dev/null 2>&1
        
    smart update > /dev/null 2>&1
    smart newer 2>&1 | sed 's/\r//g; s/\[#*\]//g' >> $LOG
}

function start_upgrade() {
    # Captura os pacotes passados (pode ser um, vários, ou nenhum)
    local PACKAGES="$@"

    echo "+++ Running pre-upgrade hooks..." >> $LOG
    [ -d "${PRE_HOOKS}" ] && run-parts --report ${PRE_HOOKS} >> $LOG 2>&1

    if [ -n "${PACKAGES}" ]; then
        echo "+++ Starting upgrade for selected packages: ${PACKAGES}" >> $LOG
    else
        echo "+++ Starting full system upgrade..." >> $LOG
    fi

    # O SEGREDO ESTÁ AQUI: O -y vem antes. 
    # Se ${PACKAGES} estiver vazio, roda "smart upgrade -y" (tudo).
    # Se tiver "curl", roda "smart upgrade -y curl" (só o curl).
    smart upgrade -y ${PACKAGES} >> $LOG 2>&1
    
    if [ $? -eq 0 ]; then
        echo "+++ Running post-upgrade hooks..." >> $LOG
        [ -d "${UPGRADED}" ] && run-parts --report ${UPGRADED} >> $LOG 2>&1
        echo "+++ Upgrade process finished successfully." >> $LOG
    else
        echo "!!! ERROR: System upgrade failed." >> $LOG
    fi
}

echo $$ > $PIDFILE

ACTION="$1"

case "$ACTION" in
    update)
        # Limpa o log antes de começar o check
        > $LOG
        setupchannels
        ;;
    upgrade)
        shift # Remove a palavra "upgrade" dos argumentos, sobrando apenas os pacotes (se houver)
        start_upgrade "$@"
        ;;
    *)
        echo "Usage: $0 {update|upgrade} [package1 package2 ...]"
        exit 1
        ;;
esac