# 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 .avatar_info import AvatarInfo
from .user_status import UserStatus
from .user_custom_attr import UserCustomAttr
from .collaboration_department_id import CollaborationDepartmentId
from .collaboration_user_id import CollaborationUserId


class CollaborationUser(object):
    _types = {
        "open_id": str,
        "user_id": str,
        "union_id": str,
        "name": str,
        "i18n_name": I18nName,
        "avatar": AvatarInfo,
        "mobile": str,
        "status": UserStatus,
        "department_ids": List[str],
        "leader_user_id": str,
        "job_title": str,
        "custom_attrs": List[UserCustomAttr],
        "employee_no": str,
        "parent_department_ids": List[CollaborationDepartmentId],
        "leader_id": CollaborationUserId,
    }

    def __init__(self, d=None):
        self.open_id: Optional[str] = None
        self.user_id: Optional[str] = None
        self.union_id: Optional[str] = None
        self.name: Optional[str] = None
        self.i18n_name: Optional[I18nName] = None
        self.avatar: Optional[AvatarInfo] = None
        self.mobile: Optional[str] = None
        self.status: Optional[UserStatus] = None
        self.department_ids: Optional[List[str]] = None
        self.leader_user_id: Optional[str] = None
        self.job_title: Optional[str] = None
        self.custom_attrs: Optional[List[UserCustomAttr]] = None
        self.employee_no: Optional[str] = None
        self.parent_department_ids: Optional[List[CollaborationDepartmentId]] = None
        self.leader_id: Optional[CollaborationUserId] = None
        init(self, d, self._types)

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


class CollaborationUserBuilder(object):
    def __init__(self) -> None:
        self._collaboration_user = CollaborationUser()

    def open_id(self, open_id: str) -> "CollaborationUserBuilder":
        self._collaboration_user.open_id = open_id
        return self

    def user_id(self, user_id: str) -> "CollaborationUserBuilder":
        self._collaboration_user.user_id = user_id
        return self

    def union_id(self, union_id: str) -> "CollaborationUserBuilder":
        self._collaboration_user.union_id = union_id
        return self

    def name(self, name: str) -> "CollaborationUserBuilder":
        self._collaboration_user.name = name
        return self

    def i18n_name(self, i18n_name: I18nName) -> "CollaborationUserBuilder":
        self._collaboration_user.i18n_name = i18n_name
        return self

    def avatar(self, avatar: AvatarInfo) -> "CollaborationUserBuilder":
        self._collaboration_user.avatar = avatar
        return self

    def mobile(self, mobile: str) -> "CollaborationUserBuilder":
        self._collaboration_user.mobile = mobile
        return self

    def status(self, status: UserStatus) -> "CollaborationUserBuilder":
        self._collaboration_user.status = status
        return self

    def department_ids(self, department_ids: List[str]) -> "CollaborationUserBuilder":
        self._collaboration_user.department_ids = department_ids
        return self

    def leader_user_id(self, leader_user_id: str) -> "CollaborationUserBuilder":
        self._collaboration_user.leader_user_id = leader_user_id
        return self

    def job_title(self, job_title: str) -> "CollaborationUserBuilder":
        self._collaboration_user.job_title = job_title
        return self

    def custom_attrs(self, custom_attrs: List[UserCustomAttr]) -> "CollaborationUserBuilder":
        self._collaboration_user.custom_attrs = custom_attrs
        return self

    def employee_no(self, employee_no: str) -> "CollaborationUserBuilder":
        self._collaboration_user.employee_no = employee_no
        return self

    def parent_department_ids(self,
                              parent_department_ids: List[CollaborationDepartmentId]) -> "CollaborationUserBuilder":
        self._collaboration_user.parent_department_ids = parent_department_ids
        return self

    def leader_id(self, leader_id: CollaborationUserId) -> "CollaborationUserBuilder":
        self._collaboration_user.leader_id = leader_id
        return self

    def build(self) -> "CollaborationUser":
        return self._collaboration_user
