# EN: Class representing a 3D part to be printed.
# DE: Klasse, die ein zu druckendes 3D-Teil darstellt.
class Teil:
    """
    EN: Represents a physical part to be printed, with its dimensions, color, and volume.
    DE: Repräsentiert ein physisches Teil, das gedruckt werden soll, mit seinen Abmessungen, seiner Farbe und seinem Volumen.
    """
    def __init__(self, name: str, hoehe: float, laenge: float, breite: float, farbe: str, volumen: float):
        """
        EN: Initializes a new Part object.
        DE: Initialisiert ein neues Teil-Objekt.
        """
        self.name = name      # EN: Name of the part / DE: Name des Teils
        self.hoehe = hoehe    # EN: Height of the part in cm / DE: Höhe des Teils in cm
        self.laenge = laenge  # EN: Length of the part in cm / DE: Länge des Teils in cm
        self.breite = breite  # EN: Width of the part in cm / DE: Breite des Teils in cm
        self.farbe = farbe    # EN: Desired color of the part / DE: Gewünschte Farbe des Teils
        self.volumen = volumen # EN: Volume of the part in cm³ / DE: Volumen des Teils in cm³

    def __str__(self) -> str:
        """
        EN: Returns a user-friendly summary of the part with its dimensions and volume.
        DE: Gibt eine benutzerfreundliche Zusammenfassung des Teils mit seinen Abmessungen und seinem Volumen zurück.
        """
        return (f"{self.name} (Abmessungen: {self.laenge}x{self.breite}x{self.hoehe} cm, "
                f"Farbe: {self.farbe}, Volumen: {self.volumen:.2f} cm³)")

    def __repr__(self) -> str:
        """
        EN: Returns an unambiguous string representation of the object, useful for debugging.
        DE: Gibt eine eindeutige Zeichenkettendarstellung des Objekts zurück, nützlich für das Debugging.
        """
        return (f"Teil(name={self.name!r}, hoehe={self.hoehe!r}, laenge={self.laenge!r}, "
                f"breite={self.breite!r}, farbe={self.farbe!r}, volumen={self.volumen!r})")