// Copyright 2020 The Chromium OS 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 "diagnostics/cros_health_tool/event/lid_subscriber.h"

#include <iostream>
#include <string>
#include <utility>

#include <base/logging.h>

namespace diagnostics {

namespace {

constexpr char kHumanReadableOnLidClosedEvent[] = "Lid closed";
constexpr char kHumanReadableOnLidOpenedEvent[] = "Lid opened";

// Enumeration of the different lid event types.
enum class LidEventType {
  kOnLidClosed,
  kOnLidOpened,
};

std::string GetHumanReadableEvent(LidEventType event) {
  switch (event) {
    case LidEventType::kOnLidClosed:
      return kHumanReadableOnLidClosedEvent;
    case LidEventType::kOnLidOpened:
      return kHumanReadableOnLidOpenedEvent;
  }
}

void PrintLidNotification(LidEventType event) {
  std::cout << "Lid event received: " << GetHumanReadableEvent(event)
            << std::endl;
}

}  // namespace

LidSubscriber::LidSubscriber(
    chromeos::cros_healthd::mojom::CrosHealthdLidObserverRequest request)
    : binding_{this /* impl */, std::move(request)} {
  DCHECK(binding_.is_bound());
}

LidSubscriber::~LidSubscriber() = default;

void LidSubscriber::OnLidClosed() {
  PrintLidNotification(LidEventType::kOnLidClosed);
}

void LidSubscriber::OnLidOpened() {
  PrintLidNotification(LidEventType::kOnLidOpened);
}

}  // namespace diagnostics
