# 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 .text import Text
from .mention_user import MentionUser
from .mention_document import MentionDocument
from .value_element import ValueElement
from .date_time import DateTime
from .file import File
from .image import Image
from .link import Link
from .reminder import Reminder
from .formula import Formula


class CellValue(object):
    _types = {
        "type": str,
        "text": Text,
        "mention_user": MentionUser,
        "mention_document": MentionDocument,
        "value": ValueElement,
        "date_time": DateTime,
        "file": File,
        "image": Image,
        "link": Link,
        "reminder": Reminder,
        "formula": Formula,
    }

    def __init__(self, d=None):
        self.type: Optional[str] = None
        self.text: Optional[Text] = None
        self.mention_user: Optional[MentionUser] = None
        self.mention_document: Optional[MentionDocument] = None
        self.value: Optional[ValueElement] = None
        self.date_time: Optional[DateTime] = None
        self.file: Optional[File] = None
        self.image: Optional[Image] = None
        self.link: Optional[Link] = None
        self.reminder: Optional[Reminder] = None
        self.formula: Optional[Formula] = None
        init(self, d, self._types)

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


class CellValueBuilder(object):
    def __init__(self) -> None:
        self._cell_value = CellValue()

    def type(self, type: str) -> "CellValueBuilder":
        self._cell_value.type = type
        return self

    def text(self, text: Text) -> "CellValueBuilder":
        self._cell_value.text = text
        return self

    def mention_user(self, mention_user: MentionUser) -> "CellValueBuilder":
        self._cell_value.mention_user = mention_user
        return self

    def mention_document(self, mention_document: MentionDocument) -> "CellValueBuilder":
        self._cell_value.mention_document = mention_document
        return self

    def value(self, value: ValueElement) -> "CellValueBuilder":
        self._cell_value.value = value
        return self

    def date_time(self, date_time: DateTime) -> "CellValueBuilder":
        self._cell_value.date_time = date_time
        return self

    def file(self, file: File) -> "CellValueBuilder":
        self._cell_value.file = file
        return self

    def image(self, image: Image) -> "CellValueBuilder":
        self._cell_value.image = image
        return self

    def link(self, link: Link) -> "CellValueBuilder":
        self._cell_value.link = link
        return self

    def reminder(self, reminder: Reminder) -> "CellValueBuilder":
        self._cell_value.reminder = reminder
        return self

    def formula(self, formula: Formula) -> "CellValueBuilder":
        self._cell_value.formula = formula
        return self

    def build(self) -> "CellValue":
        return self._cell_value
