#include "update.hpp"

#include "update_manager.hpp"

namespace pldm
{
namespace fw_update
{

sdbusplus::object_path Update::startUpdate(
    sdbusplus::message::unix_fd image,
    ApplyTimeIntf::RequestedApplyTimes applyTime [[maybe_unused]])
{
    namespace software = sdbusplus::xyz::openbmc_project::Software::server;
    // If a firmware activation of a package is in progress, don't proceed with
    // package processing
    if (updateManager->activation)
    {
        if (updateManager->activation->activation() ==
            software::Activation::Activations::Activating)
        {
            throw sdbusplus::xyz::openbmc_project::Common::Error::Unavailable();
        }
        else
        {
            updateManager->clearActivationInfo();
        }
    }

    info("Starting update for image {FD}", "FD", image.fd);
    char buffer[4096];
    ssize_t bytesRead = 0;
    imageStream.str(std::string());

    while ((bytesRead = read(image, buffer, sizeof(buffer))) > 0)
    {
        imageStream.write(buffer, bytesRead);
    }

    if (bytesRead < 0)
    {
        throw std::runtime_error("Failed to read image file descriptor");
    }

    return sdbusplus::object_path(updateManager->processStreamDefer(
        imageStream, imageStream.str().size()));
}

} // namespace fw_update
} // namespace pldm
