import abc
import builtins
import datetime
import enum
import typing

import jsii
import jsii.compat
import publication

from ._jsii import *


@jsii.interface(jsii_type="@scope/jsii-calc-base-of-base.IVeryBaseInterface")
class IVeryBaseInterface(jsii.compat.Protocol):
    @builtins.staticmethod
    def __jsii_proxy_class__():
        return _IVeryBaseInterfaceProxy

    @jsii.member(jsii_name="foo")
    def foo(self) -> None:
        ...


class _IVeryBaseInterfaceProxy:
    __jsii_type__ = "@scope/jsii-calc-base-of-base.IVeryBaseInterface"

    @jsii.member(jsii_name="foo")
    def foo(self) -> None:
        return jsii.invoke(self, "foo", [])


class Very(metaclass=jsii.JSIIMeta, jsii_type="@scope/jsii-calc-base-of-base.Very"):
    def __init__(self) -> None:
        jsii.create(Very, self, [])

    @jsii.member(jsii_name="hey")
    def hey(self) -> jsii.Number:
        return jsii.invoke(self, "hey", [])


@jsii.data_type(
    jsii_type="@scope/jsii-calc-base-of-base.VeryBaseProps",
    jsii_struct_bases=[],
    name_mapping={"foo": "foo"},
)
class VeryBaseProps:
    def __init__(self, *, foo: "Very") -> None:
        """
        :param foo: -
        """
        self._values = {
            "foo": foo,
        }

    @builtins.property
    def foo(self) -> "Very":
        return self._values.get("foo")

    def __eq__(self, rhs) -> bool:
        return isinstance(rhs, self.__class__) and rhs._values == self._values

    def __ne__(self, rhs) -> bool:
        return not (rhs == self)

    def __repr__(self) -> str:
        return "VeryBaseProps(%s)" % ", ".join(
            k + "=" + repr(v) for k, v in self._values.items()
        )


__all__ = [
    "IVeryBaseInterface",
    "Very",
    "VeryBaseProps",
]

publication.publish()
