# 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 import I18n


class ReviewerInfo(object):
    _types = {
        "invite_distribute_type": int,
        "invite_avg_diff": str,
        "invite_relationship_with_reviewee": str,
        "invite_invitedby": str,
        "cooperation_project": str,
        "cooperation_project_name": I18n,
        "direct_project_leader_role_id": str,
    }

    def __init__(self, d=None):
        self.invite_distribute_type: Optional[int] = None
        self.invite_avg_diff: Optional[str] = None
        self.invite_relationship_with_reviewee: Optional[str] = None
        self.invite_invitedby: Optional[str] = None
        self.cooperation_project: Optional[str] = None
        self.cooperation_project_name: Optional[I18n] = None
        self.direct_project_leader_role_id: Optional[str] = None
        init(self, d, self._types)

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


class ReviewerInfoBuilder(object):
    def __init__(self) -> None:
        self._reviewer_info = ReviewerInfo()

    def invite_distribute_type(self, invite_distribute_type: int) -> "ReviewerInfoBuilder":
        self._reviewer_info.invite_distribute_type = invite_distribute_type
        return self

    def invite_avg_diff(self, invite_avg_diff: str) -> "ReviewerInfoBuilder":
        self._reviewer_info.invite_avg_diff = invite_avg_diff
        return self

    def invite_relationship_with_reviewee(self, invite_relationship_with_reviewee: str) -> "ReviewerInfoBuilder":
        self._reviewer_info.invite_relationship_with_reviewee = invite_relationship_with_reviewee
        return self

    def invite_invitedby(self, invite_invitedby: str) -> "ReviewerInfoBuilder":
        self._reviewer_info.invite_invitedby = invite_invitedby
        return self

    def cooperation_project(self, cooperation_project: str) -> "ReviewerInfoBuilder":
        self._reviewer_info.cooperation_project = cooperation_project
        return self

    def cooperation_project_name(self, cooperation_project_name: I18n) -> "ReviewerInfoBuilder":
        self._reviewer_info.cooperation_project_name = cooperation_project_name
        return self

    def direct_project_leader_role_id(self, direct_project_leader_role_id: str) -> "ReviewerInfoBuilder":
        self._reviewer_info.direct_project_leader_role_id = direct_project_leader_role_id
        return self

    def build(self) -> "ReviewerInfo":
        return self._reviewer_info
