# 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 .upsert_name import UpsertName
from .contact_address import ContactAddress
from .upsert_user_department_sort_info import UpsertUserDepartmentSortInfo
from .i18n_text import I18nText
from .position import Position
from .custom_field_value import CustomFieldValue
from .custom_field_value import CustomFieldValue
from .upsert_user_virtual_org_info import UpsertUserVirtualOrgInfo


class CreateEmployee(object):
    _types = {
        "name": UpsertName,
        "mobile": str,
        "custom_employee_id": str,
        "avatar_key": str,
        "email": str,
        "personal_email": str,
        "enterprise_email": str,
        "gender": int,
        "residential_address": str,
        "contact_addresses": List[ContactAddress],
        "employee_order_in_departments": List[UpsertUserDepartmentSortInfo],
        "leader_id": str,
        "dotted_line_leader_ids": List[str],
        "work_country_or_region": str,
        "work_place_id": str,
        "work_station": I18nText,
        "job_number": str,
        "extension_number": str,
        "join_date": str,
        "employment_type": int,
        "staff_status": int,
        "positions": List[Position],
        "job_title_id": str,
        "job_level_id": str,
        "job_family_id": str,
        "first_work_date": str,
        "first_join_date": str,
        "probation_period": str,
        "regularization_date": str,
        "convert_status": str,
        "contract_subject": str,
        "resign_date": str,
        "resign_reason": str,
        "resign_remark": str,
        "resign_type": str,
        "cancelled_entry_type": str,
        "cancelled_entry_remark": str,
        "birthday": str,
        "nationality": str,
        "native_place": str,
        "ethnicity": str,
        "marital_status": str,
        "politics_status": str,
        "registered_residence_type": str,
        "location": str,
        "social_security_number": str,
        "provident_fund_number": str,
        "custom_field_value_map": Dict[str, CustomFieldValue],
        "custom_field_values": List[CustomFieldValue],
        "virtual_org_infos": List[UpsertUserVirtualOrgInfo],
    }

    def __init__(self, d=None):
        self.name: Optional[UpsertName] = None
        self.mobile: Optional[str] = None
        self.custom_employee_id: Optional[str] = None
        self.avatar_key: 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.employee_order_in_departments: Optional[List[UpsertUserDepartmentSortInfo]] = None
        self.leader_id: Optional[str] = None
        self.dotted_line_leader_ids: Optional[List[str]] = None
        self.work_country_or_region: Optional[str] = None
        self.work_place_id: Optional[str] = None
        self.work_station: Optional[I18nText] = None
        self.job_number: Optional[str] = None
        self.extension_number: Optional[str] = None
        self.join_date: Optional[str] = None
        self.employment_type: Optional[int] = None
        self.staff_status: Optional[int] = None
        self.positions: Optional[List[Position]] = None
        self.job_title_id: Optional[str] = None
        self.job_level_id: Optional[str] = None
        self.job_family_id: Optional[str] = None
        self.first_work_date: Optional[str] = None
        self.first_join_date: Optional[str] = None
        self.probation_period: Optional[str] = None
        self.regularization_date: Optional[str] = None
        self.convert_status: Optional[str] = None
        self.contract_subject: Optional[str] = None
        self.resign_date: Optional[str] = None
        self.resign_reason: Optional[str] = None
        self.resign_remark: Optional[str] = None
        self.resign_type: Optional[str] = None
        self.cancelled_entry_type: Optional[str] = None
        self.cancelled_entry_remark: Optional[str] = None
        self.birthday: Optional[str] = None
        self.nationality: Optional[str] = None
        self.native_place: Optional[str] = None
        self.ethnicity: Optional[str] = None
        self.marital_status: Optional[str] = None
        self.politics_status: Optional[str] = None
        self.registered_residence_type: Optional[str] = None
        self.location: Optional[str] = None
        self.social_security_number: Optional[str] = None
        self.provident_fund_number: Optional[str] = None
        self.custom_field_value_map: Optional[Dict[str, CustomFieldValue]] = None
        self.custom_field_values: Optional[List[CustomFieldValue]] = None
        self.virtual_org_infos: Optional[List[UpsertUserVirtualOrgInfo]] = None
        init(self, d, self._types)

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


