#!/bin/sh
#
# Copyright (C) 2015, 2017, 2019, 2020  Etersoft
# Copyright (C) 2015, 2017, 2019, 2020  Vitaly Lipatov <lav@etersoft.ru>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#

# TODO
epm_vardir=/var/lib/eepm

__save_installed_app()
{
	[ -d "$epm_vardir" ] || return 0
	__check_installed_app "$1" && return 0
	echo "$1" | sudorun tee -a $epm_vardir/installed-app >/dev/null
}

__remove_installed_app()
{
	[ -d "$epm_vardir" ] || return 0
	local i
	for i in $* ; do
		sudorun sed -i "/^$i$/d" $epm_vardir/installed-app
	done
	return 0
}

__check_installed_app()
{
	[ -s $epm_vardir/installed-app ] || return 1
	grep -q -- "^$1\$" $epm_vardir/installed-app
}

__list_installed_app()
{
    cat $epm_vardir/installed-app 2>/dev/null
}


__epm_play_run()
{
    local script="$psdir/$1.sh"
    shift

    if [ ! -x "$script" ] ; then
        fatal "Can't find play script $script."
    fi

    # allow use EGET in the scripts
    __set_EGET
    # also we will have DISTRVENDOR there
    export PATH=$PROGDIR:$PATH

    #info "Running $($script --description 2>/dev/null) ..."
    docmd $script "$@"
}

epm_play()
{
# TODO: change to play.d
local psdir="$CONFIGDIR/prescription.d"

if [ "$1" = "-h" ] || [ "$1" = "--help" ] ; then
    cat <<EOF
Options:
    APP            - install APP
    --remove APP   - remove APP
    --list         - list all installed apps
    --list-all     - list all available apps
    --short        - print only names
EOF
    exit
fi

if [ "$1" = "--remove" ] ; then
    shift
    #__check_installed_app "$1" || warning "$1 is not installed"
    prescription="$1"
    shift
    __epm_play_run $prescription --remove "$@"
    __remove_installed_app "$prescription"
    exit
fi

if [ "$1" = "--list" ] || [ "$1" = "--installed" ] ; then
    shift
    local i
    if [ -n "$short" ] ; then
        for i in $(__list_installed_app) ; do
            echo "$i"
        done
        exit
    fi
    echo "Installed:"
    for i in $(__list_installed_app) ; do
        printf "  %-20s - %s\n" "$i" "$($psdir/$i.sh --description 2>/dev/null)"
    done
    exit
fi

[ "($DISTRVENDOR -a)" = "x86_64" ] && IGNOREi586='' || IGNOREi586=1

if [ "$1" = "--list-all" ] || [ -z "$*" ] ; then
    echo "Run with a name of a play script to run:"
    local i
    local desc
    if [ -n "$short" ] ; then
        for i in $psdir/*.sh ; do
            # print all
            #desc="$($i --description 2>/dev/null)"
            #[ -z "$desc" ] && continue
            local name=$(basename $i .sh)
            [ -n "$IGNOREi586" ] && rhas "$name" "^i586-" && continue
            echo "$name"
        done
        exit
    fi
    for i in $psdir/*.sh ; do
        desc="$($i --description 2>/dev/null)"
        [ -z "$desc" ] && continue
        local name=$(basename $i .sh)
        [ -n "$IGNOREi586" ] && rhas "$name" "^i586-" && continue
        printf "  %-20s - %s\n" "$name" "$desc"
    done
    echo
    echo "run epm play --list to list installed only or --remove to remove one"
    exit
fi

prescription="$1"
shift

#__check_installed_app "$prescription" && info "$$prescription is already installed (use --remove to remove)" && exit 1
__epm_play_run "$prescription" --run "$@" && __save_installed_app "$prescription" || fatal "There was some error during install the application."
}