// Copyright 2018 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.

#include "peridot/lib/testing/session_shell_impl.h"

#include <lib/async/cpp/task.h>
#include <lib/async/default.h>

namespace modular {
namespace testing {

SessionShellImpl::SessionShellImpl() = default;
SessionShellImpl::~SessionShellImpl() = default;

fidl::InterfaceRequestHandler<fuchsia::modular::SessionShell> SessionShellImpl::GetHandler() {
  return bindings_.GetHandler(this);
}

// |SessionShell|
void SessionShellImpl::AttachView(fuchsia::modular::ViewIdentifier view_id,
                                  fuchsia::ui::views::ViewHolderToken /*view_holder_token*/) {
  on_attach_view_(std::move(view_id));
}

// |SessionShell|
void SessionShellImpl::AttachView2(fuchsia::modular::ViewIdentifier view_id,
                                   fuchsia::ui::views::ViewHolderToken view_holder_token) {
  AttachView(std::move(view_id), std::move(view_holder_token));
}

// |SessionShell|
void SessionShellImpl::DetachView(fuchsia::modular::ViewIdentifier view_id,
                                  fit::function<void()> done) {
  on_detach_view_(std::move(view_id));

  // Used to simulate a sluggish shell that hits the timeout.
  async::PostDelayedTask(async_get_default_dispatcher(), std::move(done), detach_delay_);
}

}  // namespace testing
}  // namespace modular
