#!/usr/bin/env python3
# -*- coding: utf-8 -*-


# Code zur Weihnachtsaufgabe (Aufgabe 40, mit 10 Fehlern)

import numpy as np
import matplotlib.pyplot as plt

# speichern Sie toy_machine_figure.py im selben Ordner wie diese Datei
# diese Datei finden Sie ebenfalls auf der Website, sie enthält keine Fehler
from toy_machine_figure import * 

class Spielzeug_Maschine:
    def __init__(self, plot_gift, name, inpos = [0.351, 0.211, 0.277, 0.382], fill_ga='white',  state='off', *args, **kwargs):
        self.plot_giftig = plot_gift    # Funktion zum Plotten des Geschenks
        self.name = name                # Name des Kindes
        self.inset_pos = inpos          # inset_position der gift_area für plot_gift
        self.fill_ga = fill_gar_nichts  # Fülloption der gift_area (siehe add_inset_plot)
        self.state = state              # Zustand der Maschine ('on'/'off') bzgl. des Hebels (lever)
        self.args = args                # Ermöglicht die Übergabe einer variablen Anzahl von positional arguments; Typ: intern als Tupel
        self.kwargs = kwargs            # Ermöglicht die Übergabe einer variablen Anzahl von key-value pairs ; Typ: intern als dictionary

        # Setze den Hauptplot
        self.fig, self.ax = plt.subplots(figsize=(15, 12))    
        self.ax.set_xlim(0, 10)
        self.ax.set_ylim(0, 10)
        self.ax.axis("off")

        # Hinzufügen der äußeren Bestandteile der Maschine (aus toy_machine_figure)
        body(self.ax)
        tree(self.ax, -2.5, -1.1)
        tree(self.ax, -2.2, -6.1)
        tree(self.ax, -3.5, -4.6)
        tree(self.ax, 2.92,   -1)
        tree(self.ax,  2.1,   -5)
        mouth(self.ax)
        eyes(self.ax)
        tree(self.ax, 5, 8)

    def add_inset_plot(self):
        # Estellt ein Rechteck als Geschenkbereich (gift_area)
        gift_area = plt.Rectangle((3, 1.3), 3.4, 4.85, linewidth=2, facecolor=self.fill_ga, edgecolor="black")
        self.ax.add_patch(gift_area)

        # Innerhalb der gift_area wird ein Bereich erstellt, auf der der übergebene Plot eingebettet wird
        # Dazu die Erstellung einer neuen Achse mit der Position des entspr. Bereichs für den übergebenen Plot
        inset_ax = self.fig.add_axes(self.inset_pos, facecolor='white')
        inset_ax.axis('off')

        # Ausführung von plot_gift innerhalb des Subplots
        plot_gift(inset_ax, *self.args, **self.kwargs)
        return inset_ax

    def gift_to(self,self.name):
        # Grußnachricht mit eingefügtem Namen des Kindes im Stringformat
        massage = "Für das schlechte, dumme Kind {0}.\n Der Weihnachtsmann".format(self.name)
    
        # Erstellung einer neuen Achse unter dem Hauptplot für den Text
        text_ax = self.fig.add_axes([0.15, -0.01, 0.8, 0.1])  # Position: [x, y, Breite, Höhe]
        text_ax.axis('off')  # Achsen ausblenden

        # Plot des Textes (message) in einem gewählten Schriftstil, 
        text_ax.text(0, 0.5, message, fontname='Comic Sans MS', fontsize=18, color='darkred', weight='bold')

    # Fügt den übergebenen Plot in die gift_area ein, wenn state == 'on' und printet die Grußnachricht
    def __toy_maker__(self): 
        if self.state == 'on':
            lever(self.ax, 'on')
            plt.how() 
        else:
            leber(self.ax) # Ist state == 'off' (default), so wird der übergebene Plot nicht angezeigt
            
            
            

# Wenn mindestens zwei der Fehler gefunden wurden, liefert dieser Code zumindest schonmal die Spielzeugmaschine selbst
spielzeug = Spielzeug_Maschine(np.mean, 'test')
spielzeug.toy_maker()