# 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 .name import Name
from .contact_address import ContactAddress
from .tenant import Tenant
from .department import Department
from .user_department_sort_info import UserDepartmentSortInfo
from .i18n_text import I18nText
from .image import Image
from .custom_field_value import CustomFieldValue
from .work_status import WorkStatus
from .department_base_info import DepartmentBaseInfo
from .i18n_text import I18nText
from .department import Department
from .image_link import ImageLink
from .user_virtual_org_info import UserVirtualOrgInfo


class EmployeeBaseEntity(object):
    _types = {
        "employee_id": str,
        "user_id": str,
        "external_id": str,
        "name": Name,
        "mobile": str,
        "email": str,
        "personal_email": str,
        "enterprise_email": str,
        "gender": int,
        "residential_address": str,
        "contact_addresses": List[ContactAddress],
        "tenant": Tenant,
        "departments": List[Department],
        "employee_order_in_departments": List[UserDepartmentSortInfo],
        "user_department_path": Dict[str, List[str]],
        "user_department_path_name": Dict[str, I18nText],
        "avatar_key": Image,
        "background_image_key": str,
        "description": str,
        "is_set_custom_background_image": bool,
        "active_status": int,
        "is_resigned": bool,
        "leader_id": str,
        "dotted_line_leader_ids": List[str],
        "is_primary_admin": bool,
        "create_time": str,
        "update_time": str,
        "enterprise_email_aliases": List[str],
        "custom_field_values": List[CustomFieldValue],
        "description_flag": str,
        "work_status": WorkStatus,
        "has_been_resurrected": bool,
        "during_resign_cooling_off_period": bool,
        "is_set_custom_avatar": bool,
        "is_registered": bool,
        "department_path_infos": List[list],
        "resign_time": str,
        "resigned_user_department_path": Dict[str, List[str]],
        "resigned_user_department_path_name": Dict[str, I18nText],
        "resigned_departments": List[Department],
        "avatar": ImageLink,
        "background_image": str,
        "is_admin": bool,
        "data_source": int,
        "geo_name": str,
        "subscription_ids": List[str],
        "virtual_org_infos": List[UserVirtualOrgInfo],
        "is_forbidden_delete_employee": bool,
    }

    def __init__(self, d=None):
        self.employee_id: Optional[str] = None
        self.user_id: Optional[str] = None
        self.external_id: Optional[str] = None
        self.name: Optional[Name] = None
        self.mobile: Optional[str] = None
        self.email: Optional[str] = None
        self.personal_email: Optional[str] = None
        self.enterprise_email: Optional[str] = None
        self.gender: Optional[int] = None
        self.residential_address: Optional[str] = None
        self.contact_addresses: Optional[List[ContactAddress]] = None
        self.tenant: Optional[Tenant] = None
        self.departments: Optional[List[Department]] = None
        self.employee_order_in_departments: Optional[List[UserDepartmentSortInfo]] = None
        self.user_department_path: Optional[Dict[str, List[str]]] = None
        self.user_department_path_name: Optional[Dict[str, I18nText]] = None
        self.avatar_key: Optional[Image] = None
        self.background_image_key: Optional[str] = None
        self.description: Optional[str] = None
        self.is_set_custom_background_image: Optional[bool] = None
        self.active_status: Optional[int] = None
        self.is_resigned: Optional[bool] = None
        self.leader_id: Optional[str] = None
        self.dotted_line_leader_ids: Optional[List[str]] = None
        self.is_primary_admin: Optional[bool] = None
        self.create_time: Optional[str] = None
        self.update_time: Optional[str] = None
        self.enterprise_email_aliases: Optional[List[str]] = None
        self.custom_field_values: Optional[List[CustomFieldValue]] = None
        self.description_flag: Optional[str] = None
        self.work_status: Optional[WorkStatus] = None
        self.has_been_resurrected: Optional[bool] = None
        self.during_resign_cooling_off_period: Optional[bool] = None
        self.is_set_custom_avatar: Optional[bool] = None
        self.is_registered: Optional[bool] = None
        self.department_path_infos: Optional[List[list]] = None
        self.resign_time: Optional[str] = None
        self.resigned_user_department_path: Optional[Dict[str, List[str]]] = None
        self.resigned_user_department_path_name: Optional[Dict[str, I18nText]] = None
        self.resigned_departments: Optional[List[Department]] = None
        self.avatar: Optional[ImageLink] = None
        self.background_image: Optional[str] = None
        self.is_admin: Optional[bool] = None
        self.data_source: Optional[int] = None
        self.geo_name: Optional[str] = None
        self.subscription_ids: Optional[List[str]] = None
        self.virtual_org_infos: Optional[List[UserVirtualOrgInfo]] = None
        self.is_forbidden_delete_employee: Optional[bool] = None
        init(self, d, self._types)

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


