#!/bin/bash

PLIK_LOGOW="${1:-/tmp/app.log}"

if [[ ! -f "$PLIK_LOGOW" ]]; then
    echo "Plik logów nie istnieje. Tworzę przykładowy plik..."
    mkdir -p "$(dirname "$PLIK_LOGOW")"
    cat > "$PLIK_LOGOW" << 'EOF'
[2024-01-15 14:23:45] ERROR DatabaseConnection: Failed to connect to database
[2024-01-15 14:24:12] ERROR DatabaseConnection: Failed to connect to database
[2024-01-15 14:25:30] WARNING DiskSpace: Low disk space on /dev/sda1
[2024-01-15 14:26:45] ERROR NetworkTimeout: Connection to remote server timed out
[2024-01-15 14:27:10] ERROR NetworkTimeout: Connection to remote server timed out
[2024-01-15 14:28:22] ERROR NetworkTimeout: Connection to remote server timed out
[2024-01-15 14:30:00] WARNING MemoryUsage: High memory usage detected
[2024-01-15 14:31:15] ERROR FileAccess: Permission denied for /var/log
[2024-01-15 14:32:30] ERROR FileAccess: Permission denied for /var/log
[2024-01-15 14:33:45] ERROR FileAccess: Permission denied for /var/log
[2024-01-15 14:34:50] WARNING DiskSpace: Low disk space on /dev/sda1
[2024-01-15 14:35:55] INFO SystemStart: System started successfully
[2024-01-15 14:36:10] ERROR DatabaseConnection: Failed to connect to database
[2024-01-15 14:37:20] ERROR DatabaseConnection: Failed to connect to database
[2024-01-15 14:38:30] ERROR DatabaseConnection: Failed to connect to database
[2024-01-15 14:39:40] ERROR DatabaseConnection: Failed to connect to database
EOF
fi

declare -A ZLICZANIE_BLEDOW
declare -A PIERWSZY_BLED
declare -A OSTATNI_BLED

while IFS= read -r linia; do
    if [[ "$linia" == *ERROR* ]]; then
        typ_bledu=$(echo "$linia" | sed -n 's/.*ERROR \([^:]*\):.*/\1/p')
        
        if [[ -z "$typ_bledu" ]]; then
            typ_bledu="Nieznany"
        fi
        
        ZLICZANIE_BLEDOW["$typ_bledu"]=$((${ZLICZANIE_BLEDOW["$typ_bledu"]:-0} + 1))
        
        data=$(echo "$linia" | grep -oP '\[\K[0-9-]+ [0-9:]+(?=\])')
        
        if [[ -z "${PIERWSZY_BLED[$typ_bledu]}" ]]; then
            PIERWSZY_BLED["$typ_bledu"]="$data"
        fi
        OSTATNI_BLED["$typ_bledu"]="$data"
    fi
done < "$PLIK_LOGOW"

echo "=================================="
echo "  ANALIZA BŁĘDÓW Z LOGÓW"
echo "=================================="
echo "Plik: $PLIK_LOGOW"
echo ""

if [[ ${#ZLICZANIE_BLEDOW[@]} -eq 0 ]]; then
    echo "Nie znaleziono błędów w logach."
    exit 0
fi

echo "--- STATYSTYKI DLA TYPÓW BŁĘDÓW ---"
echo ""

for typ in "${!ZLICZANIE_BLEDOW[@]}"; do
    echo "Typ: $typ"
    echo "  Liczba wystąpień: ${ZLICZANIE_BLEDOW[$typ]}"
    echo "  Pierwszy błąd: ${PIERWSZY_BLED[$typ]}"
    echo "  Ostatni błąd: ${OSTATNI_BLED[$typ]}"
    echo ""
done

max_typ=""
max_licz=0
for typ in "${!ZLICZANIE_BLEDOW[@]}"; do
    if [[ ${ZLICZANIE_BLEDOW[$typ]} -gt $max_licz ]]; then
        max_licz=${ZLICZANIE_BLEDOW[$typ]}
        max_typ="$typ"
    fi
done

echo "=================================="
echo "NAJCZĘSTSZY BŁĄD: $max_typ"
echo "Liczba wystąpień: $max_licz"
echo "=================================="

total_errors=0
for count in "${ZLICZANIE_BLEDOW[@]}"; do
    total_errors=$((total_errors + count))
done

echo ""
echo "ŁĄCZNA LICZBA BŁĘDÓW: $total_errors"
echo "Unikalnych typów błędów: ${#ZLICZANIE_BLEDOW[@]}"
echo ""

exit 0