# 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 .rich_text_element_text import RichTextElementText
from .rich_text_element_link import RichTextElementLink
from .rich_text_element_mention_user import RichTextElementMentionUser
from .rich_text_element_mention_doc import RichTextElementMentionDoc


class RichTextElement(object):
    _types = {
        "element_type": int,
        "text_element": RichTextElementText,
        "link_element": RichTextElementLink,
        "mention_user_element": RichTextElementMentionUser,
        "mention_doc_element": RichTextElementMentionDoc,
    }

    def __init__(self, d=None):
        self.element_type: Optional[int] = None
        self.text_element: Optional[RichTextElementText] = None
        self.link_element: Optional[RichTextElementLink] = None
        self.mention_user_element: Optional[RichTextElementMentionUser] = None
        self.mention_doc_element: Optional[RichTextElementMentionDoc] = None
        init(self, d, self._types)

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


class RichTextElementBuilder(object):
    def __init__(self) -> None:
        self._rich_text_element = RichTextElement()

    def element_type(self, element_type: int) -> "RichTextElementBuilder":
        self._rich_text_element.element_type = element_type
        return self

    def text_element(self, text_element: RichTextElementText) -> "RichTextElementBuilder":
        self._rich_text_element.text_element = text_element
        return self

    def link_element(self, link_element: RichTextElementLink) -> "RichTextElementBuilder":
        self._rich_text_element.link_element = link_element
        return self

    def mention_user_element(self, mention_user_element: RichTextElementMentionUser) -> "RichTextElementBuilder":
        self._rich_text_element.mention_user_element = mention_user_element
        return self

    def mention_doc_element(self, mention_doc_element: RichTextElementMentionDoc) -> "RichTextElementBuilder":
        self._rich_text_element.mention_doc_element = mention_doc_element
        return self

    def build(self) -> "RichTextElement":
        return self._rich_text_element
