#!/usr/bin/env python3
"""
Zadanie 3: Analizator plikow tekstowych
Program analizuje plik tekstowy i generuje raport ze statystykami.
"""

import sys
from collections import Counter


def analizuj_plik(nazwa_pliku):
    """Analizuje plik tekstowy 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
    
    liczba_linii = len(linie)
    liczba_znakow = sum(len(linia) for linia in linie)
    
    wszystkie_slowa = []
    for linia in linie:
        slowa = linia.strip().split()
        wszystkie_slowa.extend(slowa)
    
    liczba_slow = len(wszystkie_slowa)
    
    licznik_slow = Counter(wszystkie_slowa)
    top_10 = licznik_slow.most_common(10)
    
    najdlugsza_linia = max(linie, key=len)
    indeks_najdlzszej = linie.index(najdlugsza_linia) + 1
    
    return {
        'liczba_linii': liczba_linii,
        'liczba_slow': liczba_slow,
        'liczba_znakow': liczba_znakow,
        'top_10': top_10,
        'najdlugsza_linia': najdlugsza_linia.strip(),
        'indeks_najdlzszej': indeks_najdlzszej
    }


def main():
    """Glowna funkcja programu."""
    if len(sys.argv) < 2:
        print("Uzycie: python 01_python_z03.py <nazwa_pliku>")
        print("Przyklad: python 01_python_z03.py test.txt")
        sys.exit(1)
    
    nazwa_pliku = sys.argv[1]
    
    print("=" * 50)
    print("  ANALIZATOR PLIKOW TEKSTOWYCH")
    print("=" * 50)
    
    wynik = analizuj_plik(nazwa_pliku)
    
    if wynik is None:
        sys.exit(1)
    
    print(f"\nPlik: {nazwa_pliku}")
    print("-" * 50)
    print(f"Liczba linii:      {wynik['liczba_linii']}")
    print(f"Liczba slow:      {wynik['liczba_slow']}")
    print(f"Liczba znakow:    {wynik['liczba_znakow']}")
    print(f"\nNajczestsze slowa (top 10):")
    for i, (slowo, liczba) in enumerate(wynik['top_10'], 1):
        print(f"  {i}. {slowo}: {liczba}")
    print(f"\nNajdluzsza linia (linia {wynik['indeks_najdlzszej']}):")
    print(f"  {wynik['najdlugsza_linia'][:80]}")


if __name__ == "__main__":
    main()