#!/usr/bin/env python3
"""
Zadanie 10: Automatyczny backup plikow
Program tworzy backup wybranych plikow z data w nazwie.
"""

import os
import sys
import shutil
from datetime import datetime


def utworz_backup(pliki, katalog_wyjsciowy='.'):
    """Tworzy archiwum backup z data w nazwie."""
    if not pliki:
        print("Blad: Lista plikow jest pusta.")
        return None
    
    data = datetime.now().strftime('%Y-%m-%d')
    nazwa_archiwum = f"backup_{data}"
    sciezka_archiwum = os.path.join(katalog_wyjsciowy, nazwa_archiwum)
    
    for plik in pliki:
        if not os.path.exists(plik):
            print(f"Ostrzezenie: '{plik}' nie istnieje, pomijam.")
            continue
        
        print(f"Dodaje: {plik}")
    
    try:
        shutil.make_archive(sciezka_archiwum, 'zip', katalog_wyjsciowy, pliki[0])
        pelna_nazwa = f"{sciezka_archiwum}.zip"
        
        if os.path.exists(pelna_nazwa):
            rozmiar = os.path.getsize(pelna_nazwa)
            print(f"\nUtworzono backup: {pelna_nazwa}")
            print(f"Rozmiar: {rozmiar} bajtow")
            return pelna_nazwa
        
    except Exception as e:
        print(f"Blad podczas tworzenia backupu: {e}")
        return None
    
    return None


def usun_stare_backupy(katalog, dni):
    """Usuwa backupy starsze niz N dni."""
    if dni <= 0:
        return
    
    teraz = datetime.now()
    usunieto = 0
    
    for plik in os.listdir(katalog):
        if not plik.startswith('backup_') or not plik.endswith('.zip'):
            continue
        
        sciezka = os.path.join(katalog, plik)
        try:
            mtime = datetime.fromtimestamp(os.path.getmtime(sciezka))
            roznica = (teraz - mtime).days
            
            if roznica > dni:
                os.remove(sciezka)
                print(f"Usunieto stary backup: {plik}")
                usunieto += 1
        except Exception as e:
            print(f"Blad podczas sprawdzania {plik}: {e}")
    
    if usunieto > 0:
        print(f"Usunieto {usunieto} starych backupow")


def main():
    """Glowna funkcja programu."""
    if len(sys.argv) < 2:
        print("Uzycie: python 01_python_z10.py <plik1> [plik2 ...] [-dni N]")
        print("Przyklad: python 01_python_z10.py dane.txt raport.pdf")
        print("Przyklad: python 01_python_z10.py folder -dni 30")
        sys.exit(1)
    
    pliki = []
    dni = 0
    
    for arg in sys.argv[1:]:
        if arg == '-dni':
            continue
        if sys.argv[sys.argv.index(arg)] == '-dni':
            try:
                dni = int(sys.argv[sys.argv.index(arg) + 1])
            except (ValueError, IndexError):
                pass
        else:
            pliki.append(arg)
    
    idx = sys.argv.index('-dni') if '-dni' in sys.argv else len(sys.argv)
    if '-dni' in sys.argv and idx + 1 < len(sys.argv):
        try:
            dni = int(sys.argv[idx + 1])
        except ValueError:
            pass
    
    print("=" * 50)
    print("  AUTOMATYCZNY BACKUP PLIKOW")
    print("=" * 50)
    print(f"Pliki do backupu: {pliki}")
    if dni > 0:
        print(f"Usune backupy starsze niz {dni} dni")
    print("-" * 50)
    
    if dni > 0:
        usun_stare_backupy('.', dni)
    
    wynik = utworz_backup(pliki)
    
    if wynik:
        print("\nBackup zakonczony pomyslnie!")
    else:
        print("\nBlad podczas tworzenia backupu.")
        sys.exit(1)


if __name__ == "__main__":
    main()