// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <string>

#include <sys/stat.h>

#include "base/files/file_util.h"
#include "base/files/scoped_file.h"
#include "base/logging.h"
#include "base/strings/string_util.h"
#include "base/strings/stringprintf.h"
#include "base/time/time.h"

#include "bootid-logger/bootid_logger.h"
#include "bootid-logger/timestamp_util.h"

namespace {

constexpr char kBootLogFile[] = "/var/log/boot_id.log";
constexpr size_t kBootLogMaxEntries = 500;

}  // anonymous namespace

int main(int argc, char* argv[]) {
  if (argc > 2) {
    LOG(ERROR) << "Doesn't support any command line options.";
    exit(EXIT_FAILURE);
  }

  struct stat sb;
  stat(kBootLogFile, &sb);
  if ((sb.st_mode & S_IFMT) != S_IFREG) {
    // The file is not a regular file. Remove this.
    unlink(kBootLogFile);
  }

  // Keep only the recent boot id logs so that the logs can cover the time of
  // |GetOldestModifiedTime()|.
  // Note: we keep logs at least for 8 day, even If |GetOldestModifiedTime()|
  // returns a most recent time.
  base::Time first_timestamp_to_keep =
      std::min(GetOldestModifiedTime(),
               base::Time::Now() - base::TimeDelta::FromDays(8));

  if (WriteCurrentBootEntry(base::FilePath(kBootLogFile),
                            first_timestamp_to_keep, kBootLogMaxEntries))
    return 0;
  else
    return EXIT_FAILURE;
}
