import rosegraphics as rg
import traceback
import turtle


def main():
    """ Demonstrates some of the features of RoseGraphics. """
    turtles()
#     shapes()


def turtles():
    # ----------------------------------------------------------------------
    # Next two lines set up a Screen object for animation:
    # ----------------------------------------------------------------------
    window = turtle.Screen()
    window.delay(50)  # Bigger numbers mean slower animation.

    # ----------------------------------------------------------------------
    # Next two lines make two Turtle objects:
    # ----------------------------------------------------------------------
    nadia = rg.SimpleTurtle()
    akil = rg.SimpleTurtle('turtle')

    # ----------------------------------------------------------------------
    # Next lines ask the Turtle objects to do things:
    # ----------------------------------------------------------------------
    nadia.forward(100)
    nadia.left(90)
    nadia.forward(200)

    akil.right(45)
    akil.backward(50)
    akil.right(60)

    nadia.pen_up()
    nadia.forward(50)
    nadia.pen_down()
    nadia.left(135)
    nadia.backward(40)
#
#     # ----------------------------------------------------------------------
#     # Next lines set characteristics of the Turtle objects:
#     # ----------------------------------------------------------------------
#     nadia._newLine()  # Makes new pen characteristics NOT be retroactive.
#     nadia._pencolor = 'blue'
#     nadia._pensize = 10
#     nadia._speed = 10
#
#     akil._pencolor = 'red'
#     akil._pensize = 30
#     akil._speed = 1
#
#     akil.backward(100)
#     nadia.forward(100)
#
#     nadia.left(60)
#     nadia.forward(500)

    # ----------------------------------------------------------------------
    # Next line keeps the window open until the user clicks in the window:
    # ----------------------------------------------------------------------
    window.exitonclick()


def shapes():
    print("rg.Point.x=5 should give an error")
    try:
        rg.Point.x = 5
    except:
        print("Got the error!")
        traceback.print_exc()
        # raise

    # Demonstrates/tests the __repr__ methods:
    point1 = rg.Point(100, 200)
    point2 = rg.Point(300, 400)
    circle = rg.Circle(point1, 50)
    rectangle = rg.Rectangle(point1, point2)
    square = rg.Square(point1, 40)
    line = rg.Line(point1, point2)
    for shape in (point1, point2, circle, rectangle, square, line):
        print(shape)

    for shape in (circle, rectangle, square):
        shape.fill_color = 'red'
        shape.outline_color = 'blue'
        shape.outline_thickness = 5
    line.color = 'green'
    line.thickness = 10

    for shape in (point1, point2, circle, rectangle, square, line):
        print(shape)

    w = rg.RoseWindow(500, 300, 'hello')
    w.close_on_mouse_click()
    window1 = rg.RoseWindow(title='An empty window',
                            make_initial_canvas=False)

    window1.close_on_mouse_click()

    window2 = rg.RoseWindow(500, 300, 'Blue window with yellow canvas',
                            # window_color='blue', # Mark: I assume most students
                            # won't use this.
                            canvas_color='yellow')

    center = rg.Point(300, 100)
    circle = rg.Circle(center, 40)
    circle.attach_to(window2.initial_canvas)
    circle.fill_color = 'red'
    window2.render(1)
    circle.fill_color = ''
    print("Emptied the fill color.")
    print(window2.width, window2.height)
    window2.render()
    window2.get_next_mouse_click()

    center.move_by(-200, -50)
    circle = rg.Circle(center, 70)
    circle.attach_to(window2.initial_canvas)
    circle.fill_color = None

    print(window2.width, window2.height)
    window2.render()
    window2.close_on_mouse_click()

    window3 = rg.RoseWindow()

    p1 = rg.Point(100, 50)
    p2 = rg.Point(200, 90)

    rect = rg.Rectangle(p1, p2)
# rect.attach_to(window2.initial_canvas) # DCM: Two windows open,
# confusing.
    rect.attach_to(window3.initial_canvas)

    window3.render(1)

    rect.fill_color = 'red'
    center.attach_to(window3.initial_canvas)
    window3.render(1)

    center.move_by(50, 0)
    window3.render()

    window3.close_on_mouse_click()

main()