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

#ifndef CHROME_BROWSER_DEVICE_NOTIFICATIONS_DEVICE_PINNED_NOTIFICATION_RENDERER_H_
#define CHROME_BROWSER_DEVICE_NOTIFICATIONS_DEVICE_PINNED_NOTIFICATION_RENDERER_H_

#include "ash/constants/notifier_catalogs.h"
#include "build/build_config.h"
#include "chrome/browser/device_notifications/device_system_tray_icon.h"
#include "chrome/browser/device_notifications/device_system_tray_icon_renderer.h"
#include "device_connection_tracker.h"
#include "ui/message_center/public/cpp/notification.h"

class DevicePinnedNotificationRenderer : public DeviceSystemTrayIconRenderer {
 public:
  explicit DevicePinnedNotificationRenderer(
      DeviceSystemTrayIcon* device_system_tray_icon,
      const std::string& notification_id_prefix,
#if BUILDFLAG(IS_CHROMEOS)
      const ash::NotificationCatalogName notification_catalog_name,
#endif
      const int message_id);
  DevicePinnedNotificationRenderer(const DevicePinnedNotificationRenderer&) =
      delete;
  DevicePinnedNotificationRenderer& operator=(
      const DevicePinnedNotificationRenderer&) = delete;
  ~DevicePinnedNotificationRenderer() override;

  // DeviceSystemTrayIconRenderer
  void AddProfile(Profile* profile) override;
  void RemoveProfile(Profile* profile) override;
  void NotifyConnectionUpdated(Profile* profile) override;

  // The notification id of the pinned notification.
  std::string GetNotificationId(Profile* profile);

 private:
  // Create a pinned notification for |profile| to indicate at least one
  // device is being accessed.
  std::unique_ptr<message_center::Notification> CreateNotification(
      Profile* profile);

  // Display |notification| in the system notification.
  void DisplayNotification(
      std::unique_ptr<message_center::Notification> notification);

  std::string notification_id_prefix_;

#if BUILDFLAG(IS_CHROMEOS)
  ash::NotificationCatalogName notification_catalog_name_;
#endif

  int message_id_;
};

#endif  // CHROME_BROWSER_DEVICE_NOTIFICATIONS_DEVICE_PINNED_NOTIFICATION_RENDERER_H_
