#!/bin/sh
#
# Copyright (C) 2012, 2014, 2016-2017  Etersoft
# Copyright (C) 2012, 2014, 2016-2017  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/>.
#

# copied from korinf/tools/run-script/scripts/update

load_helper epm-sh-warmup
load_helper epm-check_updated_repo

# TODO: restore mirroring
get_latest_version()
{
    URL="https://eepm.ru/app-versions"
    #update_url_if_need_mirrored
    epm tool eget -q -O- "$URL/$1"
}

__check_for_epm_version()
{
    # skip update checking for eepm from repo (ALT bug #44314)
    [ "$BASEDISTRNAME" = "alt" ] &&  [ "$DISTRVERSION" != "Sisyphus" ] && epm status --original eepm && return

    local latest="$(get_latest_version eepm)"
    #[ -z "$latest" ] && return
    local res="$(epm print compare "$EPMVERSION" "$latest")"
    [ "$res" = "-1" ] && info "Latest EPM version in Korinf repository is $latest. You have version $EPMVERSION running." && info "You can update eepm with \$ epm ei command."
}

__save_available_packages()
{
    [ -d "$epm_vardir" ] || return 0

    info "Retrieve all available packages (for autocompletion) ..."
    load_helper epm-list_available
    short=--short epm_list_available | sort | sudorun tee $epm_vardir/available-packages >/dev/null
}


epm_update()
{
    [ -z "$*" ] || fatal "No arguments are allowed here"
    info "Running command for update remote package repository database"

local ret=0
warmup_hibase

case $PMTYPE in
    apt-rpm)
        # TODO: hack against cd to cwd in apt-get on ALT
        cd /
        sudocmd apt-get update
        ret="$?"
        cd - >/dev/null
        [ "$ret" = "0" ] || return
        __check_for_epm_version
        #sudocmd apt-get -f install || exit
        ;;
    apt-dpkg)
        sudocmd apt-get update || return
        #sudocmd apt-get -f install || exit
        #sudocmd apt-get autoremove
        ;;
    packagekit)
        docmd pkcon refresh
        ;;
    #snappy)
    #    sudocmd snappy
    #    ;;
    aptitude-dpkg)
        sudocmd aptitude update || return
        ;;
    yum-rpm)
        # just skipped
        [ -z "$verbose" ] || info "update command is stubbed for yum"
        ;;
    dnf-rpm)
        # just skipped
        [ -z "$verbose" ] || info "update command is stubbed for dnf"
        ;;
    urpm-rpm)
        sudocmd urpmi.update -a
        ;;
    pacman)
        sudocmd pacman -S -y
        ;;
    aura)
        sudocmd aura -A -y
        ;;
    zypper-rpm)
        sudocmd zypper $(subst_option non_interactive --non-interactive) refresh
        ;;
    emerge)
        sudocmd emerge --sync
        ;;
    slackpkg)
        sudocmd /usr/sbin/slackpkg -batch=on update
        ;;
    deepsolver-rpm)
        sudocmd ds-update
        ;;
    npackd)
        sudocmd packdcl detect # get packages from MSI database
        ;;
    homebrew)
        docmd brew update
        ;;
    opkg)
        sudocmd opkg update
        ;;
    eopkg)
        sudocmd eopkg update-repo
        ;;
    apk)
        sudocmd apk update
        ;;
    nix)
        sudocmd nix-channel --update
        ;;
    pkgsrc)
        # portsnap extract for the first time?
        sudocmd portsnap fetch update
        ;;
    aptcyg)
        sudocmd apt-cyg update
        ;;
    xbps)
        sudocmd xbps-install -S
        ;;
    winget)
        sudocmd winget source update
        ;;
    *)
        fatal "Have no suitable update command for $PMTYPE"
        ;;
esac

__epm_touch_pkg

__save_available_packages
return 0

}