#!/usr/bin/env python3
"""
Zadanie 4: Walidator adresow e-mail
Program waliduje adresy e-mail i wykonuje operacje na liscie e-maili.
"""

import re
import sys


def waliduj_email(email):
    """Wal iduje adres e-mail."""
    wzorzec = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
    return re.match(wzorzec, email) is not None


def przetworz_emails(nazwa_wejscia):
    """Przetwarza liste e-maili z pliku."""
    try:
        with open(nazwa_wejscia, 'r', encoding='utf-8') as f:
            emaile = [linia.strip() for linia in f if linia.strip()]
    except FileNotFoundError:
        print(f"Blad: Plik '{nazwa_wejscia}' nie istnieje.")
        return None
    except IOError as e:
        print(f"Blad: Problem z odczytem pliku: {e}")
        return None
    
    if not emaile:
        print("Blad: Plik jest pusty.")
        return None
    
    oryginalne_emaile = set(emaile)
    liczba_duplikatow = len(emaile) - len(oryginalne_emaile)
    
    poprawne = []
    niepoprawne = []
    
    for email in oryginalne_emaile:
        if waliduj_email(email):
            poprawne.append(email)
        else:
            niepoprawne.append(email)
    
    return {
        'poprawne': sorted(poprawne),
        'niepoprawne': sorted(niepoprawne),
        'duplikaty': liczba_duplikatow
    }


def zapisz_liste(nazwa_pliku, lista):
    """Zapisuje liste do pliku."""
    with open(nazwa_pliku, 'w', encoding='utf-8') as f:
        for email in lista:
            f.write(email + '\n')


def main():
    """Glowna funkcja programu."""
    if len(sys.argv) < 2:
        print("Uzycie: python 01_python_z04.py <nazwa_pliku>")
        print("Przyklad: python 01_python_z04.py emaile.txt")
        sys.exit(1)
    
    nazwa_wejscia = sys.argv[1]
    
    print("=" * 50)
    print("  WALIDATOR ADRESOW E-MAIL")
    print("=" * 50)
    
    wynik = przetworz_emails(nazwa_wejscia)
    
    if wynik is None:
        sys.exit(1)
    
    zapisz_liste('poprawne.txt', wynik['poprawne'])
    zapisz_liste('niepoprawne.txt', wynik['niepoprawne'])
    
    print(f"\nWyniki:")
    print(f"  Wszystkich e-maili: {len(wynik['poprawne']) + len(wynik['niepoprawne'])}")
    print(f"  Poprawnych: {len(wynik['poprawne'])}")
    print(f"  Niepoprawnych: {len(wynik['niepoprawne'])}")
    print(f"  Duplikatow usunieto: {wynik['duplikaty']}")
    print(f"\nZapisano do: poprawne.txt, niepoprawne.txt")


if __name__ == "__main__":
    main()