#!/bin/bash


dry_run=$1

if [ "$(CreoleGet activer_proxy_client non)" = 'oui' ]
then
    export https_proxy="http://$(CreoleGet proxy_client_adresse):$(CreoleGet proxy_client_port)"
fi

declare -A images_status

function audit_images {
    images="$(podman images --format "{{.Repository}}:{{.Tag}}")"
    for image in $images ;do
        if [[ "$image" != "<none>:<none>" ]]; then
            local_epoch=$(date -d $(podman inspect $image | jq -r '.[0].Created') +%s)
            registry_epoch=$(date -d $(skopeo inspect docker://$image | jq -r '.Created') +%s)
            if [[ $local_epoch -lt $registry_epoch ]]; then
                images_status[$image]="older"
            elif [[ $local_epoch -gt $registry_epoch ]]; then
                images_status[$image]="newer"
            else
                images_status[$image]="up-to-date"
            fi
        fi
    done

}

function list_images_to_upgrade {
    for image in ${!images_status[@]}; do
        if [[ ${images_status[$image]} = "older" ]]; then
            echo $image
        fi
    done
}

function list_images_to_downgrade {
    for image in ${!images_status[@]}; do
        if [[ ${images_status[$image]} = "newer" ]]; then
            echo $image
        fi
    done
}

function list_images_up_to_date {
    for image in ${!images_status[@]}; do
        if [[ ${images_status[$image]} = "up_to_date" ]]; then
            echo $image
        fi
    done
}

function update_status {
    step=$1
    if [[ "$step" = "post" ]]; then
        comment=" après tentative de mise à jour"
    else
        comment=""
    fi
    audit_images
    images_to_upgrade="$(list_images_to_upgrade)"
    images_to_downgrade="$(list_images_to_downgrade)"
    if [[ -z "$images_to_upgrade" ]] && [[ -z "$images_to_downgrade" ]]; then
        echo "Toutes les images sont à jour"
        echo
    else
        if [[ -n "$images_to_upgrade" ]]; then
            echo "Images à mettre à jour$comment"
            echo ${images_to_upgrade}
            echo
        fi
        if [[ -n "$images_to_downgrade" ]]; then
            echo "Images locales plus récentes$comment"
            echo ${images_to_downgrade}
            echo
        fi

    fi
}

echo
echo "Gestion des images de conteneur"
echo
update_status pre

images_to_upgrade="$(list_images_to_upgrade)"
if [[ "$dry_run" != "dry-run" ]] && [[ -n "$images_to_upgrade" ]]; then
    for image in $images_to_upgrade; do
        echo "Téléchargement de la dernière version de l’image $image"
        echo
        podman pull $image
        echo
    done
    update_status post
fi

exit 0
