# coding: utf-8

"""
    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 circle import schemas  # noqa: F401


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

    Do not edit the class manually.

    Indicates the status of the payment verification. This property will be present once the payment is confirmed.
    """


    class MetaOapg:
        required = {
            "cvv",
            "avs",
        }
        
        class properties:
            avs = schemas.StrSchema
        
            @staticmethod
            def cvv() -> typing.Type['CvvResults']:
                return CvvResults
        
            @staticmethod
            def threeDSecure() -> typing.Type['ThreeDsResult']:
                return ThreeDsResult
        
            @staticmethod
            def eci() -> typing.Type['Eci']:
                return Eci
            __annotations__ = {
                "avs": avs,
                "cvv": cvv,
                "threeDSecure": threeDSecure,
                "eci": eci,
            }
    
    cvv: 'CvvResults'
    avs: MetaOapg.properties.avs
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["avs"]) -> MetaOapg.properties.avs: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["cvv"]) -> 'CvvResults': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["threeDSecure"]) -> 'ThreeDsResult': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["eci"]) -> 'Eci': ...
    
    @typing.overload
    def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["avs", "cvv", "threeDSecure", "eci", ], str]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["avs"]) -> MetaOapg.properties.avs: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["cvv"]) -> 'CvvResults': ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["threeDSecure"]) -> typing.Union['ThreeDsResult', schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["eci"]) -> typing.Union['Eci', 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["avs", "cvv", "threeDSecure", "eci", ], str]):
        return super().get_item_oapg(name)
    

    def __new__(
        cls,
        *_args: typing.Union[dict, frozendict.frozendict, ],
        cvv: 'CvvResults',
        avs: typing.Union[MetaOapg.properties.avs, str, ],
        threeDSecure: typing.Union['ThreeDsResult', schemas.Unset] = schemas.unset,
        eci: typing.Union['Eci', 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],
    ) -> 'PaymentVerificationResponse':
        return super().__new__(
            cls,
            *_args,
            cvv=cvv,
            avs=avs,
            threeDSecure=threeDSecure,
            eci=eci,
            _configuration=_configuration,
            **kwargs,
        )

from circle.model.cvv_results import CvvResults
from circle.model.eci import Eci
from circle.model.three_ds_result import ThreeDsResult
