def initSelectionLevel(level):
    """
    Initialise les éléments d'interface du menu de sélection d'un niveau sauvegardé.
    """
    initSaveLevel(level)
    ui.setObject("playButton", {"x":render.WIDTH_WINDOW*0.37})
    ui.addButton(render.WIDTH_WINDOW*0.63, 7*render.HEIGHT_WINDOW/8, width=render.WIDTH_WINDOW/4, height=render.HEIGHT_WINDOW/7, text="Edit", outlineColor="white", textColor="white", action=evenement.setGameEvent, arguments=["edit"])
def initScores(scores):
    ui.addText(render.WIDTH_WINDOW/24, render.HEIGHT_WINDOW/20, text="Levels", textColor="white", textSize=32, textAnchor="nw")
    ui.addButton(render.WIDTH_WINDOW/4, 2*render.HEIGHT_WINDOW / 14, width=100, height=30, fill="white", stroke=5, polygonal=POLYGONS["up-arrow"], action=evenement.setGameEvent, arguments=["up"])
    ui.addButton(render.WIDTH_WINDOW/4, 13*render.HEIGHT_WINDOW / 14, width=100, height=30, fill="white", stroke=5, polygonal=POLYGONS["down-arrow"], action=evenement.setGameEvent, arguments=["down"])
    levels = [key for key in scores["s"]]
    for i in range(3):
        ui.addText(render.WIDTH_WINDOW/20, render.HEIGHT_WINDOW / 3.3 + (render.HEIGHT_WINDOW/7) * 1.30*i, ID="ltext"+str(i+1), text= levels[i] + " - "+ str(scores["s"][levels[i]][0]) + "\n\t"+scores["s"][levels[i]][1], textColor="white", textSize=18, textAnchor="sw")   
        ui.addPolygon(render.WIDTH_WINDOW/4, render.HEIGHT_WINDOW / 2.9 + (render.HEIGHT_WINDOW/7) * 1.30*i, width=render.WIDTH_WINDOW/2.4, height=render.HEIGHT_WINDOW/80, points=POLYGONS["separator-horizontal"], fill="white", ID='levelSeparator'+str(i))
    ui.addText(render.WIDTH_WINDOW/20, render.HEIGHT_WINDOW / 3.3 + (render.HEIGHT_WINDOW/7) * 1.30*3, ID="ltext"+str(3+1), text= levels[3%len(levels)] + " - "+ str(scores["s"][levels[3%len(levels)]][0]) + "\n\t"+scores["s"][levels[3%len(levels)]][1], textColor="white", textSize=18, textAnchor="sw")   

    ui.addPolygon(render.WIDTH_WINDOW/2, render.HEIGHT_WINDOW/2, width=render.WIDTH_WINDOW/100, height=0, points=POLYGONS["separator-vertical"], fill="white", ID='separator')
    animation.animate("separator", [0.4], [{"height":render.HEIGHT_WINDOW/1.1}])
    ui.addText(render.WIDTH_WINDOW/2 + render.WIDTH_WINDOW/24, render.HEIGHT_WINDOW/20, text="Unlimited Random", textColor="white", textSize=32, textAnchor="nw")
    for i in range(10):
        ui.addText(render.WIDTH_WINDOW/2 + render.WIDTH_WINDOW/24, render.HEIGHT_WINDOW/5.5+ (render.HEIGHT_WINDOW/16) * 1.3*i, ID="urtext"+str(i+1), text=str(i+1)+")  "+scores["r"][i][0]+" - "+scores["r"][i][1], textColor="white", textSize=18, textAnchor="nw")
def initEditorUI():
    """
    Initialise les éléments d'interface de l'éditeur de niveau.
    """
    RightXPos = render.WIDTH_WINDOW * 2 / 2.2
    
    # Buttons
    ui.addButton(RightXPos, render.HEIGHT_WINDOW / 16, action=evenement.setGameEvent, arguments=["reset"], outlineColor="white", text=language.get("resetButton"), textColor="white", layer=1)
    ui.addButton(RightXPos, render.HEIGHT_WINDOW, action=saveLevel, anchor="sc",outlineColor="white", text="Sauvegarder", textSize=15, textColor="white", layer=1, ID="saveButton")
    # Texts
    ui.addText(render.WIDTH_WINDOW*0.15, render.WIDTH_WINDOW*0.035, ID="timeLeftText", anchor="nw", textColor="green", text=language.get("editorTimeText"), textFont="Monospace")
    # textFields
    ui.addTextField(render.WIDTH_WINDOW*0.35, render.WIDTH_WINDOW*0.035, ID="timeLeftTextField", outlineColor="white", textColor="white")
    # Game canvas
    ui.addCanvas(0, render.HEIGHT_WINDOW/8, ID="editorCanvas", width=0, height=0, fill="green", anchor="nw")
    ui.addCanvas(RightXPos, render.HEIGHT_WINDOW/8, ID="blockCanvas", width=0, height=0, fill="red", anchor="n", cellSize=64, selected=[(0,0)])
