# 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 .job_data_cost_center import JobDataCostCenter
from .object_field_data import ObjectFieldData
from .prehire_seniority_adjust_information import PrehireSeniorityAdjustInformation
from .notice_period_detail import NoticePeriodDetail
from .notice_period_detail import NoticePeriodDetail
from .notice_period_detail import NoticePeriodDetail
from .notice_period_detail import NoticePeriodDetail
from .prehire_default_cost_center_update import PrehireDefaultCostCenterUpdate
from .cost_allocation import CostAllocation


class OfferInfo(object):
    _types = {
        "offer_id": str,
        "offer": str,
        "offer_hr_id": str,
        "department_id": str,
        "direct_leader_id": str,
        "dotted_line_manager_id": str,
        "job_id": str,
        "job_family_id": str,
        "job_level_id": str,
        "job_title": str,
        "probation_start_date": str,
        "probation_end_date": str,
        "contract_start_date": str,
        "contract_end_date": str,
        "duration_period": float,
        "duration_unit": str,
        "onboarding_date": str,
        "onboarding_location_id": str,
        "office_location_id": str,
        "recruitment_type_id": str,
        "probation_period": str,
        "employee_type_id": str,
        "employee_subtype_id": str,
        "employment_type_id": str,
        "work_email": str,
        "duration_type_id": str,
        "signing_type_id": str,
        "entry_mode": str,
        "social_security_city_id": str,
        "contract_type": str,
        "company": str,
        "cost_center_rate": List[JobDataCostCenter],
        "job_grade_id": str,
        "custom_fields": List[ObjectFieldData],
        "service_company": str,
        "work_shift": str,
        "compensation_type": str,
        "work_location_id": str,
        "onboarding_address_id": str,
        "office_address_id": str,
        "position_id": str,
        "working_calendar_id": str,
        "working_hours_type": str,
        "pay_group_id": str,
        "flow_id": str,
        "check_in_time": str,
        "check_in_method": str,
        "seniority_date": str,
        "seniority_adjust_information_list": List[PrehireSeniorityAdjustInformation],
        "notice_period_probation_voluntary": NoticePeriodDetail,
        "notice_period_probation_involuntary": NoticePeriodDetail,
        "notice_period_positive_voluntary": NoticePeriodDetail,
        "notice_period_positive_involuntary": NoticePeriodDetail,
        "condition_worker": bool,
        "non_compete_covenant": bool,
        "company_sponsored_visa": bool,
        "has_offer_salary": bool,
        "work_station": str,
        "pathway": str,
        "default_cost_center": PrehireDefaultCostCenterUpdate,
        "cost_allocation": CostAllocation,
        "talent_id": str,
        "reuse_feishu_account": str,
        "reused_feishu_account_id": str,
    }

    def __init__(self, d=None):
        self.offer_id: Optional[str] = None
        self.offer: Optional[str] = None
        self.offer_hr_id: Optional[str] = None
        self.department_id: Optional[str] = None
        self.direct_leader_id: Optional[str] = None
        self.dotted_line_manager_id: Optional[str] = None
        self.job_id: Optional[str] = None
        self.job_family_id: Optional[str] = None
        self.job_level_id: Optional[str] = None
        self.job_title: Optional[str] = None
        self.probation_start_date: Optional[str] = None
        self.probation_end_date: Optional[str] = None
        self.contract_start_date: Optional[str] = None
        self.contract_end_date: Optional[str] = None
        self.duration_period: Optional[float] = None
        self.duration_unit: Optional[str] = None
        self.onboarding_date: Optional[str] = None
        self.onboarding_location_id: Optional[str] = None
        self.office_location_id: Optional[str] = None
        self.recruitment_type_id: Optional[str] = None
        self.probation_period: Optional[str] = None
        self.employee_type_id: Optional[str] = None
        self.employee_subtype_id: Optional[str] = None
        self.employment_type_id: Optional[str] = None
        self.work_email: Optional[str] = None
        self.duration_type_id: Optional[str] = None
        self.signing_type_id: Optional[str] = None
        self.entry_mode: Optional[str] = None
        self.social_security_city_id: Optional[str] = None
        self.contract_type: Optional[str] = None
        self.company: Optional[str] = None
        self.cost_center_rate: Optional[List[JobDataCostCenter]] = None
        self.job_grade_id: Optional[str] = None
        self.custom_fields: Optional[List[ObjectFieldData]] = None
        self.service_company: Optional[str] = None
        self.work_shift: Optional[str] = None
        self.compensation_type: Optional[str] = None
        self.work_location_id: Optional[str] = None
        self.onboarding_address_id: Optional[str] = None
        self.office_address_id: Optional[str] = None
        self.position_id: Optional[str] = None
        self.working_calendar_id: Optional[str] = None
        self.working_hours_type: Optional[str] = None
        self.pay_group_id: Optional[str] = None
        self.flow_id: Optional[str] = None
        self.check_in_time: Optional[str] = None
        self.check_in_method: Optional[str] = None
        self.seniority_date: Optional[str] = None
        self.seniority_adjust_information_list: Optional[List[PrehireSeniorityAdjustInformation]] = None
        self.notice_period_probation_voluntary: Optional[NoticePeriodDetail] = None
        self.notice_period_probation_involuntary: Optional[NoticePeriodDetail] = None
        self.notice_period_positive_voluntary: Optional[NoticePeriodDetail] = None
        self.notice_period_positive_involuntary: Optional[NoticePeriodDetail] = None
        self.condition_worker: Optional[bool] = None
        self.non_compete_covenant: Optional[bool] = None
        self.company_sponsored_visa: Optional[bool] = None
        self.has_offer_salary: Optional[bool] = None
        self.work_station: Optional[str] = None
        self.pathway: Optional[str] = None
        self.default_cost_center: Optional[PrehireDefaultCostCenterUpdate] = None
        self.cost_allocation: Optional[CostAllocation] = None
        self.talent_id: Optional[str] = None
        self.reuse_feishu_account: Optional[str] = None
        self.reused_feishu_account_id: Optional[str] = None
        init(self, d, self._types)

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


