
#!/usr/bin/env bash

# ==========================================================
# REDIM - Redimensionador de fotografías para galerías web
# Compatible con ImageMagick 6 y 7
# Idiomas: es, pt, de, ru, fr, it, hu, gl, en
# ==========================================================

ANCHO_MAXIMO=1024
ALTO_MAXIMO=1024
CALIDAD=85
CARPETA_SALIDA="redimensionadas"

# ----------------------------------------------------------
# DETECTAR IDIOMA DEL SISTEMA
# ----------------------------------------------------------

IDIOMA="${LC_ALL:-${LC_MESSAGES:-${LANG:-en}}}"
IDIOMA="${IDIOMA%%_*}"
IDIOMA="${IDIOMA%%.*}"
IDIOMA="${IDIOMA,,}"

case "$IDIOMA" in
    es|pt|de|ru|fr|it|hu|gl) ;;
    *) IDIOMA="en" ;;
esac

# ----------------------------------------------------------
# TRADUCCIONES
# ----------------------------------------------------------

case "$IDIOMA" in
    es)
        MSG_ERROR="Error: ImageMagick no está instalado."
        MSG_INSTALAR="Instálalo con: sudo apt install imagemagick"
        MSG_ENCONTRADAS="Fotografías encontradas"
        MSG_OK="OK"
        MSG_ERROR_ARCHIVO="ERROR"
        MSG_FINAL="Proceso terminado."
        MSG_GUARDADAS="Imágenes guardadas en"
        MSG_PROCESADAS="Fotografías procesadas"
        MSG_FALLIDAS="Fotografías con errores"
        ;;
    pt)
        MSG_ERROR="Erro: ImageMagick não está instalado."
        MSG_INSTALAR="Instale-o com: sudo apt install imagemagick"
        MSG_ENCONTRADAS="Fotografias encontradas"
        MSG_OK="OK"
        MSG_ERROR_ARCHIVO="ERRO"
        MSG_FINAL="Processo concluído."
        MSG_GUARDADAS="Imagens guardadas em"
        MSG_PROCESADAS="Fotografias processadas"
        MSG_FALLIDAS="Fotografias com erros"
        ;;
    de)
        MSG_ERROR="Fehler: ImageMagick ist nicht installiert."
        MSG_INSTALAR="Installation: sudo apt install imagemagick"
        MSG_ENCONTRADAS="Gefundene Fotos"
        MSG_OK="OK"
        MSG_ERROR_ARCHIVO="FEHLER"
        MSG_FINAL="Vorgang abgeschlossen."
        MSG_GUARDADAS="Bilder gespeichert in"
        MSG_PROCESADAS="Verarbeitete Fotos"
        MSG_FALLIDAS="Fotos mit Fehlern"
        ;;
    ru)
        MSG_ERROR="Ошибка: ImageMagick не установлен."
        MSG_INSTALAR="Установите: sudo apt install imagemagick"
        MSG_ENCONTRADAS="Найдено фотографий"
        MSG_OK="OK"
        MSG_ERROR_ARCHIVO="ОШИБКА"
        MSG_FINAL="Обработка завершена."
        MSG_GUARDADAS="Изображения сохранены в"
        MSG_PROCESADAS="Обработано фотографий"
        MSG_FALLIDAS="Фотографии с ошибками"
        ;;
    fr)
        MSG_ERROR="Erreur : ImageMagick n'est pas installé."
        MSG_INSTALAR="Installez-le avec : sudo apt install imagemagick"
        MSG_ENCONTRADAS="Photographies trouvées"
        MSG_OK="OK"
        MSG_ERROR_ARCHIVO="ERREUR"
        MSG_FINAL="Traitement terminé."
        MSG_GUARDADAS="Images enregistrées dans"
        MSG_PROCESADAS="Photographies traitées"
        MSG_FALLIDAS="Photographies en erreur"
        ;;
    it)
        MSG_ERROR="Errore: ImageMagick non è installato."
        MSG_INSTALAR="Installalo con: sudo apt install imagemagick"
        MSG_ENCONTRADAS="Fotografie trovate"
        MSG_OK="OK"
        MSG_ERROR_ARCHIVO="ERRORE"
        MSG_FINAL="Operazione completata."
        MSG_GUARDADAS="Immagini salvate in"
        MSG_PROCESADAS="Fotografie elaborate"
        MSG_FALLIDAS="Fotografie con errori"
        ;;
    hu)
        MSG_ERROR="Hiba: az ImageMagick nincs telepítve."
        MSG_INSTALAR="Telepítés: sudo apt install imagemagick"
        MSG_ENCONTRADAS="Talált fényképek"
        MSG_OK="OK"
        MSG_ERROR_ARCHIVO="HIBA"
        MSG_FINAL="A feldolgozás befejeződött."
        MSG_GUARDADAS="Képek mentve ide"
        MSG_PROCESADAS="Feldolgozott fényképek"
        MSG_FALLIDAS="Hibás fényképek"
        ;;
    gl)
        MSG_ERROR="Erro: ImageMagick non está instalado."
        MSG_INSTALAR="Instálao con: sudo apt install imagemagick"
        MSG_ENCONTRADAS="Fotografías atopadas"
        MSG_OK="OK"
        MSG_ERROR_ARCHIVO="ERRO"
        MSG_FINAL="Proceso rematado."
        MSG_GUARDADAS="Imaxes gardadas en"
        MSG_PROCESADAS="Fotografías procesadas"
        MSG_FALLIDAS="Fotografías con erros"
        ;;
    *)
        MSG_ERROR="Error: ImageMagick is not installed."
        MSG_INSTALAR="Install it with: sudo apt install imagemagick"
        MSG_ENCONTRADAS="Photographs found"
        MSG_OK="OK"
        MSG_ERROR_ARCHIVO="ERROR"
        MSG_FINAL="Process completed."
        MSG_GUARDADAS="Images saved in"
        MSG_PROCESADAS="Photographs processed"
        MSG_FALLIDAS="Photographs with errors"
        ;;
