﻿class ITConverter:
    """
    Klasa narzędziowa (utility class) do konwersji jednostek pamięci.
    Zawiera wyłącznie metody statyczne. Nie jest przeznaczona do instancjonowania.
    """

    @staticmethod
    def to_gb(bajty: int) -> float:
        """
        Konwertuje bajty na gigabajty (GB).
        Zakłada, że 1 GB to 1024^3 bajtów.
        
        :param bajty: Rozmiar w bajtach
        :return: Rozmiar w GB zaokrąglony do 2 miejsc po przecinku lub błąd
        """
        if bajty < 0:
            return "Błąd danych"
            
        wynik = bajty / (1024 ** 3)
        return round(wynik, 2)

    @staticmethod
    def to_mb(bajty: int) -> float:
        """
        Konwertuje bajty na megabajty (MB).
        Zakłada, że 1 MB to 1024^2 bajtów.
        
        :param bajty: Rozmiar w bajtach
        :return: Rozmiar w MB zaokrąglony do 2 miejsc po przecinku lub błąd
        """
        if bajty < 0:
            return "Błąd danych"
            
        wynik = bajty / (1024 ** 2)
        return round(wynik, 2)

    @staticmethod
    def format_size(bajty: int) -> str:
        """
        Inteligentnie dobiera jednostkę do wielkości danych i formatuje wyjście.
        
        :param bajty: Rozmiar w bajtach
        :return: Sformatowany tekst z odpowiednią jednostką (GB, MB, KB, B) lub błąd
        """
        if bajty < 0:
            return "Błąd danych"
            
        # Sprawdzamy od największych jednostek
        if bajty >= (1024 ** 3):
            # GB
            wynik = round(bajty / (1024 ** 3), 2)
            return f"{wynik} GB"
        elif bajty >= (1024 ** 2):
            # MB
            wynik = round(bajty / (1024 ** 2), 2)
            return f"{wynik} MB"
        elif bajty >= 1024:
            # KB
            wynik = round(bajty / 1024, 2)
            return f"{wynik} KB"
        else:
            # Bajty - tu nie ma sensu zaokrąglać, bajty to liczby całkowite
            return f"{bajty} B"


# --- Sekcja testowa ---
if __name__ == "__main__":
    print("Test metod konwertujących do konkretnych jednostek:")
    # Konwersja 1048576 bajtów to dokładnie 1 MB
    print(f"1048576 bajtów to: {ITConverter.to_mb(1048576)} MB")
    
    # 5 miliardów bajtów na GB
    bajty_test = 5000000000
    print(f"{bajty_test} bajtów to: {ITConverter.to_gb(bajty_test)} GB")
    
    print("\nTest inteligentnego formatowania jednostek:")
    print(f"1500 bajtów = {ITConverter.format_size(1500)}")
    print(f"123456 bajtów = {ITConverter.format_size(123456)}")
    print(f"9876543210 bajtów = {ITConverter.format_size(9876543210)}")
    print(f"42 bajtów = {ITConverter.format_size(42)}")
    
    print("\nTest obsługi błędnych danych:")
    print(f"-500 bajtów = {ITConverter.format_size(-500)}")
    print(f"-1000 bajtów do GB = {ITConverter.to_gb(-1000)}")
