#include "writefrudata.hpp"

#include <CLI/CLI.hpp>
#include <phosphor-logging/log.hpp>

#include <cstdlib>
#include <cstring>
#include <iostream>
#include <memory>

using namespace phosphor::logging;

//--------------------------------------------------------------------------
// This gets called by udev monitor soon after seeing hog plugs for EEPROMS.
//--------------------------------------------------------------------------
int main(int argc, char** argv)
{
    int rc = 0;
    uint8_t fruid;
    std::string eeprom_file;
    const int MAX_FRU_ID = 0xfe;

    CLI::App app{"OpenBMC IPMI-FRU-Parser"};
    app.add_option("-e,--eeprom", eeprom_file, "Absolute file name of eeprom")
        ->check(CLI::ExistingFile);
    app.add_option("-f,--fruid", fruid, "valid fru id in integer")
        ->check(CLI::Range(0, MAX_FRU_ID));

    // Read the arguments.
    CLI11_PARSE(app, argc, argv);

    // Now that we have the file that contains the eeprom data, go read it
    // and update the Inventory DB.
    auto bus = sdbusplus::bus::new_default();
    bool bmc_fru = true;
    rc = validateFRUArea(fruid, eeprom_file.c_str(), bus, bmc_fru);

    return (rc < 0 ? EXIT_FAILURE : EXIT_SUCCESS);
}
