import six
from ipywidgets import Widget, DOMWidget, widget_serialization, Color, register
from traitlets import (
    Unicode, Int, CInt, Instance, ForwardDeclaredInstance, This, Enum,
    Tuple, List, Dict, Float, CFloat, Bool, Union, Any,
    )

from .._base.Three import ThreeWidget
from ..enums import *
from ..traits import *

from .Camera_autogen import Camera


@register
class CombinedCamera(Camera):
    """CombinedCamera

    Autogenerated by generate-wrappers.js
    Date: Tue Dec 19 2017 10:52:07 GMT+0100 (W. Europe Standard Time)
    This class is a custom class for pythreejs, with no
    direct corresponding class in three.js.
    """

    def __init__(self, width=0, height=0, fov=50, near=0.1, far=2000, orthoNear=0.1, orthoFar=2000, **kwargs):
        kwargs['width'] = width
        kwargs['height'] = height
        kwargs['fov'] = fov
        kwargs['near'] = near
        kwargs['far'] = far
        kwargs['orthoNear'] = orthoNear
        kwargs['orthoFar'] = orthoFar
        super(CombinedCamera, self).__init__(**kwargs)

    _model_name = Unicode('CombinedCameraModel').tag(sync=True)

    fov = CFloat(50, allow_none=False).tag(sync=True)

    zoom = CFloat(1, allow_none=False).tag(sync=True)

    near = CFloat(0.1, allow_none=False).tag(sync=True)

    far = CFloat(2000, allow_none=False).tag(sync=True)

    orthoNear = CFloat(0.1, allow_none=False).tag(sync=True)

    orthoFar = CFloat(2000, allow_none=False).tag(sync=True)

    width = CFloat(0, allow_none=False).tag(sync=True)

    height = CFloat(0, allow_none=False).tag(sync=True)

    mode = Enum(['perspective', 'orthographic'], "perspective", allow_none=False).tag(sync=True)

    impersonate = Bool(True, allow_none=False).tag(sync=True)


if six.PY3:
    import inspect
    # Include explicit signature since the metaclass screws it up
    CombinedCamera.__signature__ = inspect.signature(CombinedCamera.__init__)
