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

#include "chrome/browser/ui/views/hover_button_controller.h"

#include "chrome/browser/ui/views/controls/hover_button.h"
#include "ui/views/animation/ink_drop.h"
#include "ui/views/controls/button/button_controller_delegate.h"
#include "ui/views/mouse_constants.h"
#include "ui/views/widget/root_view.h"
#include "ui/views/widget/widget.h"

HoverButtonController::HoverButtonController(
    HoverButton* button,
    std::unique_ptr<views::ButtonControllerDelegate> delegate)
    : ButtonController(button, std::move(delegate)) {
  set_notify_action(views::ButtonController::NotifyAction::kOnRelease);
}

HoverButtonController::~HoverButtonController() = default;

bool HoverButtonController::OnKeyPressed(const ui::KeyEvent& event) {
  const bool pressed = callback() && ((event.key_code() == ui::VKEY_SPACE) ||
                                      (event.key_code() == ui::VKEY_RETURN));
  if (pressed) {
    delegate()->NotifyClick(event);
  }
  return pressed;
}

bool HoverButtonController::OnMousePressed(const ui::MouseEvent& event) {
  DCHECK(notify_action() == views::ButtonController::NotifyAction::kOnRelease);
  if (button()->GetRequestFocusOnPress()) {
    button()->RequestFocus();
  }
  if (callback()) {
    views::InkDrop::Get(button())->AnimateToState(
        views::InkDropState::ACTION_PENDING,
        ui::LocatedEvent::FromIfValid(&event));
  } else {
    views::InkDrop::Get(button())->AnimateToState(
        views::InkDropState::HIDDEN, ui::LocatedEvent::FromIfValid(&event));
  }
  return true;
}

void HoverButtonController::OnMouseReleased(const ui::MouseEvent& event) {
  DCHECK(notify_action() == views::ButtonController::NotifyAction::kOnRelease);
  views::InkDrop::Get(button())->AnimateToState(views::InkDropState::HIDDEN,
                                                &event);
  if (button()->GetState() != views::Button::STATE_DISABLED &&
      delegate()->IsTriggerableEvent(event) &&
      button()->HitTestPoint(event.location()) && !delegate()->InDrag()) {
    if (callback()) {
      delegate()->NotifyClick(event);
    }
  } else {
    ButtonController::OnMouseReleased(event);
  }
}

void HoverButtonController::OnGestureEvent(ui::GestureEvent* event) {
  if (event->type() == ui::EventType::kGestureTap) {
    button()->SetState(views::Button::STATE_NORMAL);
    if (callback()) {
      delegate()->NotifyClick(*event);
    }
  } else {
    ButtonController::OnGestureEvent(event);
  }
}

views::Button::PressedCallback& HoverButtonController::callback() {
  // `this` is only constructible with a `HoverButton*`, so this downcast is
  // safe.
  return static_cast<HoverButton*>(button())->callback({});
}
