# -encoding: utf8-

from images import im_initialise, im_ouvre, im_sauve, im_change_pixel
from images import im_couleur_pixel, im_hauteur, im_largeur, im_format
import math
import random

#
# Question 2
#
def rectangle(image, x0, y0, largeur, hauteur, couleur):
    """Dessine un rectangle dans l'image "image".
Les arguments "x0" et "y0" designent le point en haut à gauche du rectangle,
l'argument "largeur" sa largeur, l'argument "hauteur" sa hauteur et l'argument
"couleur" sa couleur.
Attention, si le rectangle ne tient pas dans "image", il ne faudra dessiner
qu'un bout du rectangle..."""
    print("  -> Question 2 : rectangle")

    print("À FAIRE...")


#
# Question 3
#
def mire (image, couleur, longueur, epaisseur):
    """Dessine une 'mire' (une croix horizontale) au milieu de l'image."""
    print("  -> Question 3 : mire")

    print("À FAIRE...")

#
# Question 4
#
def fond_degrade_simple(largeur, nom_fichier):
    """Crée une image rectangulaire en niveau de gris de taille "largeur" x 256.
Cette image contiendra un dégradé de gris (de blanc en haut à noir en
bas de l'image).
L'image sera sauvegardée dans le fichier "nom_fichier".pgm.
"""
    print("  -> Question 4 : dégradé simple")

    hauteur = 256
    ### image = im_initialise("PGM", largeur, hauteur)

    ### ...
    print("À FAIRE...")
    ### ...

    ### im_sauve(image, nom_fichier)

#
# Question 5
#
def fond_degrade(largeur, hauteur, nom_fichier):
    """Crée une image rectangulaire en niveau de gris de taille "largeur" x "hauteur".
Cette image contiendra un dégradé de gris (de blanc en haut à noir en
bas de l'image).
L'image sera sauvegardée dans le fichier "nom_fichier".pgm.
"""
    print("  -> Question 5 : dégradé complexe")

    ### image = im_initialise("PGM", largeur, hauteur)

    ### ...
    print("À FAIRE...")
    ### ...

    ### im_sauve(image, nom_fichier)

#
# question 6
#
def rectangle_degrade(image, x0, y0, largeur, hauteur, couleur_haut, couleur_bas):
    """Dessine un rectangle dans l'image "image" qui est forcément au format
"PPM" (couleurs RGB).
Les coordonnées du point haut/gauche du rectangle sont "x0" et "y0" ; et ses
dimensions sont "largeur" et "hauteur".
Le rectangle contient un dégradé de couleurs : de "couleur_haut" en haut du
rectangle, jusqu'à "couleur_bas" en bas du rectangle.
"""

    print("  -> Question 6 : rectangle dégradé")
    assert (im_format(image) == "PPM")

    ### l'image existe déjà : pas besoin de la créer et l'initialiser.

    ### ...
    print("À FAIRE...")
    ### ...

    ### on sauvegardera l'image dans la fonction de test. Cela permet de créer
    ### plusieurs rectangles dégradés dans la même image


#
# Question 7
#
def disque(image, x0, y0, rayon, couleur):
    """Dessine un disque dans l'image "image".
Les arguments "x0" et "y0" designent le centre, l'argument "rayon" le rayon
et "couleur" sa couleur."""

    print("  -> Question 7 : disque")
    assert (im_format(image) == "PPM")

    ### l'image existe déjà : pas besoin de la créer et l'initialiser.

    ### ...
    print("À FAIRE...")
    ### ...

    ### on sauvegardera l'image dans la fonction de test. Cela permet de créer
    ### plusieurs disques dans la même image


#
# Question 8
#
def cercle(image, x0, y0, rayon, couleur):
    """Dessine un disque dans l'image "image".
Les arguments "x0" et "y0" designent le centre, l'argument "rayon" le rayon
et "couleur" sa couleur."""

    print("  -> Question 8 : cercle")
    assert (im_format(image) == "PPM")

    ### l'image existe déjà : pas besoin de la créer et l'initialiser.

    ### ...
    print("À FAIRE...")
    ### ...

    ### on sauvegardera l'image dans la fonction de test. Cela permet de créer
    ### plusieurs cercles dans la même image



#
# Question 9
#
def art_moderne(nom, largeur, hauteur):

    print("  -> Question 9 : art moderne")

    ### im = im_initialise("PPM", largeur, hauteur, ...)

    ### ...
    print("À FAIRE...")
    print("VOUS POUVEZ AJOUTER DES ARGUMENTS À CETTE FONCTION...")
    ### ...

    ### im_sauve(im, nom)


def tp1():
    """fonction de test : c'est elle qui lance toutes les autres fonctions"""

    ### constantes pour les couleurs habituelles
    rouge = (255,0,0)
    vert = (0,255,0)
    bleu = (0,0,255)
    blanc = (255,255,255)
    gris = (127,127,127)


    ### ATTENTION : vous devez changer la variable suivante et mettre votre
    ### nom à la place...
    nom = "hyvernat"
    assert (nom != "hyvernat")


    # question 2
    # (n'hésitez pas à changer les paramètres pour tester ce qu'il se
    # passe...)
    largeur = 100
    hauteur = 200
    im = im_initialise("PPM", largeur, hauteur, gris)
    rectangle(im, 25, 45, 33, 73, rouge)
    rectangle(im, 60, 150, 20, 100, bleu)
    rectangle(im, 10, 50, 100, 10, vert)
    im_sauve(im, nom + "-question_2")


    # question 3 : une mire
    im = im_initialise("PPM", largeur, largeur, gris)
    largeur_mire = 10
    epaisseur_mire = 2
    mire(im, bleu, largeur_mire, epaisseur_mire)
    im_sauve(im, nom + "-question_3" + "-mire")


    # question 4 : dégradé vertical simple
    hauteur = 128
    fond_degrade_simple(hauteur, nom + "-question_4" + "-degrade_simple")


    # question 5 : dégradé vertical moins simple
    # Attention, il faut bien aller de noir jusqu'à blanc de manière regulière
    largeur = 128
    hauteur = 1024
    fond_degrade(largeur, hauteur, nom + "-question_5" + "degrade_grand")
    hauteur = 128
    fond_degrade(largeur, hauteur, nom + "-question_5" + "degrade_petit")


    # question 6, 7 et 8 : quelques rectangles degradés, quelques disques et
    # cercles
    largeur = 512
    hauteur = 512
    im = im_initialise("PPM", largeur, hauteur, (0,0,0))
    rectangle_degrade(im, 10,10 , 256,256 , rouge , blanc)
    rectangle_degrade(im, 200,300 , 500,128 , vert , bleu)
    rectangle_degrade(im, 400,20 , 50, 500 , (255,255,0) , (0,255,255))
    rectangle_degrade(im, 460,460 , 50, 50 , bleu , bleu)
    im_sauve(im, nom + "-question_6" + "-degrades_divers")

    image = im_ouvre(nom + "-question_6" + "-degrades_divers" + ".ppm")
    disque(im, 200,200 , 50, rouge)
    disque(im, 500,200 , 100, bleu)
    im_sauve(im, nom + "-question_7" + "-disques")

    image = im_ouvre(nom + "-question_7" + "-disques" + ".ppm")
    cercle(im, 256,256 , 200, vert)
    cercle(im, 40,500 , 100, rouge)
    im_sauve(im, nom + "-question_8" + "-cercles")


    # question 9 : art moderne ??
    largeur = 512
    hauteur = 256
    art_moderne(nom + "-question_9" + "-art_moderne", largeur, hauteur)
