from cooptools.colors import Color
import coopgame.grids_graphs.draw_graph_utils as utils
import coopgame.linedrawing.line_draw_utils as lutils
import coopgame.label_drawing.label_drawing_utils as labutils
import coopgame.pointdrawing.point_draw_utils as putils
from coopgame import grids_graphs as pgh

ARROW_SIZES = 3

GRAPH_DRAW_CONFIG = utils.GraphDrawArgs(
            node_draw_args=putils.DrawPointArgs(
                color=Color.DARK_BLUE,
                radius=2,
            ),
            enabled_edge_args=lutils.DrawLineArgs(
                color=Color.ORANGE,
                directionality_draw_args=lutils.DirectionalityIndicatorDrawArgs(
                    color=Color.ORANGE,
                    height=ARROW_SIZES,
                    width=ARROW_SIZES
                ),
                draw_label_args=labutils.DrawLabelArgs(
                    color=Color.WHEAT
                )
            ),
            disabled_edge_args=lutils.DrawLineArgs(
                color=Color.BROWN,
                directionality_draw_args=lutils.DirectionalityIndicatorDrawArgs(
                    color=Color.BROWN,
                    height=ARROW_SIZES,
                    width=ARROW_SIZES
                ),
                draw_label_args=labutils.DrawLabelArgs(
                    color=Color.BROWN
                )
            ),
            node_label_args=labutils.DrawLabelArgs(
                color=Color.WHEAT
            ),
            # articulation_points_args=putils.DrawPointArgs(
            #     outline_color=Color.PURPLE,
            #     radius=10,
            #     outline_width=3
            # ),
            sink_node_args=putils.DrawPointArgs(
                color=Color.RED,
                radius=10
            ),
            source_node_args=putils.DrawPointArgs(
                color=Color.GREEN,
                radius=10
            ),
            orphan_node_args=putils.DrawPointArgs(
                outline_color=Color.RED,
                radius=10
            )
        )

ROUTE_DRAW_ARGS = pgh.RouteDrawArgs(
                edge_draw_args=lutils.DrawLineArgs(
                    color=Color.TEAL,
                    width=2,
                    # draw_label_args=labutils.DrawLabelArgs(
                    #     color=Color.TEAL
                    # ),
                    directionality_draw_args=lutils.DirectionalityIndicatorDrawArgs(
                        color=Color.TEAL,
                        height=ARROW_SIZES,
                        width=ARROW_SIZES
                    )
                ),
                node_draw_args=putils.DrawPointArgs(
                    color=Color.TEAL,
                    radius=2
                ),
                # node_label_args=labutils.DrawLabelArgs(
                #     color=Color.TEAL
                # )
            )

RIVER_GRAPH_DRAW_CONFIG = utils.GraphDrawArgs(
            # node_draw_args=putils.DrawPointArgs(
            #     color=Color.DARK_BLUE,
            #     radius=2,
            # ),
            enabled_edge_args=lutils.DrawLineArgs(
                color=Color.DARK_BLUE,
                width=5
                # directionality_draw_args=lutils.DirectionalityIndicatorDrawArgs(
                #     color=Color.ORANGE,
                #     height=ARROW_SIZES,
                #     width=ARROW_SIZES
                # ),
                # draw_label_args=labutils.DrawLabelArgs(
                #     color=Color.WHEAT
                # )
            ),
            # disabled_edge_args=lutils.DrawLineArgs(
            #     color=Color.BROWN,
            #     directionality_draw_args=lutils.DirectionalityIndicatorDrawArgs(
            #         color=Color.BROWN,
            #         height=ARROW_SIZES,
            #         width=ARROW_SIZES
            #     ),
            #     draw_label_args=labutils.DrawLabelArgs(
            #         color=Color.BROWN
            #     )
            # ),
            # node_label_args=labutils.DrawLabelArgs(
            #     color=Color.WHEAT
            # ),
            # articulation_points_args=putils.DrawPointArgs(
            #     outline_color=Color.PURPLE,
            #     radius=10,
            #     outline_width=3
            # ),
            sink_node_args=putils.DrawPointArgs(
                color=Color.ORANGE,
                radius=10
            ),
            source_node_args=putils.DrawPointArgs(
                color=Color.GREEN,
                radius=10
            ),
            orphan_node_args=putils.DrawPointArgs(
                outline_color=Color.RED,
                radius=10
            )
        )
