from enum import Enum


class GraphDirection(Enum):
    North = (0, 1)
    NorthEast = (1, 1)
    East = (1, 0)
    SouthEast = (1, -1)
    South = (0, -1)
    SouthWest = (-1, -1)
    West = (-1, 0)
    NorthWest = (-1, 1)

    @classmethod
    def values(cls):
        return [
            cls.North.value,
            cls.NorthEast.value,
            cls.East.value,
            cls.SouthEast.value,
            cls.South.value,
            cls.SouthWest.value,
            cls.West.value,
            cls.NorthWest.value
        ]

    @classmethod
    def ordinal_directions(cls):
        return [
            cls.North,
            cls.East,
            cls.South,
            cls.West
        ]

    def opposite_direction(self):
        return {
            GraphDirection.North: GraphDirection.South,
            GraphDirection.NorthEast: GraphDirection.SouthWest,
            GraphDirection.East: GraphDirection.West,
            GraphDirection.SouthEast: GraphDirection.NorthWest,
            GraphDirection.South: GraphDirection.North,
            GraphDirection.SouthWest: GraphDirection.NorthEast,
            GraphDirection.West: GraphDirection.East,
            GraphDirection.NorthWest: GraphDirection.SouthEast
        }[self]

