"""
Module for various Square.
"""
from turtle import Turtle
from point import Point

class RightAngleTriangle:
    """
    A RightAngleTriangle shape that can draw itself, move, and report area and perimeter.

    corners - [Point] corners of this Shape
    perimeter - length to traverse corners
    area - area of this Shape
    """
    corners: [Point]
    perimeter: float
    area: float

    def __init__(self, corners: [Point])->None:
        """ Create a new RightAngleTriangle self with corners.

        Assume that the corners are traversed in order,
        and one vertice is right angles.
        """
        self.corners = corners[:]
        self._turtle = Turtle()
        self._set_perimeter()
        self._set_area()

    def _set_perimeter(self) -> None:
        """ Set RightAngleTriangle self's perimeter to the sum of
        the distances between corners.
        """
        distance_list = []
        for i in range(len(self.corners)):
            distance_list.append(self.corners[i].distance(self.corners[i-1]))
        self._perimeter = sum(distance_list)

    def _set_area(self) -> None:
        """ Set the area of RightAngleTriangle self to the product of
        its legs, divided by 2.0
        """
        leg1 = self.corners[-1].distance(self.corners[0])
        leg2 = self.corners[0].distance(self.corners[1])
        self._area = (leg1 * leg2) / 2.0

    def _get_perimeter(self) -> float:
        """ Return the perimeter of this Square

        """
        return self._perimeter

    def _get_area(self) -> float:
        """ Return the area of this Square

        """
        return self._area


    def move_by(self, offset_point: Point)->None:
        """
        Move Square self to a new position by adding Point offset_point to
        each corner.
        """
        self.corners = [c + offset_point for c in self.corners]
        # equivalent to...
        # new_corners = []
        # for c in self.corners:
        #    new_corners.append(c + offset_point)
        # self.corners = new_corners

    def draw(self):
        """
        Draw Square self.

        @type self: Square
        @rtype: None
        """
        self._turtle.penup()
        self._turtle.goto(self.corners[-1].x, self.corners[-1].y)
        self._turtle.pendown()
        for i in range(len(self.corners)):
            self._turtle.goto(self.corners[i].x, self.corners[i].y)
        self._turtle.penup()
        self._turtle.goto(0, 0)
