#!/bin/bash

# ============================================================
# Script : watchtower_run_once.sh
# Description : Watchtower en exécution unique avec logs + SMTP + COULEURS
# Auteur : Erreur32 (optimisé)
# ============================================================

# Force terminal colors
export TERM=xterm-256color

# ========== COULEURS ANSI ==========
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m'  # No Color

# Helper functions pour logs colorés
log_both() {
    local COLOR="$1"
    local MSG="$2"
    # Terminal avec couleur
    echo -e "${COLOR}${MSG}${NC}"
    # Fichier sans couleur
    echo -e "${MSG}" | sed 's/\x1b\[[0-9;]*m//g' >> "$LOG_FILE"
}

log_divider() {
    echo -e "${CYAN}${BOLD}────────────────────────────────────────────${NC}" | tee -a "$LOG_FILE"
}

# --------VARIABLES CONFIG--------
SMTP_USER="myoueb"
SMTP_DOMAIN="echosystem.fr"
SMTP_PASS="vIVC2ouz36SwgWfWSoAO32"
SMTP_SERVER="ssl0.ovh.net"
SMTP_PORT="587"
SMTP_FROM="${SMTP_USER}@${SMTP_DOMAIN}"
SMTP_TO="${SMTP_USER}@${SMTP_DOMAIN}"
SMTP_STARTTLS="yes"

WATCHTOWER_HOSTNAME="watchtower.MYOUEB.local"

LOG_PATH="/home/docker/watchtower/log"
DOCKER_IMAGE="nickfedor/watchtower:latest"
API_VERSION="1.44"

mkdir -p "$LOG_PATH"

# --------FONCTION PRINCIPALE--------
function watchtower_cron() {

    # Fichier de log horodaté
    LOG_FILE="${LOG_PATH}/cron-$(date '+%Y-%m-%d-%Hh%M').txt"

    # Header coloré
    log_both "${BOLD}${CYAN}" "╔════════════════════════════════════════════╗"
    log_both "${BOLD}${CYAN}" "║  Watchtower Run Once                       ║"
    log_both "${BOLD}${CYAN}" "╚════════════════════════════════════════════╝"

    log_both "" "Date : $(date)"
    log_both "${CYAN}" "Log : $LOG_FILE"
    log_divider

    # Mise à jour de l'image
    echo "[*] Pulling latest Watchtower image..." | tee -a "$LOG_FILE"
    docker pull "$DOCKER_IMAGE" >/dev/null 2>&1
    echo "✅ Done" | tee -a "$LOG_FILE"
    log_divider

    log_both "${BLUE}" "[*] Running Watchtower scan..."
    echo "  (Using --label-enable to respect labels)" | tee -a "$LOG_FILE"
    echo "  (Containers with label com.centurylinklabs.watchtower.enable=false will be excluded)" | tee -a "$LOG_FILE"

    # Exécution Watchtower avec --label-enable
    docker run --rm \
      -v /var/run/docker.sock:/var/run/docker.sock \
      --hostname "${WATCHTOWER_HOSTNAME}" \
      "$DOCKER_IMAGE" \
      --api-version="$API_VERSION" \
      --run-once \
      --label-enable \
      --notification-url="smtp://${SMTP_USER}%40${SMTP_DOMAIN}:${SMTP_PASS}@${SMTP_SERVER}:${SMTP_PORT}/?from=${SMTP_FROM}&to=${SMTP_TO}&starttls=${SMTP_STARTTLS}" \
      --notifications-level=debug \
      2>&1 | tee -a "$LOG_FILE"

    log_divider

    # Analyse des résultats
    RESULT=$(grep -Eo "Failed=[0-9]+|Scanned=[0-9]+|Updated=[0-9]+" "$LOG_FILE")
    FAILED=$(echo "$RESULT" | grep "Failed=" | cut -d= -f2)
    SCANNED=$(echo "$RESULT" | grep "Scanned=" | cut -d= -f2)
    UPDATED=$(echo "$RESULT" | grep "Updated=" | cut -d= -f2)

    # Sécurisation valeurs vides
    FAILED=${FAILED:-0}
    SCANNED=${SCANNED:-0}
    UPDATED=${UPDATED:-0}

    # Affichage résumé coloré
    log_both "${BOLD}${CYAN}" "RÉSUMÉ"
    log_both "${WHITE}" "  Scannés    : ${BOLD}$SCANNED${NC}${WHITE}"

    if [[ "$UPDATED" -gt 0 ]]; then
        log_both "${BOLD}${GREEN}" "  ✅ Mis à jour : ${BOLD}$UPDATED${NC}${GREEN}"
        STATUS="SUCCESS"
    else
        log_both "${YELLOW}" "  ℹ️  Mis à jour : ${BOLD}$UPDATED${NC}${YELLOW}"
        STATUS="NO_UPDATES"
    fi

    if [[ "$FAILED" -eq 0 ]]; then
        log_both "${GREEN}" "  ❌ Échoués    : ${BOLD}0${NC}${GREEN}"
    else
        log_both "${RED}" "  ❌ Échoués    : ${BOLD}$FAILED${NC}${RED}"
        STATUS="ERROR"
    fi

    log_divider

    # Nettoyage : uniquement si mise à jour
    if [[ "$UPDATED" -gt 0 ]]; then
        echo "[*] Cleaning up unused images..." | tee -a "$LOG_FILE"
        docker image prune -af >/dev/null 2>&1
        docker volume prune -f >/dev/null 2>&1
        log_both "${GREEN}" "✅ Cleanup done"
        echo "Nettoyage effectué (car mises à jour détectées)." >> "$LOG_FILE"
    else
        log_both "${YELLOW}" "⊘ No cleanup (no updates)"
        echo "Pas de nettoyage (aucune mise à jour)." >> "$LOG_FILE"
    fi

    log_divider
    log_both "${BOLD}${GREEN}" "✨ Status final : $STATUS"
    echo "---------------------------" >> "$LOG_FILE"
    echo "Status final : $STATUS" >> "$LOG_FILE"
    echo "Fin à : $(date)" >> "$LOG_FILE"
    log_both "${CYAN}" "Log saved --> $LOG_FILE"
}

watchtower_cron