#pragma once

#include "utils.hpp"

#include <cstdint>
#include <memory>
#include <string_view>

namespace boot_time_monitor
{

/**
 * An interface class for the Boot Manager APIs
 */
class BootManagerIface
{
  public:
    virtual ~BootManagerIface() = default;

    /**
     * Set a new checkpoint to Boot Manager
     *
     * @param[in] cpName - Checkpoint name
     * @param[in] externalWallTime - Current epoch time in milliseconds
     * @param[in] duration - Self measured duration in milliseconds
     */
    virtual void setCheckpoint(std::string_view cpName,
                               int64_t externalWallTime, int64_t duration) = 0;

    /**
     * Set a new duration to Boot Manager
     *
     * @param[in] durName - Duration name
     * @param[in] duration - Self measured duration in milliseconds
     */
    virtual void setDuration(std::string_view durName, int64_t duration) = 0;

    /**
     * Inform Boot Manager that current reboot process has completed.
     */
    virtual void notifyComplete() = 0;

    /**
     * Check if we are in a reboot process
     *
     * @return true if it's rebooting
     */
    virtual bool isRebooting() = 0;

    /**
     * Get current checkpoints
     *
     * @return vector of current checkpoints
     */
    virtual const std::vector<Checkpoint>& getCheckpoints() const = 0;

    /**
     * Get current durations
     *
     * @return vector of current durations
     */
    virtual const std::vector<Duration>& getDurations() const = 0;

    /**
     * Get previous checkpoints
     *
     * @return vector of previous checkpoints
     */
    virtual const std::vector<Checkpoint>& getPreCheckpoints() const = 0;

    /**
     * Get previous durations
     *
     * @return vector of previous durations
     */
    virtual const std::vector<Duration>& getPreDurations() const = 0;
};

class BootManager : public BootManagerIface
{
  public:
    constexpr static std::string_view kTransitionStagePrefix = "To_";

    BootManager(std::shared_ptr<UtilIface> util,
                const std::shared_ptr<FileUtilIface>& cpCSV,
                const std::shared_ptr<FileUtilIface>& durCSV);
    void setCheckpoint(std::string_view cpName, int64_t externalWallTime,
                       int64_t duration) override;
    void setDuration(std::string_view durName, int64_t duration) override;
    void notifyComplete() override;
    bool isRebooting() override;
    const std::vector<Checkpoint>& getCheckpoints() const override;
    const std::vector<Duration>& getDurations() const override;
    const std::vector<Checkpoint>& getPreCheckpoints() const override;
    const std::vector<Duration>& getPreDurations() const override;

  private:
    std::vector<Checkpoint> checkpoints;
    std::vector<Duration> durations;
    std::vector<Checkpoint> preCheckpoints;
    std::vector<Duration> preDurations;

    std::shared_ptr<UtilIface> util;
    std::shared_ptr<FileUtilIface> cpCSV;
    std::shared_ptr<FileUtilIface> durCSV;
};

} // namespace boot_time_monitor
