'''Module qui permet de dessiner des immeubles
Il utilise le module formes.

Fonctions d'interface du module
-------------------------------

Remarque : il existe quelques couleurs prédéfnies en français qui sont :
    'violette', 'bleue, 'rouge', 'verte', 'jaune', 'marron', 'noir' ...

+ nouvel_immeuble() -> dict : renvoie un dictionnaire contenant les données d'un nouvel immeuble à définir
+ determiner_immeuble(numero:int) -> dict  : renvoie un dictionnaire contenant les caractéristiques aléaloires d'un immeuble

+ dessiner_immeuble(immeuble:dict)  : dessine l'immeuble dont on transmet les données
+ dessiner_rue()                    : dessine une rue de 4 immeubles aléatoires

+ definir_numero_immeuble(numero:int, immeuble:dict) : insére le numéro de l'immeuble dans les données de l'immeuble
+ definir_nb_etages(nb_etages:int, immeuble:dict)    : insère le nombre d'étages de l'immeuble
+ definir_couleur_facade(couleur:str, immeuble:dict) : insère la couleur de la facade
+ definir_position_porte(position:str, immeuble:dict): à choisir parmi 'gauche', 'milieu' ou 'droite'
+ definir_couleur_porte(couleur:str, immeuble:dict)  : insère la couleur de la porte de l'immeuble
+ definir_type_toit(type_toit:str, immeuble:dict)    : à choisir parmi 'plat', 'classique', 'bizarre'



Remarque : implémentation de l'immeuble
---------------------------------------

Pour éviter de passer son temps à courir après les clés, voici la liste des clés d'un immeuble :

--> clé 'numero' : numéro de l'immeuble (valeur associée de type int)
--> clé 'étages' : nombre d'étages de l'immeuble (valeur associée de type int)
--> clé 'couleur_facade' : couleur de la facade (valeur associée de type str)
--> clé 'position porte' : position de la porte (valeur associée de type int, 0 1 2)
--> clé 'couleur porte' : couleur de la porte (valeur associée de type str)
--> clé 'type toit' : type du toit (valeur associée de type int, 0 pour classique, 1 pour plat, 2 pour bizarre)
--> clé 'couleur toit' : couleur de la porte (valeur associée de type str)


'''
# Importation

from formes import triangle_equilateral, triangle_isocele, rectangle, cercle
from random import randint, choice

# Fonction gestion des données

def determiner_immeuble(numero:int) -> dict:
    caracteristiques = {}
    caracteristiques['couleur_facade'] = choice(['red','blue','yellow','purple','orange'])
    caracteristiques['numero'] = numero
    caracteristiques['étages'] = randint(1,5)
    caracteristiques['position_porte'] = choice(['gauche','milieu','droite'])
    caracteristiques['couleur_porte'] = choice(['brown','grey'])
    caracteristiques['type_toit'] = choice(['classique','plat','bizarre'])
    caracteristiques['couleur_toit'] = choice(['black','brown','yellow','purple'])
    return caracteristiques

#fonctions modifiant les caractéristiques d'un immeuble - utilisées dans la 3eme séquence

def definir_numero_immeuble(numero:int, immeuble:dict):
    immeuble['numero'] = numero
    return immeuble

def definir_nb_etages(nb_etages:int, immeuble:dict):
    immeuble['étages'] = nb_etages
    return immeuble
    
def definir_couleur_facade(couleur:str, immeuble:dict):
    immeuble['couleur_facade'] = couleur
    return immeuble

def definir_position_porte(position:str, immeuble:dict):
    immeuble['position_porte'] = position
    return immeuble

def definir_couleur_porte(couleur:str, immeuble:dict):
    immeuble['couleur_porte'] = couleur
    return immeuble

def definir_type_toit(type_toit:str, immeuble:dict):
    immeuble['type_toit'] = type_toit
    return immeuble

def definir_couleur_toit(couleur_toit:str, immeuble:dict):
    immeuble['couleur_toit'] = couleur_toit
    return immeuble

# Fonctions d'interface graphique

def dessiner_facade(informations:dict):
    facade = {}  # pour faire la "traduction" entre les clés de ce module et les clés du module formes
    facade['écriture'] = 'blue'
    facade['fond'] = informations['couleur_facade']
    facade['épaisseur'] = 3
    rectangle(140,80*informations['étages'] , facade, (-300+160*informations['numero'],0))

def dessiner_porte(informations:dict):
    pass

def dessiner_fenetres(informations:dict):
    pass

def dessiner_toit(informations:dict):
    pass
      
def dessiner_immeuble(informations:dict):
    dessiner_facade(informations)
    dessiner_porte(informations)
    dessiner_fenetres(informations)
    dessiner_toit(informations)

def dessiner_rue():
    for x in range(4):
        infos_immeuble = determiner_immeuble(x)
        dessiner_immeuble(infos_immeuble)

# Programme principal

if __name__ == '__main__':
    dessiner_rue()



    