esac

# ----------------------------------------------------------
# DETECTAR IMAGEMAGICK 6 O 7
# ----------------------------------------------------------

if command -v magick >/dev/null 2>&1; then
    IMAGEMAGICK="magick"
elif command -v convert >/dev/null 2>&1; then
    IMAGEMAGICK="convert"
else
    echo "$MSG_ERROR"
    echo "$MSG_INSTALAR"
    exit 1
fi

# ----------------------------------------------------------
# CARPETAS
# ----------------------------------------------------------

CARPETA_ORIGEN="$(pwd)"
CARPETA_DESTINO="$CARPETA_ORIGEN/$CARPETA_SALIDA"

mkdir -p "$CARPETA_DESTINO" || exit 1

# ----------------------------------------------------------
# BUSCAR FOTOGRAFÍAS
# ----------------------------------------------------------

shopt -s nocaseglob nullglob

imagenes=(
    "$CARPETA_ORIGEN"/*.jpg
    "$CARPETA_ORIGEN"/*.jpeg
    "$CARPETA_ORIGEN"/*.png
    "$CARPETA_ORIGEN"/*.webp
    "$CARPETA_ORIGEN"/*.tif
    "$CARPETA_ORIGEN"/*.tiff
    "$CARPETA_ORIGEN"/*.bmp
)

TOTAL=${#imagenes[@]}
PROCESADAS=0
FALLIDAS=0

echo "$MSG_ENCONTRADAS: $TOTAL"
echo

if [ "$TOTAL" -eq 0 ]; then
    echo "$MSG_FINAL"
    echo "$MSG_GUARDADAS: $CARPETA_DESTINO"
    exit 0
fi

# ----------------------------------------------------------
# PROCESAR FOTOGRAFÍAS
# ----------------------------------------------------------

for archivo in "${imagenes[@]}"; do

    nombre=$(basename "${archivo%.*}")
    destino="$CARPETA_DESTINO/$nombre.jpg"

    if "$IMAGEMAGICK" -quiet "$archivo" \
        -auto-orient \
        -resize "${ANCHO_MAXIMO}x${ALTO_MAXIMO}>" \
        +profile exif \
        +profile xmp \
        +profile iptc \
        -quality "$CALIDAD" \
        -sampling-factor 4:2:0 \
        -interlace Plane \
        "$destino"; then

        echo "$MSG_OK: $(basename "$archivo")"
        ((PROCESADAS++))

    else
        echo "$MSG_ERROR_ARCHIVO: $(basename "$archivo")"
        ((FALLIDAS++))
    fi

done

# ----------------------------------------------------------
# RESUMEN FINAL
# ----------------------------------------------------------

echo
echo "$MSG_FINAL"
echo "$MSG_PROCESADAS: $PROCESADAS"
echo "$MSG_FALLIDAS: $FALLIDAS"
echo "$MSG_GUARDADAS: $CARPETA_DESTINO"

# Devolver código de error si alguna fotografía ha fallado
if [ "$FALLIDAS" -gt 0 ]; then
    exit 1
fi

exit 0
