// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef VRController_h
#define VRController_h

#include "core/dom/ContextLifecycleObserver.h"
#include "core/dom/Document.h"
#include "device/vr/vr_service.mojom-blink.h"
#include "modules/vr/VRDisplay.h"
#include "mojo/public/cpp/bindings/binding.h"
#include "platform/heap/Handle.h"
#include "wtf/Deque.h"
#include "platform/heap/Handle.h"

#include <memory>

namespace blink {

class NavigatorVR;
class VRGetDevicesCallback;

class VRController final
    : public GarbageCollectedFinalized<VRController>
    , public device::blink::VRServiceClient
    , public ContextLifecycleObserver {
    USING_GARBAGE_COLLECTED_MIXIN(VRController);
    WTF_MAKE_NONCOPYABLE(VRController);
public:
    VRController(NavigatorVR*);
    virtual ~VRController();

    // VRService.
    void getDisplays(ScriptPromiseResolver*);
    device::blink::VRPosePtr getPose(unsigned index);
    void resetPose(unsigned index);
    void requestPresent(ScriptPromiseResolver*, unsigned index);
    void exitPresent(unsigned index);
    void submitFrame(unsigned index, device::blink::VRPosePtr);
    void updateLayerBounds(unsigned index,
        device::blink::VRLayerBoundsPtr leftBounds,
        device::blink::VRLayerBoundsPtr rightBounds);

    VRDisplay* createOrUpdateDisplay(const device::blink::VRDisplayPtr&);
    VRDisplayVector updateDisplays(mojo::WTFArray<device::blink::VRDisplayPtr>);
    VRDisplay* getDisplayForIndex(unsigned index);

    DECLARE_VIRTUAL_TRACE();

private:
    // Binding callbacks.
    void onGetDisplays(mojo::WTFArray<device::blink::VRDisplayPtr>);
    void onPresentComplete(ScriptPromiseResolver*, unsigned index, bool success);

    // VRServiceClient.
    void OnDisplayChanged(device::blink::VRDisplayPtr) override;
    void OnDisplayConnect(device::blink::VRDisplayPtr) override;
    void OnDisplayDisconnect(unsigned index) override;
    void OnDisplayActivate(
        device::blink::VRDisplayPtr,
        device::blink::VRDisplayEventReason) override;
    void OnDisplayDeactivate(
        device::blink::VRDisplayPtr,
        device::blink::VRDisplayEventReason) override;
    void OnDisplayBlur(device::blink::VRDisplayPtr) override;
    void OnDisplayFocus(device::blink::VRDisplayPtr) override;
    void OnExitPresent(unsigned index) override;

    // ContextLifecycleObserver.
    void contextDestroyed() override;

    Member<NavigatorVR> m_navigatorVR;
    VRDisplayVector m_displays;

    Deque<std::unique_ptr<VRGetDevicesCallback>> m_pendingGetDevicesCallbacks;
    device::blink::VRServicePtr m_service;
    mojo::Binding<device::blink::VRServiceClient> m_binding;
};

} // namespace blink

#endif // VRController_h
