﻿class Klient:
    """
    Klasa reprezentująca klienta banku.
    Zawiera metodę statyczną do walidacji numeru PESEL przed jego przypisaniem.
    """

    def __init__(self, imie: str, pesel: str):
        """
        Konstruktor klasy.
        Wykorzystuje statyczny walidator do sprawdzenia poprawności PESELu przed przypisaniem.
        
        :param imie: Imię klienta
        :param pesel: Numer PESEL w postaci tekstu
        """
        self.imie = imie
        
        # Wywołujemy walidator jako metodę klasy Klient.
        # Ponieważ jest to @staticmethod, nie odwołujemy się do instancji, 
        # a po prostu wywołujemy ją przez nazwę klasy.
        if Klient.czy_poprawny_pesel(pesel):
            self.pesel = pesel
            print(f"Pomyślnie utworzono klienta {self.imie} z PESELem {self.pesel}.")
        else:
            self.pesel = None
            print("Błąd: Niepoprawny numer PESEL!")

    @staticmethod
    def czy_poprawny_pesel(pesel: str) -> bool:
        """
        Metoda statyczna weryfikująca poprawność formatu numeru PESEL.
        Nie przyjmuje 'self' ani 'cls', zachowuje się jak zwykła funkcja,
        ale jest powiązana logicznie z klasą Klient.
        
        :param pesel: Oczekiwany 11-cyfrowy ciąg znaków
        :return: True, jeśli PESEL jest poprawny, w przeciwnym razie False
        """
        # Sprawdzamy czy długość wynosi dokładnie 11 znaków
        if len(pesel) != 11:
            return False
            
        # Sprawdzamy czy wszystkie znaki są cyframi
        if not pesel.isdigit():
            return False
            
        return True


# --- Sekcja testowa ---
if __name__ == "__main__":
    print("Test metody statycznej niezależnie od obiektów:")
    # Możemy wywołać walidator nie tworząc w ogóle obiektu klienta:
    print(f"Czy '12345678901' to poprawny PESEL? {Klient.czy_poprawny_pesel('12345678901')}")
    print(f"Czy '123' to poprawny PESEL? {Klient.czy_poprawny_pesel('123')}")
    
    print("\nTworzenie klientów:")
    # Test z poprawnym PESELem
    print("Próba z poprawnym PESELem:")
    k1 = Klient("Jan", "12345678901")
    
    # Test z błędnym PESELem
    print("\nPróba z błędnym PESELem:")
    k2 = Klient("Anna", "123")
