// Copyright 2013 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/display/display_error_observer.h"

#include "ash/display/display_util.h"
#include "ash/strings/grit/ash_strings.h"
#include "base/strings/string_number_conversions.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/chromeos/devicetype_utils.h"
#include "ui/display/display.h"
#include "ui/display/types/display_snapshot.h"

namespace ash {

DisplayErrorObserver::DisplayErrorObserver() = default;

DisplayErrorObserver::~DisplayErrorObserver() = default;

void DisplayErrorObserver::OnDisplayModeChangeFailed(
    const display::DisplayConfigurator::DisplayStateList& displays,
    display::MultipleDisplayState new_state) {
  bool internal_display_failed = false;
  LOG(ERROR) << "Failed to configure the following display(s):";
  for (auto* display : displays) {
    const int64_t display_id = display->display_id();
    internal_display_failed |=
        display::Display::IsInternalDisplayId(display_id);
    LOG(ERROR) << "- Display with ID = " << display_id << ", and EDID = "
               << base::HexEncode(display->edid().data(),
                                  display->edid().size())
               << ".";
  }

  if (internal_display_failed && displays.size() == 1u) {
    // If the internal display is the only display that failed, don't show this
    // notification to the user, as it's confusing and less helpful.
    // https://crbug.com/775197.
    return;
  }

  base::string16 message =
      (new_state == display::MULTIPLE_DISPLAY_STATE_DUAL_MIRROR)
          ? l10n_util::GetStringUTF16(IDS_ASH_DISPLAY_FAILURE_ON_MIRRORING)
          : ui::SubstituteChromeOSDeviceType(
                IDS_ASH_DISPLAY_FAILURE_ON_NON_MIRRORING);
  ShowDisplayErrorNotification(message, true);
}

}  // namespace ash
