# 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 .i18n_text import I18nText
from .url_value import UrlValue
from .enum_value import EnumValue
from .user_value import UserValue
from .phone_value import PhoneValue


class CustomFieldValue(object):
    _types = {
        "field_type": str,
        "text_value": I18nText,
        "url_value": UrlValue,
        "enum_value": EnumValue,
        "user_values": List[UserValue],
        "date_time_value": str,
        "number_value": str,
        "boolean_value": bool,
        "phone_value": PhoneValue,
        "field_key": str,
    }

    def __init__(self, d=None):
        self.field_type: Optional[str] = None
        self.text_value: Optional[I18nText] = None
        self.url_value: Optional[UrlValue] = None
        self.enum_value: Optional[EnumValue] = None
        self.user_values: Optional[List[UserValue]] = None
        self.date_time_value: Optional[str] = None
        self.number_value: Optional[str] = None
        self.boolean_value: Optional[bool] = None
        self.phone_value: Optional[PhoneValue] = None
        self.field_key: Optional[str] = None
        init(self, d, self._types)

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


class CustomFieldValueBuilder(object):
    def __init__(self) -> None:
        self._custom_field_value = CustomFieldValue()

    def field_type(self, field_type: str) -> "CustomFieldValueBuilder":
        self._custom_field_value.field_type = field_type
        return self

    def text_value(self, text_value: I18nText) -> "CustomFieldValueBuilder":
        self._custom_field_value.text_value = text_value
        return self

    def url_value(self, url_value: UrlValue) -> "CustomFieldValueBuilder":
        self._custom_field_value.url_value = url_value
        return self

    def enum_value(self, enum_value: EnumValue) -> "CustomFieldValueBuilder":
        self._custom_field_value.enum_value = enum_value
        return self

    def user_values(self, user_values: List[UserValue]) -> "CustomFieldValueBuilder":
        self._custom_field_value.user_values = user_values
        return self

    def date_time_value(self, date_time_value: str) -> "CustomFieldValueBuilder":
        self._custom_field_value.date_time_value = date_time_value
        return self

    def number_value(self, number_value: str) -> "CustomFieldValueBuilder":
        self._custom_field_value.number_value = number_value
        return self

    def boolean_value(self, boolean_value: bool) -> "CustomFieldValueBuilder":
        self._custom_field_value.boolean_value = boolean_value
        return self

    def phone_value(self, phone_value: PhoneValue) -> "CustomFieldValueBuilder":
        self._custom_field_value.phone_value = phone_value
        return self

    def field_key(self, field_key: str) -> "CustomFieldValueBuilder":
        self._custom_field_value.field_key = field_key
        return self

    def build(self) -> "CustomFieldValue":
        return self._custom_field_value
