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

#ifndef COMPONENTS_ENTERPRISE_BROWSER_REPORTING_SECURITY_SIGNALS_SERVICE_H_
#define COMPONENTS_ENTERPRISE_BROWSER_REPORTING_SECURITY_SIGNALS_SERVICE_H_

namespace enterprise_reporting {

// Set of triggers which the service uses as hook to trigger a security report.
// This enum should be kept in sync with the `SecurityReportTrigger` enum in
// tools/metrics/histograms/metadata/enterprise/enums.xml.
// LINT.IfChange(SecurityReportTrigger)
enum class SecurityReportTrigger {
  kTimer = 0,
  kCookieChange = 1,
  kPolicyChange = 2,
  kMaxValue = kPolicyChange
};
// LINT.ThenChange(//tools/metrics/histograms/metadata/enterprise/enums.xml:SecurityReportTrigger)

// Service in charge of the scheduling, and triggering, generation and upload of
// user security signals reports.
class SecuritySignalsService {
 public:
  virtual ~SecuritySignalsService() = default;

  // Hook used by the service to start monitoring its various triggers and
  // raising reporting events.
  virtual void Start() = 0;

  // Returns true if the user security signals reporting policy is enabled.
  virtual bool IsSecuritySignalsReportingEnabled() = 0;

  // Returns true if cookies should be used as authentication mechanism with the
  // device management server. This will automatically be false if the security
  // reporting policy is disabled.
  virtual bool ShouldUseCookies() = 0;

  // Use to tell the service that a report including security signals was
  // uploaded. This will postpone the next timed trigger.
  virtual void OnReportUploaded() = 0;
};

}  // namespace enterprise_reporting

#endif  // COMPONENTS_ENTERPRISE_BROWSER_REPORTING_SECURITY_SIGNALS_SERVICE_H_
