# 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 .user import User


class ReviewDetail(object):
    _types = {
        "template_id": str,
        "unit_id": str,
        "field_id": str,
        "reviewer_user_id": User,
        "submit_time": int,
        "indicator_id": str,
        "option_id": str,
        "score": str,
        "text": str,
        "perf_coefficient_result": str,
        "richtext": str,
    }

    def __init__(self, d=None):
        self.template_id: Optional[str] = None
        self.unit_id: Optional[str] = None
        self.field_id: Optional[str] = None
        self.reviewer_user_id: Optional[User] = None
        self.submit_time: Optional[int] = None
        self.indicator_id: Optional[str] = None
        self.option_id: Optional[str] = None
        self.score: Optional[str] = None
        self.text: Optional[str] = None
        self.perf_coefficient_result: Optional[str] = None
        self.richtext: Optional[str] = None
        init(self, d, self._types)

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


class ReviewDetailBuilder(object):
    def __init__(self) -> None:
        self._review_detail = ReviewDetail()

    def template_id(self, template_id: str) -> "ReviewDetailBuilder":
        self._review_detail.template_id = template_id
        return self

    def unit_id(self, unit_id: str) -> "ReviewDetailBuilder":
        self._review_detail.unit_id = unit_id
        return self

    def field_id(self, field_id: str) -> "ReviewDetailBuilder":
        self._review_detail.field_id = field_id
        return self

    def reviewer_user_id(self, reviewer_user_id: User) -> "ReviewDetailBuilder":
        self._review_detail.reviewer_user_id = reviewer_user_id
        return self

    def submit_time(self, submit_time: int) -> "ReviewDetailBuilder":
        self._review_detail.submit_time = submit_time
        return self

    def indicator_id(self, indicator_id: str) -> "ReviewDetailBuilder":
        self._review_detail.indicator_id = indicator_id
        return self

    def option_id(self, option_id: str) -> "ReviewDetailBuilder":
        self._review_detail.option_id = option_id
        return self

    def score(self, score: str) -> "ReviewDetailBuilder":
        self._review_detail.score = score
        return self

    def text(self, text: str) -> "ReviewDetailBuilder":
        self._review_detail.text = text
        return self

    def perf_coefficient_result(self, perf_coefficient_result: str) -> "ReviewDetailBuilder":
        self._review_detail.perf_coefficient_result = perf_coefficient_result
        return self

    def richtext(self, richtext: str) -> "ReviewDetailBuilder":
        self._review_detail.richtext = richtext
        return self

    def build(self) -> "ReviewDetail":
        return self._review_detail