def initPlayMenu():
    """
    Initialise les éléments d'interface du menu de sélection de mode de jeu.
    """
    ui.addButton(1.2*render.WIDTH_WINDOW / 4, render.HEIGHT_WINDOW * 1/3, width=render.WIDTH_WINDOW / 2.8, height=int(render.HEIGHT_WINDOW / 2),  polygonal=POLYGONS["octo"], text=language.get("levelSelectionButton"), textSize=40, textColor="white", outlineColor="white", action=evenement.setGameEvent, arguments=["selection"])
    ui.addButton(2.8*render.WIDTH_WINDOW / 4, render.HEIGHT_WINDOW * 1/3, width=render.WIDTH_WINDOW / 2.8, height=int(render.HEIGHT_WINDOW / 2),  polygonal=POLYGONS["octo"], text=language.get("randomButton"), textSize=40, textColor="white", outlineColor="white", action=evenement.setGameEvent, arguments=["play"])
    ui.addButton(render.WIDTH_WINDOW / 2, render.HEIGHT_WINDOW * 2.3/3, width=render.WIDTH_WINDOW / 2.6, height=int(render.HEIGHT_WINDOW / 5),  polygonal=POLYGONS["octo"], text=language.get("loadFromSaveButton"), textSize=28, textColor="white", outlineColor="white", action=evenement.setGameEvent, arguments=["save"])
def initGameUI():
    """
    Initialise les éléments d'interface d'une partie.
    """
    RightXPos = render.WIDTH_WINDOW * 2 / 2.2
    # Buttons
    ui.addButton(RightXPos, render.HEIGHT_WINDOW / 16, action=evenement.setGameEvent, arguments=["reset"], outlineColor="white", text=language.get("resetButton"), textColor="white", layer=1)
    ui.addButton(RightXPos, render.HEIGHT_WINDOW / 16 * 4, action=evenement.setGameEvent, arguments=["debug"], outlineColor="white", text=language.get("debugButton"), textColor="white", ID="debug", layer=1)
    ui.addButton(RightXPos, render.HEIGHT_WINDOW / 16 * 7, action=evenement.setGameEvent, arguments=["save"], outlineColor="white", text=language.get("saveButton"), textColor="white", textSize=18, layer=1)
    ui.addButton(RightXPos, render.HEIGHT_WINDOW - 1, action=logic.quitter, anchor="sc", outlineColor="white", text=language.get("quitButton"), textColor="white", layer=1)
    # Texts
    ui.addText(render.WIDTH_WINDOW*0.05, render.WIDTH_WINDOW*0.02, ID="timeLeftText", anchor="nw", textColor="green", textFont="Monospace")
    ui.addText(render.WIDTH_WINDOW*0.25, render.WIDTH_WINDOW*0.02, ID="diamondsText", anchor="nw", textColor="red", textFont="Monospace")
    ui.addText(render.WIDTH_WINDOW*0.45,  render.WIDTH_WINDOW*0.02, ID="scoreText", anchor='nw', textColor="purple", textFont="Monospace")
    # Game canvas
    ui.addCanvas(0, render.HEIGHT_WINDOW/8, ID="gameCanvas", width=0, height=0, anchor="nw", cellSize=32)
