# 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_name import I18nName
from .i18n_name import I18nName
from .avatar_info import AvatarInfo
from .i18n_name import I18nName


class CollaborationEntity(object):
    _types = {
        "collaboration_entity_type": str,
        "department_id": str,
        "open_department_id": str,
        "user_id": str,
        "open_user_id": str,
        "union_user_id": str,
        "department_name": str,
        "i18n_department_name": I18nName,
        "department_order": str,
        "user_name": str,
        "i18n_user_name": I18nName,
        "user_avatar": AvatarInfo,
        "group_id": str,
        "open_group_id": str,
        "group_name": str,
        "i18n_group_name": I18nName,
    }

    def __init__(self, d=None):
        self.collaboration_entity_type: Optional[str] = None
        self.department_id: Optional[str] = None
        self.open_department_id: Optional[str] = None
        self.user_id: Optional[str] = None
        self.open_user_id: Optional[str] = None
        self.union_user_id: Optional[str] = None
        self.department_name: Optional[str] = None
        self.i18n_department_name: Optional[I18nName] = None
        self.department_order: Optional[str] = None
        self.user_name: Optional[str] = None
        self.i18n_user_name: Optional[I18nName] = None
        self.user_avatar: Optional[AvatarInfo] = None
        self.group_id: Optional[str] = None
        self.open_group_id: Optional[str] = None
        self.group_name: Optional[str] = None
        self.i18n_group_name: Optional[I18nName] = None
        init(self, d, self._types)

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


class CollaborationEntityBuilder(object):
    def __init__(self) -> None:
        self._collaboration_entity = CollaborationEntity()

    def collaboration_entity_type(self, collaboration_entity_type: str) -> "CollaborationEntityBuilder":
        self._collaboration_entity.collaboration_entity_type = collaboration_entity_type
        return self

    def department_id(self, department_id: str) -> "CollaborationEntityBuilder":
        self._collaboration_entity.department_id = department_id
        return self

    def open_department_id(self, open_department_id: str) -> "CollaborationEntityBuilder":
        self._collaboration_entity.open_department_id = open_department_id
        return self

    def user_id(self, user_id: str) -> "CollaborationEntityBuilder":
        self._collaboration_entity.user_id = user_id
        return self

    def open_user_id(self, open_user_id: str) -> "CollaborationEntityBuilder":
        self._collaboration_entity.open_user_id = open_user_id
        return self

    def union_user_id(self, union_user_id: str) -> "CollaborationEntityBuilder":
        self._collaboration_entity.union_user_id = union_user_id
        return self

    def department_name(self, department_name: str) -> "CollaborationEntityBuilder":
        self._collaboration_entity.department_name = department_name
        return self

    def i18n_department_name(self, i18n_department_name: I18nName) -> "CollaborationEntityBuilder":
        self._collaboration_entity.i18n_department_name = i18n_department_name
        return self

    def department_order(self, department_order: str) -> "CollaborationEntityBuilder":
        self._collaboration_entity.department_order = department_order
        return self

    def user_name(self, user_name: str) -> "CollaborationEntityBuilder":
        self._collaboration_entity.user_name = user_name
        return self

    def i18n_user_name(self, i18n_user_name: I18nName) -> "CollaborationEntityBuilder":
        self._collaboration_entity.i18n_user_name = i18n_user_name
        return self

    def user_avatar(self, user_avatar: AvatarInfo) -> "CollaborationEntityBuilder":
        self._collaboration_entity.user_avatar = user_avatar
        return self

    def group_id(self, group_id: str) -> "CollaborationEntityBuilder":
        self._collaboration_entity.group_id = group_id
        return self

    def open_group_id(self, open_group_id: str) -> "CollaborationEntityBuilder":
        self._collaboration_entity.open_group_id = open_group_id
        return self

    def group_name(self, group_name: str) -> "CollaborationEntityBuilder":
        self._collaboration_entity.group_name = group_name
        return self

    def i18n_group_name(self, i18n_group_name: I18nName) -> "CollaborationEntityBuilder":
        self._collaboration_entity.i18n_group_name = i18n_group_name
        return self

    def build(self) -> "CollaborationEntity":
        return self._collaboration_entity
