# 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 .manager import Manager
from .job import Job
from .job_level import JobLevel
from .work_location import WorkLocation
from .native_region import NativeRegion
from .contract_company import ContractCompany
from .emergency_contact import EmergencyContact
from .emergency_contact import EmergencyContact
from .education import Education
from .education import Education
from .work_experience import WorkExperience
from .work_experience import WorkExperience
from .attachment import Attachment
from .attachment import Attachment
from .attachment import Attachment
from .attachment import Attachment
from .attachment import Attachment
from .attachment import Attachment
from .attachment import Attachment


class SystemFields(object):
    _types = {
        "name": str,
        "en_name": str,
        "email": str,
        "mobile": str,
        "department_id": str,
        "manager": Manager,
        "job": Job,
        "job_level": JobLevel,
        "work_location": WorkLocation,
        "gender": int,
        "birthday": str,
        "native_region": NativeRegion,
        "ethnicity": int,
        "marital_status": int,
        "political_status": int,
        "entered_workforce_date": str,
        "id_type": int,
        "id_number": str,
        "hukou_type": int,
        "hukou_location": str,
        "bank_account_number": str,
        "bank_name": str,
        "social_security_account": str,
        "provident_fund_account": str,
        "employee_no": str,
        "employee_type": int,
        "status": int,
        "hire_date": str,
        "probation_months": float,
        "conversion_date": str,
        "application": int,
        "application_status": int,
        "last_day": str,
        "departure_type": int,
        "departure_reason": int,
        "departure_notes": str,
        "contract_company": ContractCompany,
        "contract_type": int,
        "contract_start_date": str,
        "contract_expiration_date": str,
        "contract_sign_times": int,
        "personal_email": str,
        "family_address": str,
        "primary_emergency_contact": EmergencyContact,
        "emergency_contact": List[EmergencyContact],
        "highest_level_of_edu": Education,
        "education": List[Education],
        "former_work_exp": WorkExperience,
        "work_exp": List[WorkExperience],
        "id_photo_po_side": List[Attachment],
        "id_photo_em_side": List[Attachment],
        "id_photo": List[Attachment],
        "diploma_photo": List[Attachment],
        "graduation_cert": List[Attachment],
        "cert_of_merit": List[Attachment],
        "offboarding_file": List[Attachment],
        "cancel_onboarding_reason": int,
        "cancel_onboarding_notes": str,
        "employee_form_status": int,
        "create_time": int,
        "update_time": int,
    }

    def __init__(self, d=None):
        self.name: Optional[str] = None
        self.en_name: Optional[str] = None
        self.email: Optional[str] = None
        self.mobile: Optional[str] = None
        self.department_id: Optional[str] = None
        self.manager: Optional[Manager] = None
        self.job: Optional[Job] = None
        self.job_level: Optional[JobLevel] = None
        self.work_location: Optional[WorkLocation] = None
        self.gender: Optional[int] = None
        self.birthday: Optional[str] = None
        self.native_region: Optional[NativeRegion] = None
        self.ethnicity: Optional[int] = None
        self.marital_status: Optional[int] = None
        self.political_status: Optional[int] = None
        self.entered_workforce_date: Optional[str] = None
        self.id_type: Optional[int] = None
        self.id_number: Optional[str] = None
        self.hukou_type: Optional[int] = None
        self.hukou_location: Optional[str] = None
        self.bank_account_number: Optional[str] = None
        self.bank_name: Optional[str] = None
        self.social_security_account: Optional[str] = None
        self.provident_fund_account: Optional[str] = None
        self.employee_no: Optional[str] = None
        self.employee_type: Optional[int] = None
        self.status: Optional[int] = None
        self.hire_date: Optional[str] = None
        self.probation_months: Optional[float] = None
        self.conversion_date: Optional[str] = None
        self.application: Optional[int] = None
        self.application_status: Optional[int] = None
        self.last_day: Optional[str] = None
        self.departure_type: Optional[int] = None
        self.departure_reason: Optional[int] = None
        self.departure_notes: Optional[str] = None
        self.contract_company: Optional[ContractCompany] = None
        self.contract_type: Optional[int] = None
        self.contract_start_date: Optional[str] = None
        self.contract_expiration_date: Optional[str] = None
        self.contract_sign_times: Optional[int] = None
        self.personal_email: Optional[str] = None
        self.family_address: Optional[str] = None
        self.primary_emergency_contact: Optional[EmergencyContact] = None
        self.emergency_contact: Optional[List[EmergencyContact]] = None
        self.highest_level_of_edu: Optional[Education] = None
        self.education: Optional[List[Education]] = None
        self.former_work_exp: Optional[WorkExperience] = None
        self.work_exp: Optional[List[WorkExperience]] = None
        self.id_photo_po_side: Optional[List[Attachment]] = None
        self.id_photo_em_side: Optional[List[Attachment]] = None
        self.id_photo: Optional[List[Attachment]] = None
        self.diploma_photo: Optional[List[Attachment]] = None
        self.graduation_cert: Optional[List[Attachment]] = None
        self.cert_of_merit: Optional[List[Attachment]] = None
        self.offboarding_file: Optional[List[Attachment]] = None
        self.cancel_onboarding_reason: Optional[int] = None
        self.cancel_onboarding_notes: Optional[str] = None
        self.employee_form_status: Optional[int] = None
        self.create_time: Optional[int] = None
        self.update_time: Optional[int] = None
        init(self, d, self._types)

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


