#!/usr/bin/env python3
"""
Zadanie 8: Parser logow systemowych
Program analizuje pliki logow i wykrywa niepokojace zdarzenia.
"""

import sys
import re


SLOWA_KLUCZOWE = ['ERROR', 'WARNING', 'CRITICAL', 'FAILED']


def analizuj_logi(nazwa_pliku, poziom=None):
    """Analizuje plik logow i zwraca statystyki."""
    try:
        with open(nazwa_pliku, 'r', encoding='utf-8') as f:
            linie = f.readlines()
    except FileNotFoundError:
        print(f"Blad: Plik '{nazwa_pliku}' nie istnieje.")
        return None
    except IOError as e:
        print(f"Blad: Problem z odczytem pliku: {e}")
        return None
    
    if not linie:
        print("Blad: Plik jest pusty.")
        return None
    
    licznik = {slowo: 0 for slowo in SLOWA_KLUCZOWE}
    zdarzenia = []
    
    for i, linia in enumerate(linie, 1):
        linia = linia.strip()
        for slowo in SLOWA_KLUCZOWE:
            if slowo in linia.upper():
                licznik[slowo] += 1
                if poziom is None or slowo == poziom.upper():
                    zdarzenia.append({
                        'linia': i,
                        'slowo': slowo,
                        'tekst': linia[:100]
                    })
    
    return {
        'linie': linie,
        'licznik': licznik,
        'zdarzenia': zdarzenia
    }


def pokaz_kontekst(linie, indeks, linie_przed=3, linie_po=3):
    """Wyswietla kontekst wokul linii."""
    start = max(0, indeks - linie_przed)
    koniec = min(len(linie), indeks + linie_po + 1)
    
    output = []
    for i in range(start, koniec):
        prefix = ">>> " if i == indeks else "    "
        output.append(f"{prefix}{i+1}: {linie[i].strip()}")
    
    return output


def main():
    """Glowna funkcja programu."""
    if len(sys.argv) < 2:
        print("Uzycie: python 01_python_z08.py <nazwa_pliku> [poziom]")
        print("Przyklad: python 01_python_z08.py logi.txt")
        print("Przyklad: python 01_python_z08.py logi.txt ERROR")
        sys.exit(1)
    
    nazwa_pliku = sys.argv[1]
    poziom = sys.argv[2] if len(sys.argv) > 2 else None
    
    print("=" * 50)
    print("  PARSER LOGOW SYSTEMOWYCH")
    print("=" * 50)
    print(f"Plik: {nazwa_pliku}")
    if poziom:
        print(f"Filtrowanie: {poziom}")
    print("-" * 50)
    
    wynik = analizuj_logi(nazwa_pliku, poziom)
    
    if wynik is None:
        sys.exit(1)
    
    print("\nPODSUMOWANIE:")
    for slowo, liczba in wynik['licznik'].items():
        if liczba > 0:
            print(f"  {slowo}: {liczba}")
    
    print(f"\nZNALEZIONE ZDARZENIA ({len(wynik['zdarzenia'])}):")
    for zdarzenie in wynik['zdarzenia']:
        print(f"\nLinia {zdarzenie['linia']} - {zdarzenie['slowo']}:")
        print(f"  {zdarzenie['tekst']}")
        
        kontekst = pokaz_kontekst(wynik['linie'], zdarzenie['linia'] - 1)
        print("  Kontekst:")
        for linia in kontekst:
            print(f"    {linia}")


if __name__ == "__main__":
    main()