# 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 .i18n_text import I18nText
from .position import Position


class CreateResignedEmployee(object):
    _types = {
        "name": UpsertName,
        "mobile": str,
        "custom_employee_id": str,
        "avatar_key": str,
        "email": str,
        "personal_email": str,
        "gender": int,
        "residential_address": str,
        "contact_addresses": List[ContactAddress],
        "department_ids": List[str],
        "leader_id": str,
        "dotted_line_leader_ids": List[str],
        "work_country_or_region": str,
        "work_place_id": str,
        "work_station": I18nText,
        "job_number": str,
        "join_date": str,
        "employment_type": 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,
    }

    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.gender: Optional[int] = None
        self.residential_address: Optional[str] = None
        self.contact_addresses: Optional[List[ContactAddress]] = None
        self.department_ids: Optional[List[str]] = 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.join_date: Optional[str] = None
        self.employment_type: 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
        init(self, d, self._types)

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


class CreateResignedEmployeeBuilder(object):
    def __init__(self) -> None:
        self._create_resigned_employee = CreateResignedEmployee()

    def name(self, name: UpsertName) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.name = name
        return self

    def mobile(self, mobile: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.mobile = mobile
        return self

    def custom_employee_id(self, custom_employee_id: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.custom_employee_id = custom_employee_id
        return self

    def avatar_key(self, avatar_key: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.avatar_key = avatar_key
        return self

    def email(self, email: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.email = email
        return self

    def personal_email(self, personal_email: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.personal_email = personal_email
        return self

    def gender(self, gender: int) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.gender = gender
        return self

    def residential_address(self, residential_address: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.residential_address = residential_address
        return self

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

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

    def leader_id(self, leader_id: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.leader_id = leader_id
        return self

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

    def work_country_or_region(self, work_country_or_region: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.work_country_or_region = work_country_or_region
        return self

    def work_place_id(self, work_place_id: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.work_place_id = work_place_id
        return self

    def work_station(self, work_station: I18nText) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.work_station = work_station
        return self

    def job_number(self, job_number: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.job_number = job_number
        return self

    def join_date(self, join_date: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.join_date = join_date
        return self

    def employment_type(self, employment_type: int) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.employment_type = employment_type
        return self

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

    def job_title_id(self, job_title_id: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.job_title_id = job_title_id
        return self

    def job_level_id(self, job_level_id: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.job_level_id = job_level_id
        return self

    def job_family_id(self, job_family_id: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.job_family_id = job_family_id
        return self

    def first_work_date(self, first_work_date: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.first_work_date = first_work_date
        return self

    def first_join_date(self, first_join_date: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.first_join_date = first_join_date
        return self

    def probation_period(self, probation_period: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.probation_period = probation_period
        return self

    def regularization_date(self, regularization_date: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.regularization_date = regularization_date
        return self

    def convert_status(self, convert_status: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.convert_status = convert_status
        return self

    def contract_subject(self, contract_subject: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.contract_subject = contract_subject
        return self

    def resign_date(self, resign_date: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.resign_date = resign_date
        return self

    def resign_reason(self, resign_reason: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.resign_reason = resign_reason
        return self

    def resign_remark(self, resign_remark: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.resign_remark = resign_remark
        return self

    def resign_type(self, resign_type: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.resign_type = resign_type
        return self

    def cancelled_entry_type(self, cancelled_entry_type: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.cancelled_entry_type = cancelled_entry_type
        return self

    def cancelled_entry_remark(self, cancelled_entry_remark: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.cancelled_entry_remark = cancelled_entry_remark
        return self

    def birthday(self, birthday: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.birthday = birthday
        return self

    def nationality(self, nationality: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.nationality = nationality
        return self

    def native_place(self, native_place: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.native_place = native_place
        return self

    def ethnicity(self, ethnicity: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.ethnicity = ethnicity
        return self

    def marital_status(self, marital_status: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.marital_status = marital_status
        return self

    def politics_status(self, politics_status: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.politics_status = politics_status
        return self

    def registered_residence_type(self, registered_residence_type: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.registered_residence_type = registered_residence_type
        return self

    def location(self, location: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.location = location
        return self

    def social_security_number(self, social_security_number: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.social_security_number = social_security_number
        return self

    def provident_fund_number(self, provident_fund_number: str) -> "CreateResignedEmployeeBuilder":
        self._create_resigned_employee.provident_fund_number = provident_fund_number
        return self

    def build(self) -> "CreateResignedEmployee":
        return self._create_resigned_employee
