#!/bin/bash
#
# The install command
#

scriptdir=$( dirname $(readlink -fn $0))
source $scriptdir/lpf-defs.bash


function cli_confirm_install()
{
    local resultdir=$1
    local to_install=()
    local rpm
    for rpm in $( ls $resultdir ); do
        echo -n "Install $rpm (Yes/no) [y] ? " >&5
        read < $LPF_CONSOLE
        if [[ -z "$REPLY" || "$REPLY" == [Yy]* ]]; then
            to_install=( ${to_install[@]} $resultdir/$rpm )
        fi
    done
    echo >&5
    echo ${to_install[@]}
}


function gui_confirm_install()
{
    local resultdir=$1
    local rpm
    local listdata=()
    for rpm in  $( ls $resultdir ); do
        listdata=( ${listdata[@]} 'True' $rpm )
    done
    zenity --list --title "Select RPMs to install" --checklist \
        --column Install --column RPM \
        --separator=' ' \
        ${listdata[@]} | awk -v dir=$resultdir \
                            '{for (i=1; i<=NF; i++) print dir "/" $i}'
}


function check_to_install
{
    local pkg=$1; shift
    local ok=()
    local to_install=()
    local rpm
    for rpm in $@; do
        local curr_vers=$( rpm -q --qf "%{VERSION}-%{RELEASE}\n" $pkg )
        local lpf_vers=$( get_pkg_version $pkg )
        if [ "$curr_vers"  = "$lpf_vers" ]; then
           local rpm_base=$( basename $rpm .rpm )
           ( unset LPF_UPDATE || :
             warning  "installation errors" \
               "$pkg: $rpm_base: Version $curr_vers already installed." >&5
           )
        else
           ok=( ${ok[@]} $rpm )
        fi
    done
    echo ${ok[@]}
}


function log_and_echo
{
    echo $*
    echo $* >&5
}


function install_rpms()
{
    local pkg=$1

    local resultdir=$( get_resultdir $pkg )
    local buildlog=$( get_logfile $pkg )

    echo "$pkg: installing rpms."
    exec 5<&1 6<&2
    [ "$(ls $resultdir | wc -l)" = "0" ] && exit 0
    if [ -n "$DISPLAY" ]; then
        local to_install=( $(gui_confirm_install $resultdir) )
    else
        local to_install=( $(cli_confirm_install $resultdir) )
    fi
    to_install=$( check_to_install $pkg ${to_install[@]} )
    exec &>> $buildlog
    if [ -z "${to_install[*]}" ]; then
        log_and_echo "$pkg: no rpms to install."
        set_state $pkg 'OK'
        exit 1
    fi
    log_and_echo "$pkg: installing ${to_install[@]}."
    $SUDO yum -y install ${to_install[@]} && rm -rf $resultdir
    case $? in
        0) set_state $pkg 'OK'
           log_and_echo "$pkg: install completed, no errors"
           ;;
        *) set_state $pkg 'failed'
           log_and_echo "$pkg: installation errors (lpf buildlog shows log)"
           ;;
    esac
}


trap "do_trap 83" SIGINT ERR
install_rpms "$@"
