// Copyright 2019 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 BIOD_CROS_FP_FIRMWARE_H_
#define BIOD_CROS_FP_FIRMWARE_H_

#include <string>

#include <base/files/file_path.h>
#include <base/macros.h>

namespace biod {

class CrosFpFirmware {
 public:
  enum class Status {
    kUninitialized,
    kOk,
    kNotFound,
    kOpenError,
    kBadFmap,
  };

  struct ImageVersion {
    std::string ro_version;
    std::string rw_version;
  };

  explicit CrosFpFirmware(const base::FilePath& image_path);
  CrosFpFirmware(const CrosFpFirmware&) = delete;
  CrosFpFirmware& operator=(const CrosFpFirmware&) = delete;
  virtual ~CrosFpFirmware() = default;
  base::FilePath GetPath() const;
  bool IsValid() const;
  Status GetStatus() const;
  std::string GetStatusString() const;
  const ImageVersion& GetVersion() const;

 protected:
  CrosFpFirmware() = default;

  void set_status(Status status) { status_ = status; }
  void set_version(const ImageVersion& version) { version_ = version; }

 private:
  base::FilePath path_;
  ImageVersion version_;
  Status status_ = Status::kUninitialized;
  friend class CrosFpFirmwareTest;

  void DecodeVersionFromFile();

  static std::string StatusToString(Status status);
};

}  // namespace biod

#endif  // BIOD_CROS_FP_FIRMWARE_H_
