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

from typing import List
from .utils.json_map import JsonMap
from .base import BaseModel


@JsonMap({})
class Costs(BaseModel):
    """Costs

    :param name: The name of the cost item., defaults to None
    :type name: str, optional
    :param amount: The amount or price of the cost item., defaults to None
    :type amount: str, optional
    :param frequency: The frequency that the cost item must be paid., defaults to None
    :type frequency: str, optional
    :param country: The country that the cost item is associated with., defaults to None
    :type country: str, optional
    :param country_code: The country code for the country that the cost item is associated with., defaults to None
    :type country_code: str, optional
    """

    def __init__(
        self,
        name: str = None,
        amount: str = None,
        frequency: str = None,
        country: str = None,
        country_code: str = None,
    ):
        if name is not None:
            self.name = name
        if amount is not None:
            self.amount = amount
        if frequency is not None:
            self.frequency = frequency
        if country is not None:
            self.country = country
        if country_code is not None:
            self.country_code = country_code


@JsonMap({})
class AdditionalData(BaseModel):
    """Textual notes describing important additional data regarding the employement process or costs.

    :param additional_notes: additional_notes, defaults to None
    :type additional_notes: List[str], optional
    """

    def __init__(self, additional_notes: List[str] = None):
        if additional_notes is not None:
            self.additional_notes = additional_notes


@JsonMap({})
class BenefitsData(BaseModel):
    """BenefitsData

    :param name: The name of the benefit item., defaults to None
    :type name: str, optional
    :param plan: The name of the benefit plan., defaults to None
    :type plan: str, optional
    :param fee_amount: The amount or price of the fee associated with the benefit item., defaults to None
    :type fee_amount: str, optional
    :param amount: The amount or price of the benefit item., defaults to None
    :type amount: str, optional
    """

    def __init__(
        self,
        name: str = None,
        plan: str = None,
        fee_amount: str = None,
        amount: str = None,
    ):
        if name is not None:
            self.name = name
        if plan is not None:
            self.plan = plan
        if fee_amount is not None:
            self.fee_amount = fee_amount
        if amount is not None:
            self.amount = amount


@JsonMap({})
class EorEmployeeCostCalculationResponseContainer(BaseModel):
    """EorEmployeeCostCalculationResponseContainer

    :param salary: The gross annual salary of the employee., defaults to None
    :type salary: str, optional
    :param currency: The currency of the employee salary., defaults to None
    :type currency: str, optional
    :param country: The country of employment., defaults to None
    :type country: str, optional
    :param country_code: The country code for the country of employment., defaults to None
    :type country_code: str, optional
    :param frequency: The frequency that the salary is paid out to the employee., defaults to None
    :type frequency: str, optional
    :param deel_fee: The monthly Deel fee., defaults to None
    :type deel_fee: str, optional
    :param severance_accural: Monthly funds to cover future potential severance payments to the employee., defaults to None
    :type severance_accural: str, optional
    :param total_costs: Total monthly cost including salary, Deel fee, severance accrual and employer costs., defaults to None
    :type total_costs: str, optional
    :param employer_costs: Total monthly employer costs. Does not include Deel fee, salary and severance accrual., defaults to None
    :type employer_costs: str, optional
    :param costs: The various costs associated with employment in the specified country., defaults to None
    :type costs: List[Costs], optional
    :param additional_data: Textual notes describing important additional data regarding the employement process or costs., defaults to None
    :type additional_data: AdditionalData, optional
    :param benefits_data: The various benefits costs involved in the calculation, if any., defaults to None
    :type benefits_data: List[BenefitsData], optional
    """

    def __init__(
        self,
        salary: str = None,
        currency: str = None,
        country: str = None,
        country_code: str = None,
        frequency: str = None,
        deel_fee: str = None,
        severance_accural: str = None,
        total_costs: str = None,
        employer_costs: str = None,
        costs: List[Costs] = None,
        additional_data: AdditionalData = None,
        benefits_data: List[BenefitsData] = None,
    ):
        if salary is not None:
            self.salary = salary
        if currency is not None:
            self.currency = currency
        if country is not None:
            self.country = country
        if country_code is not None:
            self.country_code = country_code
        if frequency is not None:
            self.frequency = frequency
        if deel_fee is not None:
            self.deel_fee = deel_fee
        if severance_accural is not None:
            self.severance_accural = severance_accural
        if total_costs is not None:
            self.total_costs = total_costs
        if employer_costs is not None:
            self.employer_costs = employer_costs
        if costs is not None:
            self.costs = self._define_list(costs, Costs)
        if additional_data is not None:
            self.additional_data = self._define_object(additional_data, AdditionalData)
        if benefits_data is not None:
            self.benefits_data = self._define_list(benefits_data, BenefitsData)
