#!/bin/bash

PACKAGES_VERSION_CONF="/tmp/packages_version.conf"

declare -A PACKAGES_VERSION

# Загружаем конфигурацию пакетов
if [[ -f "$PACKAGES_VERSION_CONF" ]]; then
    while IFS='=' read -r pkg ver; do
        [[ -z "$pkg" || "$pkg" == \#* ]] && continue
        PACKAGES_VERSION[$pkg]=$ver
    done < "$PACKAGES_VERSION_CONF"
fi

install_all_packages_with_versions() {
    local packages_to_install=()

    for pkg in "$@"; do
        local version=${PACKAGES_VERSION[$pkg]}
        if [[ -n "$version" ]]; then
            if apt-cache policy "$pkg" | grep -F " $version " > /dev/null; then
                packages_to_install+=("${pkg}=${version}")
            else
                echo "Version $version for $pkg not found. Skipping."
            fi
        else
            packages_to_install+=("$pkg")
        fi
    done

    if [[ ${#packages_to_install[@]} -gt 0 ]]; then
        echo "Installing packages: ${packages_to_install[*]}"
        apt-get install -y --allow-downgrades "${packages_to_install[@]}"
    else
        echo "No valid packages to install."
    fi
}

apt-get update

# Обновление сервисов, которые являются необязательными к установке. Но при условии, что они уже установлены на машине клиента
packages_to_upgrade=(
    artixcs-accounting-bonuses
    artixcs-accounting-bonuses-certificates
    artixcs-accounting-certificates
    artixcs-accounting-coupons
    artixcs-accounting-scheduled-impacts
    artixcs-counter
    artixcs-datatransfer
    artixcs-consultant-app
    artixcs-accounting-event-notifier
    artixcs-online-card
    artixcs-online-shop
    artixcs-issuance-card
    artixcs-private-office
    artix-cs-db-trimmer
    artix-cs-zabbix
    artix-nginx-config
    artixcs-config
    artixcs-puppet-objects
    artixcs-middle
    artixcs-central
)

packages_for_upgrade=()
for pkg in "${packages_to_upgrade[@]}"; do
    if dpkg -l | grep -E "^ii\s+$pkg\s" > /dev/null; then
        packages_for_upgrade+=("$pkg")
    else
        echo "$pkg is not installed. Skipping"
    fi
done

install_all_packages_with_versions ${packages_for_upgrade[@]}


# Обновлять версию postgresql можно только 4.0.v->4.0.v+,4.1.v->4.1.v+
if dpkg -l | grep -q "^ii.*artix-postgresql-config"; then
	current_version=$(dpkg -l | grep artix-postgresql-config | awk '{print $3}')
	major_version=$(echo $current_version | cut -d'.' -f2)
	
	actual_version=$(apt-cache policy artix-postgresql-config | grep -v "Installed" | grep -v "Candidate" | grep -oP "4.$major_version.[^ ]*" | head -n 1)
	apt-get install artix-postgresql-config=$actual_version
fi
