# 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 .field_variable_value_i18n import FieldVariableValueI18n
from .field_variable_value_to_object import FieldVariableValueToObject
from .field_variable_value_to_file_for_write import FieldVariableValueToFileForWrite
from .field_variable_value_to_record import FieldVariableValueToRecord


class FieldVariableValueToForReview(object):
    _types = {
        "text_value": str,
        "bool_value": bool,
        "number_value": str,
        "enum_value": str,
        "date_value": str,
        "date_time_value": str,
        "i18n_value": FieldVariableValueI18n,
        "object_value": FieldVariableValueToObject,
        "department_value": str,
        "employment_value": str,
        "list_values": List[str],
        "file_value": FieldVariableValueToFileForWrite,
        "record_values": List[FieldVariableValueToRecord],
    }

    def __init__(self, d=None):
        self.text_value: Optional[str] = None
        self.bool_value: Optional[bool] = None
        self.number_value: Optional[str] = None
        self.enum_value: Optional[str] = None
        self.date_value: Optional[str] = None
        self.date_time_value: Optional[str] = None
        self.i18n_value: Optional[FieldVariableValueI18n] = None
        self.object_value: Optional[FieldVariableValueToObject] = None
        self.department_value: Optional[str] = None
        self.employment_value: Optional[str] = None
        self.list_values: Optional[List[str]] = None
        self.file_value: Optional[FieldVariableValueToFileForWrite] = None
        self.record_values: Optional[List[FieldVariableValueToRecord]] = None
        init(self, d, self._types)

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


class FieldVariableValueToForReviewBuilder(object):
    def __init__(self) -> None:
        self._field_variable_value_to_for_review = FieldVariableValueToForReview()

    def text_value(self, text_value: str) -> "FieldVariableValueToForReviewBuilder":
        self._field_variable_value_to_for_review.text_value = text_value
        return self

    def bool_value(self, bool_value: bool) -> "FieldVariableValueToForReviewBuilder":
        self._field_variable_value_to_for_review.bool_value = bool_value
        return self

    def number_value(self, number_value: str) -> "FieldVariableValueToForReviewBuilder":
        self._field_variable_value_to_for_review.number_value = number_value
        return self

    def enum_value(self, enum_value: str) -> "FieldVariableValueToForReviewBuilder":
        self._field_variable_value_to_for_review.enum_value = enum_value
        return self

    def date_value(self, date_value: str) -> "FieldVariableValueToForReviewBuilder":
        self._field_variable_value_to_for_review.date_value = date_value
        return self

    def date_time_value(self, date_time_value: str) -> "FieldVariableValueToForReviewBuilder":
        self._field_variable_value_to_for_review.date_time_value = date_time_value
        return self

    def i18n_value(self, i18n_value: FieldVariableValueI18n) -> "FieldVariableValueToForReviewBuilder":
        self._field_variable_value_to_for_review.i18n_value = i18n_value
        return self

    def object_value(self, object_value: FieldVariableValueToObject) -> "FieldVariableValueToForReviewBuilder":
        self._field_variable_value_to_for_review.object_value = object_value
        return self

    def department_value(self, department_value: str) -> "FieldVariableValueToForReviewBuilder":
        self._field_variable_value_to_for_review.department_value = department_value
        return self

    def employment_value(self, employment_value: str) -> "FieldVariableValueToForReviewBuilder":
        self._field_variable_value_to_for_review.employment_value = employment_value
        return self

    def list_values(self, list_values: List[str]) -> "FieldVariableValueToForReviewBuilder":
        self._field_variable_value_to_for_review.list_values = list_values
        return self

    def file_value(self, file_value: FieldVariableValueToFileForWrite) -> "FieldVariableValueToForReviewBuilder":
        self._field_variable_value_to_for_review.file_value = file_value
        return self

    def record_values(self, record_values: List[FieldVariableValueToRecord]) -> "FieldVariableValueToForReviewBuilder":
        self._field_variable_value_to_for_review.record_values = record_values
        return self

    def build(self) -> "FieldVariableValueToForReview":
        return self._field_variable_value_to_for_review
