#include <attn/attention.hpp>
#include <attn/attn_common.hpp>
#include <attn/attn_dump.hpp>
#include <attn/attn_logging.hpp>
#include <sdbusplus/bus.hpp>
#include <util/dbus.hpp>
#include <util/trace.hpp>

namespace attn
{

/**
 * @brief Handle SBE vital attention
 *
 * @param i_attention Attention object
 * @return 0 indicates that the vital attention was successfully handled
 *         1 indicates that the vital attention was NOT successfully handled
 */
int handleVital(Attention* i_attention)
{
    int rc = RC_SUCCESS; // assume vital handled

    trace::inf("vital handler started");

    // if vital handling enabled, handle vital attention
    if (false == (i_attention->getConfig()->getFlag(enVital)))
    {
        trace::inf("vital handling disabled");
        rc = RC_NOT_HANDLED;
    }
    else
    {
        // wait for power fault handling before starting analyses
        sleepSeconds(POWER_FAULT_WAIT);

        // generate pel
        auto pelId = eventVital();

        // conditionally request dump
        if ((0 != pelId) && (util::dbus::HostRunningState::NotStarted ==
                             util::dbus::hostRunningState()))
        {
            requestDump(pelId, DumpParameters{0, DumpType::SBE});
        }

        // transition host
        util::dbus::transitionHost(util::dbus::HostState::Quiesce);
    }

    return rc;
}

} // namespace attn
