from typing import Optional, Union

from data.tools.zplot2 import renderers
from data.tools.zplot2.data import HeroData
from data.tools.zplot2.errors import InvalidArgumentError
from data.tools.zplot2.geometries import Geometry


class Hero(Geometry):
    """ Hero Geometry Class"""

    def __init__(self, input_data: HeroData, name: str = ""):
        super().__init__(input_data, name)

    def create_renderer(
        self, style: renderers.LineStyle, renderer_id: Optional[str] = None
    ) -> renderers.Renderer:
        """Adds a new renderers to this object.
        Arguments:
            style: Style of the renderer to add.
            renderer_id: Optional id for the renderer.
        """
        if not isinstance(style, renderers.LineStyle):
            raise InvalidArgumentError(
                "Incompatible Style. Hero only accepts LineStyle"
            )
        return renderers.LineRenderer(
            style, renderer_id, x_coord="x", y_coord="y"
        )