def initSaveLevel(level):
    """
    Initialise les éléments d'interface du menu de sélection d'une partie sauvegardée.
    """
    ui.addButton(render.WIDTH_WINDOW * 0.1, render.HEIGHT_WINDOW / 2, width=70, height=100, fill="white", stroke=5, polygonal=POLYGONS["left-arrow"], action=setLevelDirection, arguments=["left", "leftButton"], ID="leftButton")
    ui.addButton(render.WIDTH_WINDOW * 0.9, render.HEIGHT_WINDOW / 2, width=70, height=100, fill="white", stroke=5, polygonal=POLYGONS["right-arrow"], action=setLevelDirection, arguments=["right", "rightButton"], ID="rightButton")
    ui.addButton(render.WIDTH_WINDOW/2, 7*render.HEIGHT_WINDOW/8, width=render.WIDTH_WINDOW/4, height=render.HEIGHT_WINDOW/7, text=language.get("playSelectedButton"), outlineColor="white", textColor="white", action=evenement.setGameEvent, arguments=["play"], ID="playButton")
    
    animation.new("leftButton", [0.1, 0.1], [{"x":render.WIDTH_WINDOW * 0.05}, {"x":render.WIDTH_WINDOW * 0.1}])
    animation.new("rightButton", [0.1, 0.1], [{"x":render.WIDTH_WINDOW * 0.95}, {"x":render.WIDTH_WINDOW * 0.9}])

    ui.addText(render.WIDTH_WINDOW/2, render.HEIGHT_WINDOW/9, "levelName", render.WIDTH_WINDOW/2, render.HEIGHT_WINDOW/8, text=" ", textColor="white", textSize=28)
    ui.addText(3*render.WIDTH_WINDOW/4, render.HEIGHT_WINDOW/9, "levelSelected", render.WIDTH_WINDOW/2, render.HEIGHT_WINDOW/8, text=" ", textColor="white", textSize=28)
    
    ui.addCanvas(render.WIDTH_WINDOW/2, render.HEIGHT_WINDOW/2, "levelSelection", width=0, height=0, squaresMap=level, cellSize=24)
def initMenuUI():
    """
    Initialise les éléments d'interface du menu principal du jeu.
    """
    ui.setBackground("black")
    ui.addButton(render.WIDTH_WINDOW / 2, -render.HEIGHT_WINDOW/3, width=render.WIDTH_WINDOW / 3 / 1.4, height=int(render.HEIGHT_WINDOW / 3 / 1.4), polygonal=POLYGONS["octo"], text=language.get("playButton"), textSize=42, textColor="white", outlineColor="white", action=playButton, ID="playButton")
    ui.addButton(-render.WIDTH_WINDOW/4, render.HEIGHT_WINDOW *1.8/3, width=render.WIDTH_WINDOW / 4, height=int(render.HEIGHT_WINDOW / 4), polygonal=POLYGONS["octo"], text=language.get("scoreButton"), textSize=28, textColor="white", outlineColor="white", action=evenement.setGameEvent, arguments=["score"], ID="scoreButton")
    ui.addButton(render.WIDTH_WINDOW*5/4, render.HEIGHT_WINDOW *1.8/3, width=render.WIDTH_WINDOW / 4, height=int(render.HEIGHT_WINDOW / 4), polygonal=POLYGONS["octo"], text=language.get("editorButton"), textSize=28, textColor="white", outlineColor="white", action=evenement.setGameEvent, arguments=["editor"], ID="editorButton")
    ui.addButton(render.WIDTH_WINDOW / 2, render.HEIGHT_WINDOW*1.15, width=150, height=50, polygonal=POLYGONS["octo"], text=language.get("quitButton"), textSize=18, textColor="white", outlineColor="white", action=logic.quitter, ID="quitButton")
    # ui.addButton(render.WIDTH_WINDOW - 85, render.HEIGHT_WINDOW - 10, polygonal=POLYGONS["octo"], text=language.get("settingsButton"), textSize=18, textColor="white", outlineColor="white", anchor="sc")
    ui.addButton(render.WIDTH_WINDOW*0.05, render.HEIGHT_WINDOW*0.05, polygonal=POLYGONS["trapeze-up"], width=render.WIDTH_WINDOW*0.10  , text="FR", action=setLanguage, arguments=["fr", initMenuUI], outlineColor="white", textColor="white", ID="frButton")
    ui.addButton(render.WIDTH_WINDOW*0.05, render.HEIGHT_WINDOW*0.15, polygonal=POLYGONS["trapeze-down"], width=render.WIDTH_WINDOW*0.10 , text="EN", action=setLanguage, arguments=["en", initMenuUI], outlineColor="white", textColor="white", ID="enButton")
    ui.addTextField(render.WIDTH_WINDOW*0.90, render.HEIGHT_WINDOW/26, text=playerName, ID="tfPlayer",outlineColor="white", textColor="white" )
    # ui.addButton(render.WIDTH_WINDOW*0.1, render.HEIGHT_WINDOW*0.15, text=language.get("englishButton"), action=ui.setBackground, arguments=["green"], outlineColor="white", textColor="white")
    animation.animate("playButton", [0.5, 0.3], [{"y":render.HEIGHT_WINDOW *0.8/3}, {"width":render.WIDTH_WINDOW / 3, "height":int(render.HEIGHT_WINDOW / 3)}])
    animation.animate("scoreButton", [0.5], [{"x":render.WIDTH_WINDOW / 4}])
    animation.animate("editorButton", [0.5], [{"x": 3*render.WIDTH_WINDOW / 4}])
    animation.animate("quitButton", [0.5], [{"y": render.HEIGHT_WINDOW*0.85}])