# coding: utf-8

"""
    IDX API

    Welcome to the IDX API.  # noqa: E501

    The version of the OpenAPI document: v2
    Contact: support@idx.us
    Generated by: https://openapi-generator.tech
"""

from datetime import date, datetime  # noqa: F401
import decimal  # noqa: F401
import functools  # noqa: F401
import io  # noqa: F401
import re  # noqa: F401
import typing  # noqa: F401
import typing_extensions  # noqa: F401
import uuid  # noqa: F401

import frozendict  # noqa: F401

from openapi_client import schemas  # noqa: F401


class OrderGetDto(
    schemas.DictSchema
):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """


    class MetaOapg:
        
        class properties:
            id = schemas.StrSchema
            memberId = schemas.StrSchema
            status = schemas.StrSchema
            
            
            class purchaseDetails(
                schemas.DictSchema
            ):
            
            
                class MetaOapg:
                    
                    class properties:
                        couponId = schemas.StrSchema
                        discountCouponId = schemas.StrSchema
                        __annotations__ = {
                            "couponId": couponId,
                            "discountCouponId": discountCouponId,
                        }
                
                @typing.overload
                def __getitem__(self, name: typing_extensions.Literal["couponId"]) -> MetaOapg.properties.couponId: ...
                
                @typing.overload
                def __getitem__(self, name: typing_extensions.Literal["discountCouponId"]) -> MetaOapg.properties.discountCouponId: ...
                
                @typing.overload
                def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
                
                def __getitem__(self, name: typing.Union[typing_extensions.Literal["couponId", "discountCouponId", ], str]):
                    # dict_instance[name] accessor
                    return super().__getitem__(name)
                
                
                @typing.overload
                def get_item_oapg(self, name: typing_extensions.Literal["couponId"]) -> typing.Union[MetaOapg.properties.couponId, schemas.Unset]: ...
                
                @typing.overload
                def get_item_oapg(self, name: typing_extensions.Literal["discountCouponId"]) -> typing.Union[MetaOapg.properties.discountCouponId, schemas.Unset]: ...
                
                @typing.overload
                def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ...
                
                def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["couponId", "discountCouponId", ], str]):
                    return super().get_item_oapg(name)
                
            
                def __new__(
                    cls,
                    *args: typing.Union[dict, frozendict.frozendict, ],
                    couponId: typing.Union[MetaOapg.properties.couponId, str, schemas.Unset] = schemas.unset,
                    discountCouponId: typing.Union[MetaOapg.properties.discountCouponId, str, schemas.Unset] = schemas.unset,
                    _configuration: typing.Optional[schemas.Configuration] = None,
                    **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes],
                ) -> 'purchaseDetails':
                    return super().__new__(
                        cls,
                        *args,
                        couponId=couponId,
                        discountCouponId=discountCouponId,
                        _configuration=_configuration,
                        **kwargs,
                    )
            
            
            class paymentDetails(
                schemas.DictSchema
            ):
            
            
                class MetaOapg:
                    
                    class properties:
                        frequency = schemas.StrSchema
                        startDate = schemas.StrSchema
                        
                        
                        class price(
                            schemas.DictSchema
                        ):
                        
                        
                            class MetaOapg:
                                
                                class properties:
                                    base = schemas.StrSchema
                                    discount = schemas.StrSchema
                                    tax = schemas.StrSchema
                                    total = schemas.StrSchema
                                    __annotations__ = {
                                        "base": base,
                                        "discount": discount,
                                        "tax": tax,
                                        "total": total,
                                    }
                            
                            @typing.overload
                            def __getitem__(self, name: typing_extensions.Literal["base"]) -> MetaOapg.properties.base: ...
                            
                            @typing.overload
                            def __getitem__(self, name: typing_extensions.Literal["discount"]) -> MetaOapg.properties.discount: ...
                            
                            @typing.overload
                            def __getitem__(self, name: typing_extensions.Literal["tax"]) -> MetaOapg.properties.tax: ...
                            
                            @typing.overload
                            def __getitem__(self, name: typing_extensions.Literal["total"]) -> MetaOapg.properties.total: ...
                            
                            @typing.overload
                            def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
                            
                            def __getitem__(self, name: typing.Union[typing_extensions.Literal["base", "discount", "tax", "total", ], str]):
                                # dict_instance[name] accessor
                                return super().__getitem__(name)
                            
                            
                            @typing.overload
                            def get_item_oapg(self, name: typing_extensions.Literal["base"]) -> typing.Union[MetaOapg.properties.base, schemas.Unset]: ...
                            
                            @typing.overload
                            def get_item_oapg(self, name: typing_extensions.Literal["discount"]) -> typing.Union[MetaOapg.properties.discount, schemas.Unset]: ...
                            
                            @typing.overload
                            def get_item_oapg(self, name: typing_extensions.Literal["tax"]) -> typing.Union[MetaOapg.properties.tax, schemas.Unset]: ...
                            
                            @typing.overload
                            def get_item_oapg(self, name: typing_extensions.Literal["total"]) -> typing.Union[MetaOapg.properties.total, schemas.Unset]: ...
                            
                            @typing.overload
                            def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ...
                            
                            def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["base", "discount", "tax", "total", ], str]):
                                return super().get_item_oapg(name)
                            
                        
                            def __new__(
                                cls,
                                *args: typing.Union[dict, frozendict.frozendict, ],
                                base: typing.Union[MetaOapg.properties.base, str, schemas.Unset] = schemas.unset,
                                discount: typing.Union[MetaOapg.properties.discount, str, schemas.Unset] = schemas.unset,
                                tax: typing.Union[MetaOapg.properties.tax, str, schemas.Unset] = schemas.unset,
                                total: typing.Union[MetaOapg.properties.total, str, schemas.Unset] = schemas.unset,
                                _configuration: typing.Optional[schemas.Configuration] = None,
                                **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes],
                            ) -> 'price':
                                return super().__new__(
                                    cls,
                                    *args,
                                    base=base,
                                    discount=discount,
                                    tax=tax,
                                    total=total,
                                    _configuration=_configuration,
                                    **kwargs,
                                )
                        confirmationCode = schemas.StrSchema
                        __annotations__ = {
                            "frequency": frequency,
                            "startDate": startDate,
                            "price": price,
                            "confirmationCode": confirmationCode,
                        }
                
                @typing.overload
                def __getitem__(self, name: typing_extensions.Literal["frequency"]) -> MetaOapg.properties.frequency: ...
                
                @typing.overload
                def __getitem__(self, name: typing_extensions.Literal["startDate"]) -> MetaOapg.properties.startDate: ...
                
                @typing.overload
                def __getitem__(self, name: typing_extensions.Literal["price"]) -> MetaOapg.properties.price: ...
                
                @typing.overload
                def __getitem__(self, name: typing_extensions.Literal["confirmationCode"]) -> MetaOapg.properties.confirmationCode: ...
                
                @typing.overload
                def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
                
                def __getitem__(self, name: typing.Union[typing_extensions.Literal["frequency", "startDate", "price", "confirmationCode", ], str]):
                    # dict_instance[name] accessor
                    return super().__getitem__(name)
                
                
                @typing.overload
                def get_item_oapg(self, name: typing_extensions.Literal["frequency"]) -> typing.Union[MetaOapg.properties.frequency, schemas.Unset]: ...
                
                @typing.overload
                def get_item_oapg(self, name: typing_extensions.Literal["startDate"]) -> typing.Union[MetaOapg.properties.startDate, schemas.Unset]: ...
                
                @typing.overload
                def get_item_oapg(self, name: typing_extensions.Literal["price"]) -> typing.Union[MetaOapg.properties.price, schemas.Unset]: ...
                
                @typing.overload
                def get_item_oapg(self, name: typing_extensions.Literal["confirmationCode"]) -> typing.Union[MetaOapg.properties.confirmationCode, schemas.Unset]: ...
                
                @typing.overload
                def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ...
                
                def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["frequency", "startDate", "price", "confirmationCode", ], str]):
                    return super().get_item_oapg(name)
                
            
                def __new__(
                    cls,
                    *args: typing.Union[dict, frozendict.frozendict, ],
                    frequency: typing.Union[MetaOapg.properties.frequency, str, schemas.Unset] = schemas.unset,
                    startDate: typing.Union[MetaOapg.properties.startDate, str, schemas.Unset] = schemas.unset,
                    price: typing.Union[MetaOapg.properties.price, dict, frozendict.frozendict, schemas.Unset] = schemas.unset,
                    confirmationCode: typing.Union[MetaOapg.properties.confirmationCode, str, schemas.Unset] = schemas.unset,
                    _configuration: typing.Optional[schemas.Configuration] = None,
                    **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes],
                ) -> 'paymentDetails':
                    return super().__new__(
                        cls,
                        *args,
                        frequency=frequency,
                        startDate=startDate,
                        price=price,
                        confirmationCode=confirmationCode,
                        _configuration=_configuration,
                        **kwargs,
                    )
            creationDate = schemas.DateTimeSchema
            updateDate = schemas.DateTimeSchema
            version = schemas.Int64Schema
            active = schemas.BoolSchema
            __annotations__ = {
                "id": id,
                "memberId": memberId,
                "status": status,
                "purchaseDetails": purchaseDetails,
                "paymentDetails": paymentDetails,
                "creationDate": creationDate,
                "updateDate": updateDate,
                "version": version,
                "active": active,
            }
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["id"]) -> MetaOapg.properties.id: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["memberId"]) -> MetaOapg.properties.memberId: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["status"]) -> MetaOapg.properties.status: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["purchaseDetails"]) -> MetaOapg.properties.purchaseDetails: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["paymentDetails"]) -> MetaOapg.properties.paymentDetails: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["creationDate"]) -> MetaOapg.properties.creationDate: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["updateDate"]) -> MetaOapg.properties.updateDate: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["version"]) -> MetaOapg.properties.version: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["active"]) -> MetaOapg.properties.active: ...
    
    @typing.overload
    def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["id", "memberId", "status", "purchaseDetails", "paymentDetails", "creationDate", "updateDate", "version", "active", ], str]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["id"]) -> typing.Union[MetaOapg.properties.id, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["memberId"]) -> typing.Union[MetaOapg.properties.memberId, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["status"]) -> typing.Union[MetaOapg.properties.status, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["purchaseDetails"]) -> typing.Union[MetaOapg.properties.purchaseDetails, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["paymentDetails"]) -> typing.Union[MetaOapg.properties.paymentDetails, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["creationDate"]) -> typing.Union[MetaOapg.properties.creationDate, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["updateDate"]) -> typing.Union[MetaOapg.properties.updateDate, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["version"]) -> typing.Union[MetaOapg.properties.version, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["active"]) -> typing.Union[MetaOapg.properties.active, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: str) -> typing.Union[schemas.UnsetAnyTypeSchema, schemas.Unset]: ...
    
    def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["id", "memberId", "status", "purchaseDetails", "paymentDetails", "creationDate", "updateDate", "version", "active", ], str]):
        return super().get_item_oapg(name)
    

    def __new__(
        cls,
        *args: typing.Union[dict, frozendict.frozendict, ],
        id: typing.Union[MetaOapg.properties.id, str, schemas.Unset] = schemas.unset,
        memberId: typing.Union[MetaOapg.properties.memberId, str, schemas.Unset] = schemas.unset,
        status: typing.Union[MetaOapg.properties.status, str, schemas.Unset] = schemas.unset,
        purchaseDetails: typing.Union[MetaOapg.properties.purchaseDetails, dict, frozendict.frozendict, schemas.Unset] = schemas.unset,
        paymentDetails: typing.Union[MetaOapg.properties.paymentDetails, dict, frozendict.frozendict, schemas.Unset] = schemas.unset,
        creationDate: typing.Union[MetaOapg.properties.creationDate, str, datetime, schemas.Unset] = schemas.unset,
        updateDate: typing.Union[MetaOapg.properties.updateDate, str, datetime, schemas.Unset] = schemas.unset,
        version: typing.Union[MetaOapg.properties.version, decimal.Decimal, int, schemas.Unset] = schemas.unset,
        active: typing.Union[MetaOapg.properties.active, bool, schemas.Unset] = schemas.unset,
        _configuration: typing.Optional[schemas.Configuration] = None,
        **kwargs: typing.Union[schemas.AnyTypeSchema, dict, frozendict.frozendict, str, date, datetime, uuid.UUID, int, float, decimal.Decimal, None, list, tuple, bytes],
    ) -> 'OrderGetDto':
        return super().__new__(
            cls,
            *args,
            id=id,
            memberId=memberId,
            status=status,
            purchaseDetails=purchaseDetails,
            paymentDetails=paymentDetails,
            creationDate=creationDate,
            updateDate=updateDate,
            version=version,
            active=active,
            _configuration=_configuration,
            **kwargs,
        )