class EmployeeBaseEntityBuilder(object):
    def __init__(self) -> None:
        self._employee_base_entity = EmployeeBaseEntity()

    def employee_id(self, employee_id: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.employee_id = employee_id
        return self

    def user_id(self, user_id: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.user_id = user_id
        return self

    def external_id(self, external_id: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.external_id = external_id
        return self

    def name(self, name: Name) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.name = name
        return self

    def mobile(self, mobile: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.mobile = mobile
        return self

    def email(self, email: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.email = email
        return self

    def personal_email(self, personal_email: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.personal_email = personal_email
        return self

    def enterprise_email(self, enterprise_email: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.enterprise_email = enterprise_email
        return self

    def gender(self, gender: int) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.gender = gender
        return self

    def residential_address(self, residential_address: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.residential_address = residential_address
        return self

    def contact_addresses(self, contact_addresses: List[ContactAddress]) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.contact_addresses = contact_addresses
        return self

    def tenant(self, tenant: Tenant) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.tenant = tenant
        return self

    def departments(self, departments: List[Department]) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.departments = departments
        return self

    def employee_order_in_departments(self, employee_order_in_departments: List[
        UserDepartmentSortInfo]) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.employee_order_in_departments = employee_order_in_departments
        return self

    def user_department_path(self, user_department_path: Dict[str, List[str]]) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.user_department_path = user_department_path
        return self

    def user_department_path_name(self, user_department_path_name: Dict[str, I18nText]) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.user_department_path_name = user_department_path_name
        return self

    def avatar_key(self, avatar_key: Image) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.avatar_key = avatar_key
        return self

    def background_image_key(self, background_image_key: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.background_image_key = background_image_key
        return self

    def description(self, description: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.description = description
        return self

    def is_set_custom_background_image(self, is_set_custom_background_image: bool) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.is_set_custom_background_image = is_set_custom_background_image
        return self

    def active_status(self, active_status: int) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.active_status = active_status
        return self

    def is_resigned(self, is_resigned: bool) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.is_resigned = is_resigned
        return self

    def leader_id(self, leader_id: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.leader_id = leader_id
        return self

    def dotted_line_leader_ids(self, dotted_line_leader_ids: List[str]) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.dotted_line_leader_ids = dotted_line_leader_ids
        return self

    def is_primary_admin(self, is_primary_admin: bool) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.is_primary_admin = is_primary_admin
        return self

    def create_time(self, create_time: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.create_time = create_time
        return self

    def update_time(self, update_time: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.update_time = update_time
        return self

    def enterprise_email_aliases(self, enterprise_email_aliases: List[str]) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.enterprise_email_aliases = enterprise_email_aliases
        return self

    def custom_field_values(self, custom_field_values: List[CustomFieldValue]) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.custom_field_values = custom_field_values
        return self

    def description_flag(self, description_flag: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.description_flag = description_flag
        return self

    def work_status(self, work_status: WorkStatus) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.work_status = work_status
        return self

    def has_been_resurrected(self, has_been_resurrected: bool) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.has_been_resurrected = has_been_resurrected
        return self

    def during_resign_cooling_off_period(self, during_resign_cooling_off_period: bool) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.during_resign_cooling_off_period = during_resign_cooling_off_period
        return self

    def is_set_custom_avatar(self, is_set_custom_avatar: bool) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.is_set_custom_avatar = is_set_custom_avatar
        return self

    def is_registered(self, is_registered: bool) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.is_registered = is_registered
        return self

    def department_path_infos(self, department_path_infos: List[list]) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.department_path_infos = department_path_infos
        return self

    def resign_time(self, resign_time: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.resign_time = resign_time
        return self

    def resigned_user_department_path(self, resigned_user_department_path: Dict[
        str, List[str]]) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.resigned_user_department_path = resigned_user_department_path
        return self

    def resigned_user_department_path_name(self, resigned_user_department_path_name: Dict[
        str, I18nText]) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.resigned_user_department_path_name = resigned_user_department_path_name
        return self

    def resigned_departments(self, resigned_departments: List[Department]) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.resigned_departments = resigned_departments
        return self

    def avatar(self, avatar: ImageLink) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.avatar = avatar
        return self

    def background_image(self, background_image: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.background_image = background_image
        return self

    def is_admin(self, is_admin: bool) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.is_admin = is_admin
        return self

    def data_source(self, data_source: int) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.data_source = data_source
        return self

    def geo_name(self, geo_name: str) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.geo_name = geo_name
        return self

    def subscription_ids(self, subscription_ids: List[str]) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.subscription_ids = subscription_ids
        return self

    def virtual_org_infos(self, virtual_org_infos: List[UserVirtualOrgInfo]) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.virtual_org_infos = virtual_org_infos
        return self

    def is_forbidden_delete_employee(self, is_forbidden_delete_employee: bool) -> "EmployeeBaseEntityBuilder":
        self._employee_base_entity.is_forbidden_delete_employee = is_forbidden_delete_employee
        return self

    def build(self) -> "EmployeeBaseEntity":
        return self._employee_base_entity