class SystemFieldsBuilder(object):
    def __init__(self) -> None:
        self._system_fields = SystemFields()

    def name(self, name: str) -> "SystemFieldsBuilder":
        self._system_fields.name = name
        return self

    def en_name(self, en_name: str) -> "SystemFieldsBuilder":
        self._system_fields.en_name = en_name
        return self

    def email(self, email: str) -> "SystemFieldsBuilder":
        self._system_fields.email = email
        return self

    def mobile(self, mobile: str) -> "SystemFieldsBuilder":
        self._system_fields.mobile = mobile
        return self

    def department_id(self, department_id: str) -> "SystemFieldsBuilder":
        self._system_fields.department_id = department_id
        return self

    def manager(self, manager: Manager) -> "SystemFieldsBuilder":
        self._system_fields.manager = manager
        return self

    def job(self, job: Job) -> "SystemFieldsBuilder":
        self._system_fields.job = job
        return self

    def job_level(self, job_level: JobLevel) -> "SystemFieldsBuilder":
        self._system_fields.job_level = job_level
        return self

    def work_location(self, work_location: WorkLocation) -> "SystemFieldsBuilder":
        self._system_fields.work_location = work_location
        return self

    def gender(self, gender: int) -> "SystemFieldsBuilder":
        self._system_fields.gender = gender
        return self

    def birthday(self, birthday: str) -> "SystemFieldsBuilder":
        self._system_fields.birthday = birthday
        return self

    def native_region(self, native_region: NativeRegion) -> "SystemFieldsBuilder":
        self._system_fields.native_region = native_region
        return self

    def ethnicity(self, ethnicity: int) -> "SystemFieldsBuilder":
        self._system_fields.ethnicity = ethnicity
        return self

    def marital_status(self, marital_status: int) -> "SystemFieldsBuilder":
        self._system_fields.marital_status = marital_status
        return self

    def political_status(self, political_status: int) -> "SystemFieldsBuilder":
        self._system_fields.political_status = political_status
        return self

    def entered_workforce_date(self, entered_workforce_date: str) -> "SystemFieldsBuilder":
        self._system_fields.entered_workforce_date = entered_workforce_date
        return self

    def id_type(self, id_type: int) -> "SystemFieldsBuilder":
        self._system_fields.id_type = id_type
        return self

    def id_number(self, id_number: str) -> "SystemFieldsBuilder":
        self._system_fields.id_number = id_number
        return self

    def hukou_type(self, hukou_type: int) -> "SystemFieldsBuilder":
        self._system_fields.hukou_type = hukou_type
        return self

    def hukou_location(self, hukou_location: str) -> "SystemFieldsBuilder":
        self._system_fields.hukou_location = hukou_location
        return self

    def bank_account_number(self, bank_account_number: str) -> "SystemFieldsBuilder":
        self._system_fields.bank_account_number = bank_account_number
        return self

    def bank_name(self, bank_name: str) -> "SystemFieldsBuilder":
        self._system_fields.bank_name = bank_name
        return self

    def social_security_account(self, social_security_account: str) -> "SystemFieldsBuilder":
        self._system_fields.social_security_account = social_security_account
        return self

    def provident_fund_account(self, provident_fund_account: str) -> "SystemFieldsBuilder":
        self._system_fields.provident_fund_account = provident_fund_account
        return self

    def employee_no(self, employee_no: str) -> "SystemFieldsBuilder":
        self._system_fields.employee_no = employee_no
        return self

    def employee_type(self, employee_type: int) -> "SystemFieldsBuilder":
        self._system_fields.employee_type = employee_type
        return self

    def status(self, status: int) -> "SystemFieldsBuilder":
        self._system_fields.status = status
        return self

    def hire_date(self, hire_date: str) -> "SystemFieldsBuilder":
        self._system_fields.hire_date = hire_date
        return self

    def probation_months(self, probation_months: float) -> "SystemFieldsBuilder":
        self._system_fields.probation_months = probation_months
        return self

    def conversion_date(self, conversion_date: str) -> "SystemFieldsBuilder":
        self._system_fields.conversion_date = conversion_date
        return self

    def application(self, application: int) -> "SystemFieldsBuilder":
        self._system_fields.application = application
        return self

    def application_status(self, application_status: int) -> "SystemFieldsBuilder":
        self._system_fields.application_status = application_status
        return self

    def last_day(self, last_day: str) -> "SystemFieldsBuilder":
        self._system_fields.last_day = last_day
        return self

    def departure_type(self, departure_type: int) -> "SystemFieldsBuilder":
        self._system_fields.departure_type = departure_type
        return self

    def departure_reason(self, departure_reason: int) -> "SystemFieldsBuilder":
        self._system_fields.departure_reason = departure_reason
        return self

    def departure_notes(self, departure_notes: str) -> "SystemFieldsBuilder":
        self._system_fields.departure_notes = departure_notes
        return self

    def contract_company(self, contract_company: ContractCompany) -> "SystemFieldsBuilder":
        self._system_fields.contract_company = contract_company
        return self

    def contract_type(self, contract_type: int) -> "SystemFieldsBuilder":
        self._system_fields.contract_type = contract_type
        return self

    def contract_start_date(self, contract_start_date: str) -> "SystemFieldsBuilder":
        self._system_fields.contract_start_date = contract_start_date
        return self

    def contract_expiration_date(self, contract_expiration_date: str) -> "SystemFieldsBuilder":
        self._system_fields.contract_expiration_date = contract_expiration_date
        return self

    def contract_sign_times(self, contract_sign_times: int) -> "SystemFieldsBuilder":
        self._system_fields.contract_sign_times = contract_sign_times
        return self

    def personal_email(self, personal_email: str) -> "SystemFieldsBuilder":
        self._system_fields.personal_email = personal_email
        return self

    def family_address(self, family_address: str) -> "SystemFieldsBuilder":
        self._system_fields.family_address = family_address
        return self

    def primary_emergency_contact(self, primary_emergency_contact: EmergencyContact) -> "SystemFieldsBuilder":
        self._system_fields.primary_emergency_contact = primary_emergency_contact
        return self

    def emergency_contact(self, emergency_contact: List[EmergencyContact]) -> "SystemFieldsBuilder":
        self._system_fields.emergency_contact = emergency_contact
        return self

    def highest_level_of_edu(self, highest_level_of_edu: Education) -> "SystemFieldsBuilder":
        self._system_fields.highest_level_of_edu = highest_level_of_edu
        return self

    def education(self, education: List[Education]) -> "SystemFieldsBuilder":
        self._system_fields.education = education
        return self

    def former_work_exp(self, former_work_exp: WorkExperience) -> "SystemFieldsBuilder":
        self._system_fields.former_work_exp = former_work_exp
        return self

    def work_exp(self, work_exp: List[WorkExperience]) -> "SystemFieldsBuilder":
        self._system_fields.work_exp = work_exp
        return self

    def id_photo_po_side(self, id_photo_po_side: List[Attachment]) -> "SystemFieldsBuilder":
        self._system_fields.id_photo_po_side = id_photo_po_side
        return self

    def id_photo_em_side(self, id_photo_em_side: List[Attachment]) -> "SystemFieldsBuilder":
        self._system_fields.id_photo_em_side = id_photo_em_side
        return self

    def id_photo(self, id_photo: List[Attachment]) -> "SystemFieldsBuilder":
        self._system_fields.id_photo = id_photo
        return self

    def diploma_photo(self, diploma_photo: List[Attachment]) -> "SystemFieldsBuilder":
        self._system_fields.diploma_photo = diploma_photo
        return self

    def graduation_cert(self, graduation_cert: List[Attachment]) -> "SystemFieldsBuilder":
        self._system_fields.graduation_cert = graduation_cert
        return self

    def cert_of_merit(self, cert_of_merit: List[Attachment]) -> "SystemFieldsBuilder":
        self._system_fields.cert_of_merit = cert_of_merit
        return self

    def offboarding_file(self, offboarding_file: List[Attachment]) -> "SystemFieldsBuilder":
        self._system_fields.offboarding_file = offboarding_file
        return self

    def cancel_onboarding_reason(self, cancel_onboarding_reason: int) -> "SystemFieldsBuilder":
        self._system_fields.cancel_onboarding_reason = cancel_onboarding_reason
        return self

    def cancel_onboarding_notes(self, cancel_onboarding_notes: str) -> "SystemFieldsBuilder":
        self._system_fields.cancel_onboarding_notes = cancel_onboarding_notes
        return self

    def employee_form_status(self, employee_form_status: int) -> "SystemFieldsBuilder":
        self._system_fields.employee_form_status = employee_form_status
        return self

    def create_time(self, create_time: int) -> "SystemFieldsBuilder":
        self._system_fields.create_time = create_time
        return self

    def update_time(self, update_time: int) -> "SystemFieldsBuilder":
        self._system_fields.update_time = update_time
        return self

    def build(self) -> "SystemFields":
        return self._system_fields
