#!/usr/bin/env bash
# Lädt Medien und Vorschaubilder unseres Shops in den Object Storage.
# Läuft im Entwicklungssystem und redet direkt mit dem Speicher – die Dateien
# gehen nicht über die Frontends.
#
# Aufruf: medien-hochladen.sh <bucket> [--nur-pruefen]
#   Zugangsdaten über Umgebung: S3_KEY, S3_SECRET, S3_ENDPOINT
set -euo pipefail

BUCKET="${1:?Bucket fehlt}"
CHECK="${2:-}"
SHOP=/var/www/html/ShopwareDev
: "${S3_ENDPOINT:=https://nbg1.your-objectstorage.com}"
: "${S3_KEY:?S3_KEY fehlt}"
: "${S3_SECRET:?S3_SECRET fehlt}"

export AWS_ACCESS_KEY_ID="$S3_KEY" AWS_SECRET_ACCESS_KEY="$S3_SECRET" AWS_DEFAULT_REGION="${S3_REGION:-eu-central-1}"
AWS=(aws --endpoint-url "$S3_ENDPOINT")

log() { printf '\n\033[1m== %s\033[0m\n' "$*"; }

log "Ziel prüfen"
"${AWS[@]}" s3 ls "s3://$BUCKET" >/dev/null 2>&1 || { echo "Bucket $BUCKET nicht erreichbar"; exit 1; }
echo "  s3://$BUCKET erreichbar"

# Shopware erwartet die Dateien unter dem Präfix "public" (siehe storage.yaml:
# root: public), darunter media/… und thumbnail/… wie auf der Platte.
for teil in media thumbnail; do
    quelle="$SHOP/public/$teil"
    [ -d "$quelle" ] || { echo "  $quelle fehlt, übersprungen"; continue; }
    anzahl=$(find "$quelle" -type f | wc -l)
    groesse=$(du -sh "$quelle" | cut -f1)
    log "$teil: $anzahl Dateien, $groesse -> s3://$BUCKET/public/$teil/"
    if [ "$CHECK" = "--nur-pruefen" ]; then
        "${AWS[@]}" s3 sync "$quelle" "s3://$BUCKET/public/$teil/" --dryrun --size-only | tail -5
    else
        "${AWS[@]}" s3 sync "$quelle" "s3://$BUCKET/public/$teil/" --size-only --no-progress \
            --cache-control "public, max-age=31536000"
    fi
done

log "Gegenprobe"
for teil in media thumbnail; do
    lokal=$(find "$SHOP/public/$teil" -type f 2>/dev/null | wc -l)
    fern=$("${AWS[@]}" s3 ls --recursive "s3://$BUCKET/public/$teil/" 2>/dev/null | wc -l)
    printf '  %-10s lokal %6d   im Speicher %6d\n' "$teil" "$lokal" "$fern"
done
