﻿class MojaData:
    """
    Klasa reprezentująca datę.
    Zawiera tradycyjny konstruktor oraz alternatywny konstruktor w postaci metody klasowej.
    """

    def __init__(self, dzien: int, miesiac: int, rok: int):
        """
        Standardowy konstruktor klasy.
        
        :param dzien: Dzień miesiąca
        :param miesiac: Numer miesiąca (1-12)
        :param rok: Rok
        """
        self.dzien = dzien
        self.miesiac = miesiac
        self.rok = rok

    @classmethod
    def z_stringa(cls, data_str: str):
        """
        Alternatywny konstruktor (fabryka) tworzący obiekt daty z ciągu znaków.
        
        :param cls: Klasa, na której wywołano metodę
        :param data_str: Data w formacie "DD-MM-YYYY"
        :return: Nowa instancja klasy MojaData
        """
        # Rozbijamy podany tekst na listę fragmentów używając myślnika jako separatora
        lista_fragmentow = data_str.split('-')
        
        # Przekształcamy fragmenty tekstowe na liczby całkowite i rozpakowujemy
        d, m, r = [int(x) for x in lista_fragmentow]
        
        # Zwracamy nową instancję klasy (wywołujemy standardowy konstruktor)
        return cls(d, m, r)

    def prezentuj(self):
        """
        Wyświetla datę w estetycznym, tekstowym formacie.
        Zamienia numeryczny miesiąc na jego polską nazwę.
        """
        # Słownik do mapowania numeru miesiąca na jego nazwę (w dopełniaczu)
        miesiace = {
            1: "stycznia", 2: "lutego", 3: "marca", 4: "kwietnia",
            5: "maja", 6: "czerwca", 7: "lipca", 8: "sierpnia",
            9: "września", 10: "października", 11: "listopada", 12: "grudnia"
        }
        
        # Pobieramy nazwę miesiąca (jeśli błędny numer, dajemy domyślny komunikat)
        nazwa_miesiaca = miesiace.get(self.miesiac, "(nieznany miesiąc)")
        
        # Wyświetlamy sformatowany komunikat
        print(f"Data: {self.dzien} {nazwa_miesiaca} {self.rok} roku")


# --- Sekcja testowa ---
if __name__ == "__main__":
    # Tworzymy datę za pomocą klasycznego konstruktora
    d1 = MojaData(1, 1, 2024)
    print("Tworzenie daty klasycznym konstruktorem:")
    d1.prezentuj()
    
    # Tworzymy datę wykorzystując metodę klasową (fabrykę) z podanego stringa
    print("\nTworzenie daty przy użyciu metody klasowej (fabryki):")
    d2 = MojaData.z_stringa("15-05-2026")
    d2.prezentuj()
