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

import 'package:fidl_fuchsia_modular/fidl_async.dart'
    show StoryVisualStateWatcher, StoryVisualState, StoryShellContext;
import 'package:fidl_fuchsia_ui_policy/fidl_async.dart';
import 'package:lib.story_shell/common.dart';
import 'package:lib.widgets/utils.dart';

class VisualStateWatcher extends StoryVisualStateWatcher {
  StoryVisualState _visualState;
  final PointerEventsListener pointerEventsListener = PointerEventsListener();
  final KeyListener keyListener;
  final StoryShellContext storyShellContext;

  VisualStateWatcher({
    this.keyListener,
    this.storyShellContext,
  });

  @override
  Future<void> onVisualStateChange(StoryVisualState visualState) async {
    if (_visualState == visualState) {
      return;
    }
    _visualState = visualState;

    pointerEventsListener.stop();
    if (visualState == StoryVisualState.maximized) {
      PresentationProxy presentationProxy = PresentationProxy();
      await storyShellContext.getPresentation(presentationProxy.ctrl.request());
      pointerEventsListener.listen(presentationProxy);
      keyListener?.listen(presentationProxy);
      presentationProxy.ctrl.close();
    } else {
      keyListener?.stop();
    }
  }
}
