# -*- coding: utf-8 -*-
"""

cette librairy contient un empactage de turtle pour simplifier sont utilisation 
dans Spyder le cadre de TD de l'ENSG

@author: Alexis
@date: 12/2025
"""

# import librairy
import turtle as t
import time


# class principale
class TurtleOnSpyder(t.Turtle):
    
    def __init__(self, *, speed=0):
        # Réinitialisation safe si le script est relancé dans Spyder
        if not hasattr(t.TurtleScreen, "_RUNNING") or not t.TurtleScreen._RUNNING:
            t.TurtleScreen._RUNNING = True

        # initialisation Turtle        
        super().__init__()  

        # Réglages initiaux
        self.speed(speed) #vitesse
        self.up() #aller a la position de base
        self.goto((-self.screen.window_width() // 2)+10,
                  (self.screen.window_height() // 2)-10)
        self.down()
        
        # Mettre la fenêtre au premier plan
        self.screen.getcanvas().winfo_toplevel().attributes("-topmost", True)

        # Intercepter la fermeture via la croix
        self.screen.getcanvas().winfo_toplevel().protocol("WM_DELETE_WINDOW", self._on_close)

    # Callback interne pour fermeture
    def _on_close(self):
        try:
            self.screen.bye()
        except Exception:
            pass

    def close_window(self, *, auto_close = True):
        """
        ! obligatoire en fin de code ! 
        gestion de la fermeture de la fenêtre :
        - True : fermeture automatique de la fenetre après 5 secondes
        - False : fermeture de la fenetre au clic
        """
        try:
            if auto_close:
                time.sleep(5)
                self.screen.bye()
            else:
                self.screen.exitonclick()
        except Exception:
            pass
    
    def update_trace(self, val:bool()):
        """
        controle l'affichage du tracer de la turtle
        - True : mise à jours de l'affichage
        - False : arret de la mise à jours de l'affichage
        """
        if val :
            t.tracer(1)
        else:
            t.tracer(0)