# 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 XMetaAxis(
    schemas.DictSchema
):
    """NOTE: This class is auto generated by OpenAPI Generator.
    Ref: https://openapi-generator.tech

    Do not edit the class manually.

    DisplayName is the name shown on the Y column
EsName is the internal name as presented in Elastic. (i.e.: if the key in elastic is metrics.state.keyword,
this would be the value we store in EsName and use when creating filters based on this axis but we would show it as 'state' which we return in the displayname)
Domain sets the axis range (domain equal to min:0 and max:100 will have a range of values between 0 and 100). The default domain causes 'datamin' and 'datamax' causes the webui to calculate the domain.
   TODO: look into if the domain can be removed from the interface and calculated by recharts only.
AxisType states the format of the point values. If the distribution type is continuous this is number, else catagory.
   TODO: look into issues this causes with values being numeric and the type being catagory causing the chart to split horizontaly by line.
    """


    class MetaOapg:
        required = {
            "displayName",
            "domain",
            "esName",
            "axisType",
        }
        
        class properties:
        
            @staticmethod
            def axisType() -> typing.Type['AxisType']:
                return AxisType
        
            @staticmethod
            def domain() -> typing.Type['Domain']:
                return Domain
            esName = schemas.StrSchema
            displayName = schemas.StrSchema
            __annotations__ = {
                "axisType": axisType,
                "domain": domain,
                "esName": esName,
                "displayName": displayName,
            }
    
    displayName: MetaOapg.properties.displayName
    domain: 'Domain'
    esName: MetaOapg.properties.esName
    axisType: 'AxisType'
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["axisType"]) -> 'AxisType': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["domain"]) -> 'Domain': ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["esName"]) -> MetaOapg.properties.esName: ...
    
    @typing.overload
    def __getitem__(self, name: typing_extensions.Literal["displayName"]) -> MetaOapg.properties.displayName: ...
    
    @typing.overload
    def __getitem__(self, name: str) -> schemas.UnsetAnyTypeSchema: ...
    
    def __getitem__(self, name: typing.Union[typing_extensions.Literal["axisType", "domain", "esName", "displayName", ], str]):
        # dict_instance[name] accessor
        return super().__getitem__(name)
    
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["axisType"]) -> 'AxisType': ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["domain"]) -> 'Domain': ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["esName"]) -> MetaOapg.properties.esName: ...
    
    @typing.overload
    def get_item_oapg(self, name: typing_extensions.Literal["displayName"]) -> MetaOapg.properties.displayName: ...
    
    @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["axisType", "domain", "esName", "displayName", ], str]):
        return super().get_item_oapg(name)
    

    def __new__(
        cls,
        *args: typing.Union[dict, frozendict.frozendict, ],
        displayName: typing.Union[MetaOapg.properties.displayName, str, ],
        domain: 'Domain',
        esName: typing.Union[MetaOapg.properties.esName, str, ],
        axisType: 'AxisType',
        _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],
    ) -> 'XMetaAxis':
        return super().__new__(
            cls,
            *args,
            displayName=displayName,
            domain=domain,
            esName=esName,
            axisType=axisType,
            _configuration=_configuration,
            **kwargs,
        )

from openapi_client.model.axis_type import AxisType
from openapi_client.model.domain import Domain