class OfferInfoBuilder(object):
    def __init__(self) -> None:
        self._offer_info = OfferInfo()

    def offer_id(self, offer_id: str) -> "OfferInfoBuilder":
        self._offer_info.offer_id = offer_id
        return self

    def offer(self, offer: str) -> "OfferInfoBuilder":
        self._offer_info.offer = offer
        return self

    def offer_hr_id(self, offer_hr_id: str) -> "OfferInfoBuilder":
        self._offer_info.offer_hr_id = offer_hr_id
        return self

    def department_id(self, department_id: str) -> "OfferInfoBuilder":
        self._offer_info.department_id = department_id
        return self

    def direct_leader_id(self, direct_leader_id: str) -> "OfferInfoBuilder":
        self._offer_info.direct_leader_id = direct_leader_id
        return self

    def dotted_line_manager_id(self, dotted_line_manager_id: str) -> "OfferInfoBuilder":
        self._offer_info.dotted_line_manager_id = dotted_line_manager_id
        return self

    def job_id(self, job_id: str) -> "OfferInfoBuilder":
        self._offer_info.job_id = job_id
        return self

    def job_family_id(self, job_family_id: str) -> "OfferInfoBuilder":
        self._offer_info.job_family_id = job_family_id
        return self

    def job_level_id(self, job_level_id: str) -> "OfferInfoBuilder":
        self._offer_info.job_level_id = job_level_id
        return self

    def job_title(self, job_title: str) -> "OfferInfoBuilder":
        self._offer_info.job_title = job_title
        return self

    def probation_start_date(self, probation_start_date: str) -> "OfferInfoBuilder":
        self._offer_info.probation_start_date = probation_start_date
        return self

    def probation_end_date(self, probation_end_date: str) -> "OfferInfoBuilder":
        self._offer_info.probation_end_date = probation_end_date
        return self

    def contract_start_date(self, contract_start_date: str) -> "OfferInfoBuilder":
        self._offer_info.contract_start_date = contract_start_date
        return self

    def contract_end_date(self, contract_end_date: str) -> "OfferInfoBuilder":
        self._offer_info.contract_end_date = contract_end_date
        return self

    def duration_period(self, duration_period: float) -> "OfferInfoBuilder":
        self._offer_info.duration_period = duration_period
        return self

    def duration_unit(self, duration_unit: str) -> "OfferInfoBuilder":
        self._offer_info.duration_unit = duration_unit
        return self

    def onboarding_date(self, onboarding_date: str) -> "OfferInfoBuilder":
        self._offer_info.onboarding_date = onboarding_date
        return self

    def onboarding_location_id(self, onboarding_location_id: str) -> "OfferInfoBuilder":
        self._offer_info.onboarding_location_id = onboarding_location_id
        return self

    def office_location_id(self, office_location_id: str) -> "OfferInfoBuilder":
        self._offer_info.office_location_id = office_location_id
        return self

    def recruitment_type_id(self, recruitment_type_id: str) -> "OfferInfoBuilder":
        self._offer_info.recruitment_type_id = recruitment_type_id
        return self

    def probation_period(self, probation_period: str) -> "OfferInfoBuilder":
        self._offer_info.probation_period = probation_period
        return self

    def employee_type_id(self, employee_type_id: str) -> "OfferInfoBuilder":
        self._offer_info.employee_type_id = employee_type_id
        return self

    def employee_subtype_id(self, employee_subtype_id: str) -> "OfferInfoBuilder":
        self._offer_info.employee_subtype_id = employee_subtype_id
        return self

    def employment_type_id(self, employment_type_id: str) -> "OfferInfoBuilder":
        self._offer_info.employment_type_id = employment_type_id
        return self

    def work_email(self, work_email: str) -> "OfferInfoBuilder":
        self._offer_info.work_email = work_email
        return self

    def duration_type_id(self, duration_type_id: str) -> "OfferInfoBuilder":
        self._offer_info.duration_type_id = duration_type_id
        return self

    def signing_type_id(self, signing_type_id: str) -> "OfferInfoBuilder":
        self._offer_info.signing_type_id = signing_type_id
        return self

    def entry_mode(self, entry_mode: str) -> "OfferInfoBuilder":
        self._offer_info.entry_mode = entry_mode
        return self

    def social_security_city_id(self, social_security_city_id: str) -> "OfferInfoBuilder":
        self._offer_info.social_security_city_id = social_security_city_id
        return self

    def contract_type(self, contract_type: str) -> "OfferInfoBuilder":
        self._offer_info.contract_type = contract_type
        return self

    def company(self, company: str) -> "OfferInfoBuilder":
        self._offer_info.company = company
        return self

    def cost_center_rate(self, cost_center_rate: List[JobDataCostCenter]) -> "OfferInfoBuilder":
        self._offer_info.cost_center_rate = cost_center_rate
        return self

    def job_grade_id(self, job_grade_id: str) -> "OfferInfoBuilder":
        self._offer_info.job_grade_id = job_grade_id
        return self

    def custom_fields(self, custom_fields: List[ObjectFieldData]) -> "OfferInfoBuilder":
        self._offer_info.custom_fields = custom_fields
        return self

    def service_company(self, service_company: str) -> "OfferInfoBuilder":
        self._offer_info.service_company = service_company
        return self

    def work_shift(self, work_shift: str) -> "OfferInfoBuilder":
        self._offer_info.work_shift = work_shift
        return self

    def compensation_type(self, compensation_type: str) -> "OfferInfoBuilder":
        self._offer_info.compensation_type = compensation_type
        return self

    def work_location_id(self, work_location_id: str) -> "OfferInfoBuilder":
        self._offer_info.work_location_id = work_location_id
        return self

    def onboarding_address_id(self, onboarding_address_id: str) -> "OfferInfoBuilder":
        self._offer_info.onboarding_address_id = onboarding_address_id
        return self

    def office_address_id(self, office_address_id: str) -> "OfferInfoBuilder":
        self._offer_info.office_address_id = office_address_id
        return self

    def position_id(self, position_id: str) -> "OfferInfoBuilder":
        self._offer_info.position_id = position_id
        return self

    def working_calendar_id(self, working_calendar_id: str) -> "OfferInfoBuilder":
        self._offer_info.working_calendar_id = working_calendar_id
        return self

    def working_hours_type(self, working_hours_type: str) -> "OfferInfoBuilder":
        self._offer_info.working_hours_type = working_hours_type
        return self

    def pay_group_id(self, pay_group_id: str) -> "OfferInfoBuilder":
        self._offer_info.pay_group_id = pay_group_id
        return self

    def flow_id(self, flow_id: str) -> "OfferInfoBuilder":
        self._offer_info.flow_id = flow_id
        return self

    def check_in_time(self, check_in_time: str) -> "OfferInfoBuilder":
        self._offer_info.check_in_time = check_in_time
        return self

    def check_in_method(self, check_in_method: str) -> "OfferInfoBuilder":
        self._offer_info.check_in_method = check_in_method
        return self

    def seniority_date(self, seniority_date: str) -> "OfferInfoBuilder":
        self._offer_info.seniority_date = seniority_date
        return self

    def seniority_adjust_information_list(self, seniority_adjust_information_list: List[
        PrehireSeniorityAdjustInformation]) -> "OfferInfoBuilder":
        self._offer_info.seniority_adjust_information_list = seniority_adjust_information_list
        return self

    def notice_period_probation_voluntary(self,
                                          notice_period_probation_voluntary: NoticePeriodDetail) -> "OfferInfoBuilder":
        self._offer_info.notice_period_probation_voluntary = notice_period_probation_voluntary
        return self

    def notice_period_probation_involuntary(self,
                                            notice_period_probation_involuntary: NoticePeriodDetail) -> "OfferInfoBuilder":
        self._offer_info.notice_period_probation_involuntary = notice_period_probation_involuntary
        return self

    def notice_period_positive_voluntary(self,
                                         notice_period_positive_voluntary: NoticePeriodDetail) -> "OfferInfoBuilder":
        self._offer_info.notice_period_positive_voluntary = notice_period_positive_voluntary
        return self

    def notice_period_positive_involuntary(self,
                                           notice_period_positive_involuntary: NoticePeriodDetail) -> "OfferInfoBuilder":
        self._offer_info.notice_period_positive_involuntary = notice_period_positive_involuntary
        return self

    def condition_worker(self, condition_worker: bool) -> "OfferInfoBuilder":
        self._offer_info.condition_worker = condition_worker
        return self

    def non_compete_covenant(self, non_compete_covenant: bool) -> "OfferInfoBuilder":
        self._offer_info.non_compete_covenant = non_compete_covenant
        return self

    def company_sponsored_visa(self, company_sponsored_visa: bool) -> "OfferInfoBuilder":
        self._offer_info.company_sponsored_visa = company_sponsored_visa
        return self

    def has_offer_salary(self, has_offer_salary: bool) -> "OfferInfoBuilder":
        self._offer_info.has_offer_salary = has_offer_salary
        return self

    def work_station(self, work_station: str) -> "OfferInfoBuilder":
        self._offer_info.work_station = work_station
        return self

    def pathway(self, pathway: str) -> "OfferInfoBuilder":
        self._offer_info.pathway = pathway
        return self

    def default_cost_center(self, default_cost_center: PrehireDefaultCostCenterUpdate) -> "OfferInfoBuilder":
        self._offer_info.default_cost_center = default_cost_center
        return self

    def cost_allocation(self, cost_allocation: CostAllocation) -> "OfferInfoBuilder":
        self._offer_info.cost_allocation = cost_allocation
        return self

    def talent_id(self, talent_id: str) -> "OfferInfoBuilder":
        self._offer_info.talent_id = talent_id
        return self

    def reuse_feishu_account(self, reuse_feishu_account: str) -> "OfferInfoBuilder":
        self._offer_info.reuse_feishu_account = reuse_feishu_account
        return self

    def reused_feishu_account_id(self, reused_feishu_account_id: str) -> "OfferInfoBuilder":
        self._offer_info.reused_feishu_account_id = reused_feishu_account_id
        return self

    def build(self) -> "OfferInfo":
        return self._offer_info
