# programme de pavage d'un rectangle par des carres
# inspiré de S.Tummarello


import tkinter as tk
XMARGIN = 100
YMARGIN = 20
PIXELS_PER_UNIT = 20

################################################
# Fonctions graphiques                         #
################################################

def affiche_rectangle(x:int, y:int, largeur:int, hauteur:int, couleur:str='yellow'):
    """
    x, y: coordonnées du coin superieur gauche
    largeur, hauteur: dimensions du rectangle
    couleur: couleur du remplissage 
    affiche un rectangle avec sa hauteur affichee au centre, dans une fenetre tkinter
    """
    x_pixels = XMARGIN + x * PIXELS_PER_UNIT
    y_pixels = YMARGIN + y * PIXELS_PER_UNIT
    w = largeur * PIXELS_PER_UNIT
    h = hauteur * PIXELS_PER_UNIT
    canvas.create_rectangle(
        x_pixels,
        y_pixels,
        x_pixels + w,
        y_pixels + h,
        fill=couleur,
        outline='black'
    )
    if largeur == hauteur:
        texte = f"{largeur}"
    else:
        texte = f"{largeur}x{hauteur}"
    canvas.create_text(
        x_pixels + w/2,
        y_pixels + h/2,
        text=texte,
        justify='center'
    )

def affiche_carre(x:int, y:int, cote:int, color:str='yellow'):
    """
    x, y: coordonnées du coin superieur gauche
    cote: côté du carré
    couleur: couleur du remplissage 
    affiche un carré avec sa dimension affichée au centre, dans une fenetre tkinter
    """
    # À ÉCRIRE ICI, en une seule ligne

def affiche():
    """
    remet a jour la fenetre en affichant le rectangle et les carres
    """
    largeur = int(spin_w.get())       # recupere la largeur dans la spinbox tkinter
    hauteur = int(spin_h.get())
    carres = calcule_liste_carres(largeur, hauteur)
    canvas.delete("all")
    for carre in carres :
        x, y, c = carre   # on recupere les 3 elements du carre (deconstruction du tuple)
        affiche_carre(x, y, c)


def calcule_liste_carres(largeur:int, hauteur:int):
    """
    largeur, hauteur: dimensions du rectangle
    renvoie la liste des carrés obtenus par algorithme glouton
        chaque carré aura la forme (x,y,c)
        x,y : position du coin supérieur gauche
        c: taille du carré
    exemple:
    >>> calcule_liste_carres(6,4)
    [(0,0,4), (4,0,2), (4,2,2)]
    """
    # À ÉCRIRE ICI




################################################
# Programme principal                          #
################################################

# création de la fenêtre
fenetre = tk.Tk()  # creation d'un objet de type fenetre tkinter

# label du curseur pour commander la largeur
lab_w = tk.Label(fenetre, text='LARGEUR', bg='white', fg='blue')
lab_w.pack()

# curseur pour commander la largeur
# remarque : la fonction de raffraichissement de l'affichage est
# appelée chaque fois que l'on change la position du bouton
spin_w = tk.Spinbox(from_=1, to=40, increment=1, command=affiche)
spin_w.pack()

# label du curseur pour commander la hauteur
lab_h = tk.Label(fenetre, text='HAUTEUR', bg='white', fg='blue')
lab_h.pack()

# curseur pour commander la hauteur
# remarque : la fonction de raffraichissement de l'affichage est
# appelée chaque fois que l'on change la position du bouton
spin_h = tk.Spinbox(from_=1, to=30, increment=1, command=affiche)
spin_h.pack()

# zone de dessin
canvas = tk.Canvas(fenetre, width=1000, height=700)
canvas.pack()

# boucle d'affichage de la fenêtre
fenetre.mainloop()
