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

#include "ash/public/cpp/lock_screen_widget_factory.h"

#include "ash/public/cpp/shell_window_ids.h"
#include "mojo/public/cpp/bindings/type_converter.h"
#include "services/ws/public/cpp/property_type_converters.h"
#include "services/ws/public/mojom/window_manager.mojom.h"
#include "ui/aura/mus/property_converter.h"
#include "ui/aura/window.h"
#include "ui/views/widget/widget.h"
#include "ui/views/widget/widget_delegate.h"

namespace ash {
namespace {

class LockScreenWidgetDelegate : public views::WidgetDelegate {
 public:
  explicit LockScreenWidgetDelegate(views::Widget* widget) : widget_(widget) {
    DCHECK(widget_);
  }
  ~LockScreenWidgetDelegate() override = default;

  // views::WidgetDelegate:
  views::View* GetInitiallyFocusedView() override {
    return widget_->GetContentsView();
  }
  views::Widget* GetWidget() override { return widget_; }
  const views::Widget* GetWidget() const override { return widget_; }
  void DeleteDelegate() override { delete this; }

 private:
  views::Widget* widget_;

  DISALLOW_COPY_AND_ASSIGN(LockScreenWidgetDelegate);
};

}  // namespace

std::unique_ptr<views::Widget> CreateLockScreenWidget(aura::Window* parent) {
  std::unique_ptr<views::Widget> widget = std::make_unique<views::Widget>();
  views::Widget::InitParams params(
      views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
  params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
  // Owned by Widget.
  params.delegate = new LockScreenWidgetDelegate(widget.get());
  params.show_state = ui::SHOW_STATE_FULLSCREEN;
  params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
  params.parent = parent;
  if (!parent) {
    params.mus_properties[ws::mojom::WindowManager::kContainerId_InitProperty] =
        mojo::ConvertTo<std::vector<uint8_t>>(
            static_cast<int32_t>(ash::kShellWindowId_OverlayContainer));
  }
  widget->Init(params);
  widget->SetVisibilityAnimationTransition(views::Widget::ANIMATE_NONE);
  return widget;
}

}  // namespace ash
