// Copyright 2020 The Chromium 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 CHROMECAST_SYSTEM_REBOOT_FUCHSIA_COMPONENT_RESTART_REASON_H_
#define CHROMECAST_SYSTEM_REBOOT_FUCHSIA_COMPONENT_RESTART_REASON_H_

#include "base/files/file_path.h"
#include "base/strings/string_piece.h"
#include "chromecast/public/reboot_shlib.h"

namespace chromecast {

// This class tracks the restart reason of the Cast component using temp files
// to indicate whether it restarts gracefully or ungracefully. On Fuchsia, the
// Cast component can restart according to plan, or by platform request,
// without the need for the device to reboot.
// No more than one instance of this class variable should be used per component
// to guarantee the correctness of the restart reason.
//
// The caller/user of this class must provide isolated-temp feature in sandbox.
class FuchsiaComponentRestartReason {
 public:
  FuchsiaComponentRestartReason();

  // Whether the component restarted and if so, for which reason (graceful or
  // ungraceful).
  bool GetRestartReason(RebootShlib::RebootSource* restart_reason);

  // Registers a graceful teardown of the component so we can distinguish
  // between the first start of a boot cycle and a restart during the same
  // boot cycle.
  void RegisterTeardown();

  // This can be called once during initialization (not necessary).
  // But is necessary during testing if SetUp is shared.
  void ResetRestartCheck();

  // Change tmp folder path for testing purpose.
  // Not necessary for production use.
  const base::FilePath& SetFlagFileDirForTesting(const base::FilePath& sub);

 private:
  // To change tmp directory for testing purpose when run in parallel.
  base::FilePath tmp_dir_;

  bool restart_checked_ = false;
  bool was_restart_ = true;
  RebootShlib::RebootSource restart_reason_{RebootShlib::RebootSource::UNKNOWN};
};

}  // namespace chromecast

#endif  // CHROMECAST_SYSTEM_REBOOT_FUCHSIA_COMPONENT_RESTART_REASON_H_
