#pragma once

#include <util/ffdc.hpp>

namespace attn
{

// number of seconds to wait for power fault handling
constexpr int POWER_FAULT_WAIT = 10;

/** @brief Attention handler return codes */
enum ReturnCodes
{
    RC_SUCCESS = 0,
    RC_NOT_HANDLED = 1,
    RC_ANALYZER_ERROR = 2,
    RC_CFAM_ERROR = 3,
    RC_DBUS_ERROR = 4
};

/** @brief Code seciton for error reporing */
enum class AttnSection
{
    reserved = 0x0000,
    attnHandler = 0x0100,
    tiHandler = 0x0200,
    handlePhypTi = 0x0300,
    handleHbTi = 0x0400,
    addHbStatusRegs = 0x0500,
    attnLogging = 0x0600
};

/** @brief Attention handler error reason codes */
enum AttnCodes
{
    ATTN_NO_ERROR = 0,
    ATTN_INFO_NULL = 1,
    ATTN_PDBG_CFAM = 2,
    ATTN_PDBG_SCOM = 3,
    ATTN_INVALID_KEY = 4
};

/**
 * @brief Traces some regs for hostboot
 *
 * When we receive a Checkstop or special Attention Term Immediate,
 * hostboot wants some regs added to the error log. We will do this
 * by tracing them and then the traces will get added to the error
 * log later.
 *
 * @return nothing
 */
void addHbStatusRegs();

/** @brief Capture some scratch registers for PRD
 *
 * Capture some scratch register data that PRD can use to handle
 * cases where analysis may have been interrupted. The data will
 * be traced and also written to the user data section of a PEL.
 *
 * @param[out] o_files vector of FFDC files
 *
 * @return nothing
 */
void addPrdScratchRegs(std::vector<util::FFDCFile>& o_files);

/**
 * @brief Check for recoverable errors present
 *
 * @return true if any recoverable errors are present, else false
 */
bool recoverableErrors();

/**
 * @brief sleep for n-seconds
 *
 * @param[in] seconds number of seconds to sleep
 */
void sleepSeconds(const unsigned int seconds);

} // namespace attn
