# This file was generated by liblab | https://liblab.com/

from __future__ import annotations
from typing import List
from .utils.json_map import JsonMap
from .base import BaseModel
from .people_payment import PeoplePayment
from .people_client_legal_entity import PeopleClientLegalEntity
from .identifier_value import IdentifierValue, IdentifierValueGuard


@JsonMap({"id_": "id"})
class EmploymentDetailTeam(BaseModel):
    """The team to which the employee belongs.

    :param id_: id_, defaults to None
    :type id_: IdentifierValue, optional
    :param name: The team name., defaults to None
    :type name: str, optional
    """

    def __init__(self, id_: IdentifierValue = None, name: str = None):
        if id_ is not None:
            self.id_ = IdentifierValueGuard.return_one_of(id_)
        if name is not None:
            self.name = name


@JsonMap({"id_": "id"})
class EmploymentDetail(BaseModel):
    """EmploymentDetail

    :param id_: Unique identifier for the employment., defaults to None
    :type id_: str, optional
    :param name: Name of the employee., defaults to None
    :type name: str, optional
    :param team: The team to which the employee belongs., defaults to None
    :type team: EmploymentDetailTeam, optional
    :param email: The work email of the employee., defaults to None
    :type email: str, optional
    :param state: The state of employment., defaults to None
    :type state: str, optional
    :param country: The country of employment., defaults to None
    :type country: str, optional
    :param payment: payment, defaults to None
    :type payment: PeoplePayment, optional
    :param is_ended: Whether the employment has ended., defaults to None
    :type is_ended: bool, optional
    :param timezone: The timezone of the employment., defaults to None
    :type timezone: str, optional
    :param job_title: The job title of the employment., defaults to None
    :type job_title: str, optional
    :param seniority: The seniority level of the employment., defaults to None
    :type seniority: str, optional
    :param start_date: The start date of the employment., defaults to None
    :type start_date: str, optional
    :param work_email: The work email of the employment., defaults to None
    :type work_email: str, optional
    :param hiring_type: The type of hiring of the employment., defaults to None
    :type hiring_type: str, optional
    :param hiring_status: The current hiring status of the employment., defaults to None
    :type hiring_status: str, optional
    :param completion_date: The completion date of the employment contract., defaults to None
    :type completion_date: str, optional
    :param contract_status: The status of the employment contract., defaults to None
    :type contract_status: str, optional
    :param voluntarily_left: Whether the employee voluntarily left the employment., defaults to None
    :type voluntarily_left: str, optional
    :param contract_coverage: The coverage of the employment contract., defaults to None
    :type contract_coverage: List[str], optional
    :param new_hiring_status: The new hiring status of the employment., defaults to None
    :type new_hiring_status: str, optional
    :param client_legal_entity: client_legal_entity, defaults to None
    :type client_legal_entity: PeopleClientLegalEntity, optional
    :param has_eor_termination: Whether the employment has an EOR termination., defaults to None
    :type has_eor_termination: str, optional
    :param contract_is_archived: Whether the employment contract is archived., defaults to None
    :type contract_is_archived: bool, optional
    :param contract_has_contractor: Whether the contract has a contractor., defaults to None
    :type contract_has_contractor: bool, optional
    :param is_user_contract_deleted: Whether the user contract is deleted., defaults to None
    :type is_user_contract_deleted: bool, optional
    :param hris_direct_employee_invitation: The HRIS direct employee invitation status., defaults to None
    :type hris_direct_employee_invitation: str, optional
    """

    def __init__(
        self,
        id_: str = None,
        name: str = None,
        team: EmploymentDetailTeam = None,
        email: str = None,
        state: str = None,
        country: str = None,
        payment: PeoplePayment = None,
        is_ended: bool = None,
        timezone: str = None,
        job_title: str = None,
        seniority: str = None,
        start_date: str = None,
        work_email: str = None,
        hiring_type: str = None,
        hiring_status: str = None,
        completion_date: str = None,
        contract_status: str = None,
        voluntarily_left: str = None,
        contract_coverage: List[str] = None,
        new_hiring_status: str = None,
        client_legal_entity: PeopleClientLegalEntity = None,
        has_eor_termination: str = None,
        contract_is_archived: bool = None,
        contract_has_contractor: bool = None,
        is_user_contract_deleted: bool = None,
        hris_direct_employee_invitation: str = None,
    ):
        if id_ is not None:
            self.id_ = id_
        if name is not None:
            self.name = name
        if team is not None:
            self.team = self._define_object(team, EmploymentDetailTeam)
        if email is not None:
            self.email = email
        if state is not None:
            self.state = state
        if country is not None:
            self.country = country
        if payment is not None:
            self.payment = self._define_object(payment, PeoplePayment)
        if is_ended is not None:
            self.is_ended = is_ended
        if timezone is not None:
            self.timezone = timezone
        if job_title is not None:
            self.job_title = job_title
        if seniority is not None:
            self.seniority = seniority
        if start_date is not None:
            self.start_date = start_date
        if work_email is not None:
            self.work_email = work_email
        if hiring_type is not None:
            self.hiring_type = hiring_type
        if hiring_status is not None:
            self.hiring_status = hiring_status
        if completion_date is not None:
            self.completion_date = completion_date
        if contract_status is not None:
            self.contract_status = contract_status
        if voluntarily_left is not None:
            self.voluntarily_left = voluntarily_left
        if contract_coverage is not None:
            self.contract_coverage = contract_coverage
        if new_hiring_status is not None:
            self.new_hiring_status = new_hiring_status
        if client_legal_entity is not None:
            self.client_legal_entity = self._define_object(
                client_legal_entity, PeopleClientLegalEntity
            )
        if has_eor_termination is not None:
            self.has_eor_termination = has_eor_termination
        if contract_is_archived is not None:
            self.contract_is_archived = contract_is_archived
        if contract_has_contractor is not None:
            self.contract_has_contractor = contract_has_contractor
        if is_user_contract_deleted is not None:
            self.is_user_contract_deleted = is_user_contract_deleted
        if hris_direct_employee_invitation is not None:
            self.hris_direct_employee_invitation = hris_direct_employee_invitation
