// Copyright 2024 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_UI_USER_EDUCATION_RECENT_SESSION_OBSERVER_IMPL_H_
#define CHROME_BROWSER_UI_USER_EDUCATION_RECENT_SESSION_OBSERVER_IMPL_H_

#include <memory>

#include "base/callback_list.h"
#include "base/memory/raw_ref.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/user_education/recent_session_policy.h"
#include "chrome/browser/user_education/browser_user_education_storage_service.h"
#include "chrome/browser/user_education/recent_session_observer.h"
#include "chrome/browser/user_education/recent_session_tracker.h"

// Observes recent sessions updates, consults a policy, and:
//  - records metrics
//  - informs user education strategy
//
// Note that tests are in c/b/ui/views/user_education due to the need to have a
// live profile to create an observer.
class RecentSessionObserverImpl : public RecentSessionObserver {
 public:
  RecentSessionObserverImpl(Profile& profile,
                            std::unique_ptr<RecentSessionPolicy> policy);
  ~RecentSessionObserverImpl() override;

  // RecentSessionObserver:
  void Init(RecentSessionTracker& tracker) override;

 private:
  friend class RecentSessionObserverImplBrowserTest;

  void OnRecentSessionsUpdated(const RecentSessionData& recent_sessions);

  const raw_ref<Profile> profile_;
  const std::unique_ptr<RecentSessionPolicy> policy_;
  base::CallbackListSubscription subscription_;
};

#endif  // CHROME_BROWSER_UI_USER_EDUCATION_RECENT_SESSION_OBSERVER_IMPL_H_
