#pragma once

#include <stdio.h>
#include <cassert>
#include <shadow.h>
#include <phosphor-logging/log.hpp>
#include <phosphor-logging/elog.hpp>
#include <xyz/openbmc_project/Common/error.hpp>
#include <phosphor-logging/elog-errors.hpp>
namespace phosphor
{
namespace user
{
namespace shadow
{

using InternalFailure =
    sdbusplus::xyz::openbmc_project::Common::Error::InternalFailure;
using namespace phosphor::logging;

/** @class Lock
 *  @brief Responsible for locking and unlocking /etc/shadow
 */
class Lock
{
  public:
    Lock(const Lock&) = delete;
    Lock& operator=(const Lock&) = delete;
    Lock(Lock&&) = delete;
    Lock& operator=(Lock&&) = delete;

    /** @brief Default constructor that just locks the shadow file */
    Lock()
    {
        if (!lckpwdf())
        {
            log<level::ERR>("Locking Shadow failed");
            elog<InternalFailure>();
        }
    }
    ~Lock()
    {
        if (!ulckpwdf())
        {
            log<level::ERR>("Un-Locking Shadow failed");
            elog<InternalFailure>();
        }
    }
};

} // namespace shadow
} // namespace user
} // namespace phosphor
