# 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 .object_field_data import ObjectFieldData


class EmployeesInternationalAssignmentReq(object):
    _types = {
        "work_location_id": str,
        "service_company": str,
        "work_shift": str,
        "weekly_working_hours_v2": float,
        "working_hours_type_id": str,
        "employee_type_id": str,
        "department_id": str,
        "job_id": str,
        "job_family_id": str,
        "job_level_id": str,
        "job_grade_id": str,
        "compensation_type": str,
        "direct_manager_id": str,
        "dotted_line_manager_id": str,
        "work_calendar_id": str,
        "position_id": str,
        "employment_id": str,
        "custom_fields": List[ObjectFieldData],
        "international_assignment_reason": str,
        "description": str,
        "international_assignment_expected_end_date": str,
        "international_assignment_type": str,
        "effective_time": str,
        "expiration_time": str,
    }

    def __init__(self, d=None):
        self.work_location_id: Optional[str] = None
        self.service_company: Optional[str] = None
        self.work_shift: Optional[str] = None
        self.weekly_working_hours_v2: Optional[float] = None
        self.working_hours_type_id: Optional[str] = None
        self.employee_type_id: Optional[str] = None
        self.department_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_grade_id: Optional[str] = None
        self.compensation_type: Optional[str] = None
        self.direct_manager_id: Optional[str] = None
        self.dotted_line_manager_id: Optional[str] = None
        self.work_calendar_id: Optional[str] = None
        self.position_id: Optional[str] = None
        self.employment_id: Optional[str] = None
        self.custom_fields: Optional[List[ObjectFieldData]] = None
        self.international_assignment_reason: Optional[str] = None
        self.description: Optional[str] = None
        self.international_assignment_expected_end_date: Optional[str] = None
        self.international_assignment_type: Optional[str] = None
        self.effective_time: Optional[str] = None
        self.expiration_time: Optional[str] = None
        init(self, d, self._types)

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


class EmployeesInternationalAssignmentReqBuilder(object):
    def __init__(self) -> None:
        self._employees_international_assignment_req = EmployeesInternationalAssignmentReq()

    def work_location_id(self, work_location_id: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.work_location_id = work_location_id
        return self

    def service_company(self, service_company: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.service_company = service_company
        return self

    def work_shift(self, work_shift: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.work_shift = work_shift
        return self

    def weekly_working_hours_v2(self, weekly_working_hours_v2: float) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.weekly_working_hours_v2 = weekly_working_hours_v2
        return self

    def working_hours_type_id(self, working_hours_type_id: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.working_hours_type_id = working_hours_type_id
        return self

    def employee_type_id(self, employee_type_id: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.employee_type_id = employee_type_id
        return self

    def department_id(self, department_id: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.department_id = department_id
        return self

    def job_id(self, job_id: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.job_id = job_id
        return self

    def job_family_id(self, job_family_id: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.job_family_id = job_family_id
        return self

    def job_level_id(self, job_level_id: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.job_level_id = job_level_id
        return self

    def job_grade_id(self, job_grade_id: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.job_grade_id = job_grade_id
        return self

    def compensation_type(self, compensation_type: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.compensation_type = compensation_type
        return self

    def direct_manager_id(self, direct_manager_id: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.direct_manager_id = direct_manager_id
        return self

    def dotted_line_manager_id(self, dotted_line_manager_id: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.dotted_line_manager_id = dotted_line_manager_id
        return self

    def work_calendar_id(self, work_calendar_id: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.work_calendar_id = work_calendar_id
        return self

    def position_id(self, position_id: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.position_id = position_id
        return self

    def employment_id(self, employment_id: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.employment_id = employment_id
        return self

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

    def international_assignment_reason(self,
                                        international_assignment_reason: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.international_assignment_reason = international_assignment_reason
        return self

    def description(self, description: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.description = description
        return self

    def international_assignment_expected_end_date(self,
                                                   international_assignment_expected_end_date: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.international_assignment_expected_end_date = international_assignment_expected_end_date
        return self

    def international_assignment_type(self,
                                      international_assignment_type: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.international_assignment_type = international_assignment_type
        return self

    def effective_time(self, effective_time: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.effective_time = effective_time
        return self

    def expiration_time(self, expiration_time: str) -> "EmployeesInternationalAssignmentReqBuilder":
        self._employees_international_assignment_req.expiration_time = expiration_time
        return self

    def build(self) -> "EmployeesInternationalAssignmentReq":
        return self._employees_international_assignment_req
