# 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 .number_setting import NumberSetting
from .member_setting import MemberSetting
from .datetime_setting import DatetimeSetting
from .select_setting import SelectSetting
from .select_setting import SelectSetting
from .member import Member
from .text_setting import TextSetting


class CustomField(object):
    _types = {
        "guid": str,
        "name": str,
        "type": str,
        "number_setting": NumberSetting,
        "member_setting": MemberSetting,
        "datetime_setting": DatetimeSetting,
        "single_select_setting": SelectSetting,
        "multi_select_setting": SelectSetting,
        "creator": Member,
        "created_at": str,
        "updated_at": str,
        "text_setting": TextSetting,
    }

    def __init__(self, d=None):
        self.guid: Optional[str] = None
        self.name: Optional[str] = None
        self.type: Optional[str] = None
        self.number_setting: Optional[NumberSetting] = None
        self.member_setting: Optional[MemberSetting] = None
        self.datetime_setting: Optional[DatetimeSetting] = None
        self.single_select_setting: Optional[SelectSetting] = None
        self.multi_select_setting: Optional[SelectSetting] = None
        self.creator: Optional[Member] = None
        self.created_at: Optional[str] = None
        self.updated_at: Optional[str] = None
        self.text_setting: Optional[TextSetting] = None
        init(self, d, self._types)

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


class CustomFieldBuilder(object):
    def __init__(self) -> None:
        self._custom_field = CustomField()

    def guid(self, guid: str) -> "CustomFieldBuilder":
        self._custom_field.guid = guid
        return self

    def name(self, name: str) -> "CustomFieldBuilder":
        self._custom_field.name = name
        return self

    def type(self, type: str) -> "CustomFieldBuilder":
        self._custom_field.type = type
        return self

    def number_setting(self, number_setting: NumberSetting) -> "CustomFieldBuilder":
        self._custom_field.number_setting = number_setting
        return self

    def member_setting(self, member_setting: MemberSetting) -> "CustomFieldBuilder":
        self._custom_field.member_setting = member_setting
        return self

    def datetime_setting(self, datetime_setting: DatetimeSetting) -> "CustomFieldBuilder":
        self._custom_field.datetime_setting = datetime_setting
        return self

    def single_select_setting(self, single_select_setting: SelectSetting) -> "CustomFieldBuilder":
        self._custom_field.single_select_setting = single_select_setting
        return self

    def multi_select_setting(self, multi_select_setting: SelectSetting) -> "CustomFieldBuilder":
        self._custom_field.multi_select_setting = multi_select_setting
        return self

    def creator(self, creator: Member) -> "CustomFieldBuilder":
        self._custom_field.creator = creator
        return self

    def created_at(self, created_at: str) -> "CustomFieldBuilder":
        self._custom_field.created_at = created_at
        return self

    def updated_at(self, updated_at: str) -> "CustomFieldBuilder":
        self._custom_field.updated_at = updated_at
        return self

    def text_setting(self, text_setting: TextSetting) -> "CustomFieldBuilder":
        self._custom_field.text_setting = text_setting
        return self

    def build(self) -> "CustomField":
        return self._custom_field
