# 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 .payment import Payment
from .people_client_legal_entity import PeopleClientLegalEntity
from .monthly_payment import MonthlyPayment
from .employment import Employment


@JsonMap({"id_": "id"})
class InternalPeople(BaseModel):
    """People object representing a Deel

    :param id_: Unique identifier for the user, defaults to None
    :type id_: str, optional
    :param first_name: First name of the user, defaults to None
    :type first_name: str, optional
    :param last_name: Last name of the user, defaults to None
    :type last_name: str, optional
    :param full_name: Full name of the user, defaults to None
    :type full_name: str, optional
    :param email: Email address of the user, defaults to None
    :type email: str, optional
    :param work_email: Work email address of the user, defaults to None
    :type work_email: str, optional
    :param personal_email: Personal email address of the user, defaults to None
    :type personal_email: str, optional
    :param country_name: Name of the country where the user is located, defaults to None
    :type country_name: str, optional
    :param birth_date: Date of birth of the user in ISO format (yyyy-mm-dd), defaults to None
    :type birth_date: str, optional
    :param pic_url: URL of the user's profile picture, defaults to None
    :type pic_url: str, optional
    :param start_date: Date when the user started their current employment in ISO format (yyyy-mm-dd), defaults to None
    :type start_date: str, optional
    :param payments: List of payment objects representing the user's payment history, defaults to None
    :type payments: List[Payment], optional
    :param hourly_report_total: Total amount of hours worked by the user in ISO format (hh:mm:ss), defaults to None
    :type hourly_report_total: str, optional
    :param client_legal_entity: client_legal_entity, defaults to None
    :type client_legal_entity: PeopleClientLegalEntity, optional
    :param state: State where the user is located, defaults to None
    :type state: str, optional
    :param seniority: Seniority level of the user's role, defaults to None
    :type seniority: str, optional
    :param completion_date: Date when the user's current employment is expected to end in ISO format (yyyy-mm-ddThh:mm:ss.sssZ), defaults to None
    :type completion_date: str, optional
    :param monthly_payment: Monthly payment details for the user, defaults to None
    :type monthly_payment: MonthlyPayment, optional
    :param direct_manager: Name of the user's direct manager, defaults to None
    :type direct_manager: str, optional
    :param direct_reports: Names of the user's direct reports, defaults to None
    :type direct_reports: str, optional
    :param direct_reports_count: Number of direct reports that the user has, defaults to None
    :type direct_reports_count: int, optional
    :param employments: List of employment objects representing the user's employment history, defaults to None
    :type employments: List[Employment], optional
    :param hiring_status: Hiring status of the user, defaults to None
    :type hiring_status: str, optional
    :param hiring_type: Type of employment contract that the user has, defaults to None
    :type hiring_type: str, optional
    :param job_title: Title of the user's role, defaults to None
    :type job_title: str, optional
    :param country: ISO 3166-1 alpha-2 code of the country where the user is located, defaults to None
    :type country: str, optional
    :param team_id: Unique identifier for the team that the user belongs to, defaults to None
    :type team_id: int, optional
    :param team: Name of the team that the user belongs to, defaults to None
    :type team: str, optional
    :param timezone: Time zone of the user's location, defaults to None
    :type timezone: str, optional
    :param department: Name of the department that the user belongs to, defaults to None
    :type department: str, optional
    :param work_location: Name of the user's work location, defaults to None
    :type work_location: str, optional
    :param contract_types: List of contract types that the user has had in the past and/or currently has, defaults to None
    :type contract_types: List[str], optional
    :param has_deel_user: Indicates whether the user has a Deel account or not, defaults to None
    :type has_deel_user: bool, optional
    """

    def __init__(
        self,
        id_: str = None,
        first_name: str = None,
        last_name: str = None,
        full_name: str = None,
        email: str = None,
        work_email: str = None,
        personal_email: str = None,
        country_name: str = None,
        birth_date: str = None,
        pic_url: str = None,
        start_date: str = None,
        payments: List[Payment] = None,
        hourly_report_total: str = None,
        client_legal_entity: PeopleClientLegalEntity = None,
        state: str = None,
        seniority: str = None,
        completion_date: str = None,
        monthly_payment: MonthlyPayment = None,
        direct_manager: str = None,
        direct_reports: str = None,
        direct_reports_count: int = None,
        employments: List[Employment] = None,
        hiring_status: str = None,
        hiring_type: str = None,
        job_title: str = None,
        country: str = None,
        team_id: int = None,
        team: str = None,
        timezone: str = None,
        department: str = None,
        work_location: str = None,
        contract_types: List[str] = None,
        has_deel_user: bool = None,
    ):
        if id_ is not None:
            self.id_ = id_
        if first_name is not None:
            self.first_name = first_name
        if last_name is not None:
            self.last_name = last_name
        if full_name is not None:
            self.full_name = full_name
        if email is not None:
            self.email = email
        if work_email is not None:
            self.work_email = work_email
        if personal_email is not None:
            self.personal_email = personal_email
        if country_name is not None:
            self.country_name = country_name
        if birth_date is not None:
            self.birth_date = birth_date
        if pic_url is not None:
            self.pic_url = pic_url
        if start_date is not None:
            self.start_date = start_date
        if payments is not None:
            self.payments = self._define_list(payments, Payment)
        if hourly_report_total is not None:
            self.hourly_report_total = hourly_report_total
        if client_legal_entity is not None:
            self.client_legal_entity = self._define_object(
                client_legal_entity, PeopleClientLegalEntity
            )
        if state is not None:
            self.state = state
        if seniority is not None:
            self.seniority = seniority
        if completion_date is not None:
            self.completion_date = completion_date
        if monthly_payment is not None:
            self.monthly_payment = self._define_object(monthly_payment, MonthlyPayment)
        if direct_manager is not None:
            self.direct_manager = direct_manager
        if direct_reports is not None:
            self.direct_reports = direct_reports
        if direct_reports_count is not None:
            self.direct_reports_count = direct_reports_count
        if employments is not None:
            self.employments = self._define_list(employments, Employment)
        if hiring_status is not None:
            self.hiring_status = hiring_status
        if hiring_type is not None:
            self.hiring_type = hiring_type
        if job_title is not None:
            self.job_title = job_title
        if country is not None:
            self.country = country
        if team_id is not None:
            self.team_id = team_id
        if team is not None:
            self.team = team
        if timezone is not None:
            self.timezone = timezone
        if department is not None:
            self.department = department
        if work_location is not None:
            self.work_location = work_location
        if contract_types is not None:
            self.contract_types = contract_types
        if has_deel_user is not None:
            self.has_deel_user = has_deel_user
