#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
