# Code generated by Lark OpenAPI.

from typing import Any, Optional, Union, Dict, List, Set, IO, Callable, Type
from lark_oapi.core.construct import init
from .connector_attached_object import ConnectorAttachedObject
from .connector_attached_object import ConnectorAttachedObject
from .connector_info import ConnectorInfo
from .connector_info import ConnectorInfo
from .connector_caption import ConnectorCaption
from .point import Point


class Connector(object):
    _types = {
        "start_object": ConnectorAttachedObject,
        "end_object": ConnectorAttachedObject,
        "start": ConnectorInfo,
        "end": ConnectorInfo,
        "captions": ConnectorCaption,
        "shape": str,
        "turning_points": List[Point],
        "caption_auto_direction": bool,
        "caption_position": float,
        "specified_coordinate": bool,
        "caption_position_type": int,
    }

    def __init__(self, d=None):
        self.start_object: Optional[ConnectorAttachedObject] = None
        self.end_object: Optional[ConnectorAttachedObject] = None
        self.start: Optional[ConnectorInfo] = None
        self.end: Optional[ConnectorInfo] = None
        self.captions: Optional[ConnectorCaption] = None
        self.shape: Optional[str] = None
        self.turning_points: Optional[List[Point]] = None
        self.caption_auto_direction: Optional[bool] = None
        self.caption_position: Optional[float] = None
        self.specified_coordinate: Optional[bool] = None
        self.caption_position_type: Optional[int] = None
        init(self, d, self._types)

    @staticmethod
    def builder() -> "ConnectorBuilder":
        return ConnectorBuilder()


class ConnectorBuilder(object):
    def __init__(self) -> None:
        self._connector = Connector()

    def start_object(self, start_object: ConnectorAttachedObject) -> "ConnectorBuilder":
        self._connector.start_object = start_object
        return self

    def end_object(self, end_object: ConnectorAttachedObject) -> "ConnectorBuilder":
        self._connector.end_object = end_object
        return self

    def start(self, start: ConnectorInfo) -> "ConnectorBuilder":
        self._connector.start = start
        return self

    def end(self, end: ConnectorInfo) -> "ConnectorBuilder":
        self._connector.end = end
        return self

    def captions(self, captions: ConnectorCaption) -> "ConnectorBuilder":
        self._connector.captions = captions
        return self

    def shape(self, shape: str) -> "ConnectorBuilder":
        self._connector.shape = shape
        return self

    def turning_points(self, turning_points: List[Point]) -> "ConnectorBuilder":
        self._connector.turning_points = turning_points
        return self

    def caption_auto_direction(self, caption_auto_direction: bool) -> "ConnectorBuilder":
        self._connector.caption_auto_direction = caption_auto_direction
        return self

    def caption_position(self, caption_position: float) -> "ConnectorBuilder":
        self._connector.caption_position = caption_position
        return self

    def specified_coordinate(self, specified_coordinate: bool) -> "ConnectorBuilder":
        self._connector.specified_coordinate = specified_coordinate
        return self

    def caption_position_type(self, caption_position_type: int) -> "ConnectorBuilder":
        self._connector.caption_position_type = caption_position_type
        return self

    def build(self) -> "Connector":
        return self._connector
