"""Point Structure."""
from rules.drawable import *
lineADT = {
    parent:tuple(),
    "new":{
        tuple():{
            args:tuple(),
            trgt:Line.default
        },
        (str,):{
            args:("parallelAxis",),
            trgt:Line.default
        },
        (Point,Point,):{
            args:("point1","point2"),
            trgt:Line.fromPoints,
        },
        (float,float,Point,):{
            args:("angle","length","point",),
            trgt:Line.fromMetrics,
        },
        retVal:Point
    },
    "copy":{
        tuple():{
            args:tuple(),
            trgt:Line.fromLine
        },
        retVal:Line
    },
    "angle":{
        tuple():{
            args:tuple(),
            trgt:Line.angle
        },
        retVal:float
    },
    "length":{
        tuple():{
            args:tuple(),
            trgt:Line.length
        },
        retVal:float
    },
    "distance":{
        (Line,):{
            args:("line",),
            trgt:Line.distanceFrom
        },
        (Point,):{
            args:("point",),
            trgt:Line.distanceFrom
        },
        retVal:float
    },
    "bisector":{
        tuple():{
            args:tuple(),
            trgt:Line.bisector
        },
        retVal:Point
    },
    "sector":{
        (float, float,):{
            args:("m", "n",),
            trgt:Line.sector
        },
        retVal:Point
    },
    "intersect":{
        (Line,):{
            args:("line",),
            trgt:Line.intersectionWith
        },
        retVal:Point
    },
    "parallel_line":{
        (Point,):{
            args:("point",),
            trgt:Line.parallelLine
        },
        (float,):{
            args:("distance",),
            trgt:Line.parallelLine
        },
        retVal:Point
    },
    "projection":{
        (Point,):{
            args:("point",),
            trgt:Line.projectionOf
        },
        retVal:Point
    },
    "perpendicular":{
        (Point,):{
            args:("point",),
            trgt:Line.perpendicularFrom
        },
        (float,):{
            args:("ratio",),
            trgt:Line.perpendicularAt
        },
        retVal:Line
    },
    "perpendicular_bisector":{
        tuple():{
            args:tuple(),
            trgt:Line.perpendicularBisector
        },
        retVal:Line
    },
    "triangle":{
        (Point,):{
            args:("point",),
            trgt:Line.triangleTo
        },
        retVal:Triangle
    },
    "circle":{
        tuple():{
            args:tuple(),
            trgt:Line.circleAround
        },
        retVal:Circle
    },
    "tangent_circle":{
        (Point,):{
            args:("tangentCentre",),
            trgt:Line.circleAround
        },
        retVal:Circle
    },
    "chord_circle":{
        (Point,):{
            args:("chordCentre",),
            trgt:Line.circleAround
        },
        retVal:Circle
    },
    "square":{
        tuple():{
            args:tuple(),
            trgt:Line.square
        },
        retVal:int
    },
    "rectangle":{
        (float,):{
            args:("sideLength",),
            trgt:Line.rectangle
        },
        retVal:int
    }
}