// 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.

#ifndef POWER_MANAGER_POWERD_SYSTEM_AMBIENT_LIGHT_SENSOR_INTERFACE_H_
#define POWER_MANAGER_POWERD_SYSTEM_AMBIENT_LIGHT_SENSOR_INTERFACE_H_

#include <base/files/file_path.h>

#include "power_manager/powerd/system/ambient_light_observer.h"

namespace power_manager {
namespace system {

class AmbientLightSensorInterface {
 public:
  AmbientLightSensorInterface() {}
  AmbientLightSensorInterface(const AmbientLightSensorInterface&) = delete;
  AmbientLightSensorInterface& operator=(const AmbientLightSensorInterface&) =
      delete;
  virtual ~AmbientLightSensorInterface() {}

  // Adds or removes observers for sensor readings.
  virtual void AddObserver(AmbientLightObserver* observer) = 0;
  virtual void RemoveObserver(AmbientLightObserver* observer) = 0;

  // Whether or not this ALS supports color readings.
  virtual bool IsColorSensor() const = 0;

  // Used by observers in their callback to get the raw reading from the sensor
  // for the ambient light level. -1 is considered an error value.
  virtual int GetAmbientLightLux() = 0;

  // Latest color temperature measured if supported. -1 is considered an error
  // value.
  virtual int GetColorTemperature() = 0;

  // Returns the path to the illuminance file being monitored, or an empty path
  // if a device has not yet been found.
  virtual base::FilePath GetIlluminancePath() const = 0;
};

}  // namespace system
}  // namespace power_manager

#endif  // POWER_MANAGER_POWERD_SYSTEM_AMBIENT_LIGHT_SENSOR_INTERFACE_H_
