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

from __future__ import annotations
from .utils.json_map import JsonMap
from .base import BaseModel
from .policies_dto import PoliciesDto
from .price_data_dto_list_charge_dto import PriceDataDtoListChargeDto
from .deal_dto import DealDto


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

    :param id_: Unique ID of the product., defaults to None
    :type id_: str, optional
    :param policies: The policies for this product., defaults to None
    :type policies: PoliciesDto, optional
    :param price: The price components of this product or selection of products. 'base' and 'extra_charges' are returned only when explicitly requested (via 'extras=extra_charges'). , defaults to None
    :type price: PriceDataDtoListChargeDto, optional
    :param deal: This specifies the deal tagging for the product., defaults to None
    :type deal: DealDto, optional
    """

    def __init__(
        self,
        id_: str = None,
        policies: PoliciesDto = None,
        price: PriceDataDtoListChargeDto = None,
        deal: DealDto = None,
    ):
        if id_ is not None:
            self.id_ = id_
        if policies is not None:
            self.policies = self._define_object(policies, PoliciesDto)
        if price is not None:
            self.price = self._define_object(price, PriceDataDtoListChargeDto)
        if deal is not None:
            self.deal = self._define_object(deal, DealDto)
