#!/bin/sh
for file in /etc/logrotate.d/*; do
    [ -f "$file" ] || continue

    # read all log paths before and including the opening {
    paths=$(awk '/\{/{print; exit} {print}' "$file" | tr ' ' '\n' | grep '^/var/log/' | sed 's/\*$//' | sed 's/\.[^.]*$//' | sort -u | tr '\n' ' ' | tr -s ' ' | sed 's/^ //;s/ $//')
    [ -z "$paths" ] && continue

    # build wildcard basenames and new paths
    wildcards=""
    for path in $paths; do
        base=$(basename "$path")
        wildcards="$wildcards $base*"
    done
    wildcards="${wildcards# }"

    # build prerotate block
    forloop="    prerotate\n        for log in $wildcards; do\n            /etc/logrotate.script/helper \"\$log\"\n        done\n    endscript"

    # rewrite file: replace all lines before { with wildcard paths on one line,
    # replace existing prerotate...endscript or inject before postrotate/}
    tmp=$(mktemp)
    awk -v wildcards="$wildcards" -v forloop="$forloop" '
        !header_done {
            if (/\{/) {
                n = split(wildcards, arr, " ")
                line = ""
                for (i=1; i<=n; i++) line = line "/var/log/" arr[i] " "
                sub(/ $/, "", line)
                print line " {"
                header_done = 1
            }
            next
        }
        /^[[:space:]]*prerotate/ { skip=1; next }
        skip && /^[[:space:]]*endscript/ { skip=0; next }
        skip { next }
        /^[[:space:]]*postrotate/ && !done { print forloop; done=1 }
        /^}$/ && !done { print forloop; done=1 }
        { print }
    ' "$file" > "$tmp" && mv "$tmp" "$file"

    echo "updated: $file"
done

# remove .log extension from all paths in /etc/rsyslog.conf
[ -f /etc/rsyslog.conf ] && grep -q '\.log' /etc/rsyslog.conf && \
    sed -i 's|/var/log/\([^ ]*\)\.log|/var/log/\1|g' /etc/rsyslog.conf && \
    echo "updated: /etc/rsyslog.conf"; true