class CreateEmployeeBuilder(object):
    def __init__(self) -> None:
        self._create_employee = CreateEmployee()

    def name(self, name: UpsertName) -> "CreateEmployeeBuilder":
        self._create_employee.name = name
        return self

    def mobile(self, mobile: str) -> "CreateEmployeeBuilder":
        self._create_employee.mobile = mobile
        return self

    def custom_employee_id(self, custom_employee_id: str) -> "CreateEmployeeBuilder":
        self._create_employee.custom_employee_id = custom_employee_id
        return self

    def avatar_key(self, avatar_key: str) -> "CreateEmployeeBuilder":
        self._create_employee.avatar_key = avatar_key
        return self

    def email(self, email: str) -> "CreateEmployeeBuilder":
        self._create_employee.email = email
        return self

    def personal_email(self, personal_email: str) -> "CreateEmployeeBuilder":
        self._create_employee.personal_email = personal_email
        return self

    def enterprise_email(self, enterprise_email: str) -> "CreateEmployeeBuilder":
        self._create_employee.enterprise_email = enterprise_email
        return self

    def gender(self, gender: int) -> "CreateEmployeeBuilder":
        self._create_employee.gender = gender
        return self

    def residential_address(self, residential_address: str) -> "CreateEmployeeBuilder":
        self._create_employee.residential_address = residential_address
        return self

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

    def employee_order_in_departments(self, employee_order_in_departments: List[
        UpsertUserDepartmentSortInfo]) -> "CreateEmployeeBuilder":
        self._create_employee.employee_order_in_departments = employee_order_in_departments
        return self

    def leader_id(self, leader_id: str) -> "CreateEmployeeBuilder":
        self._create_employee.leader_id = leader_id
        return self

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

    def work_country_or_region(self, work_country_or_region: str) -> "CreateEmployeeBuilder":
        self._create_employee.work_country_or_region = work_country_or_region
        return self

    def work_place_id(self, work_place_id: str) -> "CreateEmployeeBuilder":
        self._create_employee.work_place_id = work_place_id
        return self

    def work_station(self, work_station: I18nText) -> "CreateEmployeeBuilder":
        self._create_employee.work_station = work_station
        return self

    def job_number(self, job_number: str) -> "CreateEmployeeBuilder":
        self._create_employee.job_number = job_number
        return self

    def extension_number(self, extension_number: str) -> "CreateEmployeeBuilder":
        self._create_employee.extension_number = extension_number
        return self

    def join_date(self, join_date: str) -> "CreateEmployeeBuilder":
        self._create_employee.join_date = join_date
        return self

    def employment_type(self, employment_type: int) -> "CreateEmployeeBuilder":
        self._create_employee.employment_type = employment_type
        return self

    def staff_status(self, staff_status: int) -> "CreateEmployeeBuilder":
        self._create_employee.staff_status = staff_status
        return self

    def positions(self, positions: List[Position]) -> "CreateEmployeeBuilder":
        self._create_employee.positions = positions
        return self

    def job_title_id(self, job_title_id: str) -> "CreateEmployeeBuilder":
        self._create_employee.job_title_id = job_title_id
        return self

    def job_level_id(self, job_level_id: str) -> "CreateEmployeeBuilder":
        self._create_employee.job_level_id = job_level_id
        return self

    def job_family_id(self, job_family_id: str) -> "CreateEmployeeBuilder":
        self._create_employee.job_family_id = job_family_id
        return self

    def first_work_date(self, first_work_date: str) -> "CreateEmployeeBuilder":
        self._create_employee.first_work_date = first_work_date
        return self

    def first_join_date(self, first_join_date: str) -> "CreateEmployeeBuilder":
        self._create_employee.first_join_date = first_join_date
        return self

    def probation_period(self, probation_period: str) -> "CreateEmployeeBuilder":
        self._create_employee.probation_period = probation_period
        return self

    def regularization_date(self, regularization_date: str) -> "CreateEmployeeBuilder":
        self._create_employee.regularization_date = regularization_date
        return self

    def convert_status(self, convert_status: str) -> "CreateEmployeeBuilder":
        self._create_employee.convert_status = convert_status
        return self

    def contract_subject(self, contract_subject: str) -> "CreateEmployeeBuilder":
        self._create_employee.contract_subject = contract_subject
        return self

    def resign_date(self, resign_date: str) -> "CreateEmployeeBuilder":
        self._create_employee.resign_date = resign_date
        return self

    def resign_reason(self, resign_reason: str) -> "CreateEmployeeBuilder":
        self._create_employee.resign_reason = resign_reason
        return self

    def resign_remark(self, resign_remark: str) -> "CreateEmployeeBuilder":
        self._create_employee.resign_remark = resign_remark
        return self

    def resign_type(self, resign_type: str) -> "CreateEmployeeBuilder":
        self._create_employee.resign_type = resign_type
        return self

    def cancelled_entry_type(self, cancelled_entry_type: str) -> "CreateEmployeeBuilder":
        self._create_employee.cancelled_entry_type = cancelled_entry_type
        return self

    def cancelled_entry_remark(self, cancelled_entry_remark: str) -> "CreateEmployeeBuilder":
        self._create_employee.cancelled_entry_remark = cancelled_entry_remark
        return self

    def birthday(self, birthday: str) -> "CreateEmployeeBuilder":
        self._create_employee.birthday = birthday
        return self

    def nationality(self, nationality: str) -> "CreateEmployeeBuilder":
        self._create_employee.nationality = nationality
        return self

    def native_place(self, native_place: str) -> "CreateEmployeeBuilder":
        self._create_employee.native_place = native_place
        return self

    def ethnicity(self, ethnicity: str) -> "CreateEmployeeBuilder":
        self._create_employee.ethnicity = ethnicity
        return self

    def marital_status(self, marital_status: str) -> "CreateEmployeeBuilder":
        self._create_employee.marital_status = marital_status
        return self

    def politics_status(self, politics_status: str) -> "CreateEmployeeBuilder":
        self._create_employee.politics_status = politics_status
        return self

    def registered_residence_type(self, registered_residence_type: str) -> "CreateEmployeeBuilder":
        self._create_employee.registered_residence_type = registered_residence_type
        return self

    def location(self, location: str) -> "CreateEmployeeBuilder":
        self._create_employee.location = location
        return self

    def social_security_number(self, social_security_number: str) -> "CreateEmployeeBuilder":
        self._create_employee.social_security_number = social_security_number
        return self

    def provident_fund_number(self, provident_fund_number: str) -> "CreateEmployeeBuilder":
        self._create_employee.provident_fund_number = provident_fund_number
        return self

    def custom_field_value_map(self, custom_field_value_map: Dict[str, CustomFieldValue]) -> "CreateEmployeeBuilder":
        self._create_employee.custom_field_value_map = custom_field_value_map
        return self

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

    def virtual_org_infos(self, virtual_org_infos: List[UpsertUserVirtualOrgInfo]) -> "CreateEmployeeBuilder":
        self._create_employee.virtual_org_infos = virtual_org_infos
        return self

    def build(self) -> "CreateEmployee":
        return self._create_employee
