# coding: utf-8

"""
    node-server

    No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)  # noqa: E501

    The version of the OpenAPI document: 0.0.237
    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 UserData(
    schemas.DictSchema
):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.
    """


    class MetaOapg:
        required = {
            "role",
            "organizationName",
            "recordSession",
            "_id",
            "local",
            "activated",
        }
        
        class properties:
            _id = schemas.StrSchema
            recordSession = schemas.BoolSchema
        
            @staticmethod
            def role() -> typing.Type['UserRole']:
                return UserRole
        
            @staticmethod
            def local() -> typing.Type['UserDataLocal']:
                return UserDataLocal
            organizationName = schemas.StrSchema
            activated = schemas.BoolSchema
        
            @staticmethod
            def metadata() -> typing.Type['UserDataMetadata']:
                return UserDataMetadata
            kibanaSpaceId = schemas.StrSchema
        
            @staticmethod
            def singleUserMode() -> typing.Type['SingleUserModeSettings']:
                return SingleUserModeSettings
            __annotations__ = {
                "_id": _id,
                "recordSession": recordSession,
                "role": role,
                "local": local,
                "organizationName": organizationName,
                "activated": activated,
                "metadata": metadata,
                "kibanaSpaceId": kibanaSpaceId,
                "singleUserMode": singleUserMode,
            }
        additional_properties = schemas.NotAnyTypeSchema
    
    role: 'UserRole'
    organizationName: MetaOapg.properties.organizationName
    recordSession: MetaOapg.properties.recordSession
    _id: MetaOapg.properties._id
    local: 'UserDataLocal'
    activated: MetaOapg.properties.activated
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["role"]) -> 'UserRole': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["organizationName"]) -> MetaOapg.properties.organizationName: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["recordSession"]) -> MetaOapg.properties.recordSession: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["_id"]) -> MetaOapg.properties._id: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["local"]) -> 'UserDataLocal': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["activated"]) -> MetaOapg.properties.activated: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["metadata"]) -> 'UserDataMetadata': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["kibanaSpaceId"]) -> MetaOapg.properties.kibanaSpaceId: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["singleUserMode"]) -> 'SingleUserModeSettings': ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["role"], typing_extensions.Literal["organizationName"], typing_extensions.Literal["recordSession"], typing_extensions.Literal["_id"], typing_extensions.Literal["local"], typing_extensions.Literal["activated"], typing_extensions.Literal["metadata"], typing_extensions.Literal["kibanaSpaceId"], typing_extensions.Literal["singleUserMode"], ]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["role"]) -> 'UserRole': ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["organizationName"]) -> MetaOapg.properties.organizationName: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["recordSession"]) -> MetaOapg.properties.recordSession: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["_id"]) -> MetaOapg.properties._id: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["local"]) -> 'UserDataLocal': ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["activated"]) -> MetaOapg.properties.activated: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["metadata"]) -> typing.Union['UserDataMetadata', schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["kibanaSpaceId"]) -> typing.Union[MetaOapg.properties.kibanaSpaceId, schemas.Unset]: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["singleUserMode"]) -> typing.Union['SingleUserModeSettings', schemas.Unset]: ...
    
    def get_item_oapg(self, name: typing.Union[typing_extensions.Literal["role"], typing_extensions.Literal["organizationName"], typing_extensions.Literal["recordSession"], typing_extensions.Literal["_id"], typing_extensions.Literal["local"], typing_extensions.Literal["activated"], typing_extensions.Literal["metadata"], typing_extensions.Literal["kibanaSpaceId"], typing_extensions.Literal["singleUserMode"], ]):
        return super().get_item_oapg(name)

    def __new__(
        cls,
        *args: typing.Union[dict, frozendict.frozendict, ],
        role: 'UserRole',
        organizationName: typing.Union[MetaOapg.properties.organizationName, str, ],
        recordSession: typing.Union[MetaOapg.properties.recordSession, bool, ],
        _id: typing.Union[MetaOapg.properties._id, str, ],
        local: 'UserDataLocal',
        activated: typing.Union[MetaOapg.properties.activated, bool, ],
        metadata: typing.Union['UserDataMetadata', schemas.Unset] = schemas.unset,
        kibanaSpaceId: typing.Union[MetaOapg.properties.kibanaSpaceId, str, schemas.Unset] = schemas.unset,
        singleUserMode: typing.Union['SingleUserModeSettings', schemas.Unset] = schemas.unset,
        _configuration: typing.Optional[schemas.Configuration] = None,
    ) -> 'UserData':
        return super().__new__(
            cls,
            *args,
            role=role,
            organizationName=organizationName,
            recordSession=recordSession,
            _id=_id,
            local=local,
            activated=activated,
            metadata=metadata,
            kibanaSpaceId=kibanaSpaceId,
            singleUserMode=singleUserMode,
            _configuration=_configuration,
        )

from openapi_client.model.single_user_mode_settings import SingleUserModeSettings
from openapi_client.model.user_data_local import UserDataLocal
from openapi_client.model.user_data_metadata import UserDataMetadata
from openapi_client.model.user_role import UserRole
