// Copyright 2022 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <base/logging.h>
#include <utility>

#include "secagentd/bpf_skeleton_wrappers.h"
#include "secagentd/factories.h"
#include "secagentd/plugins.h"
#include "secagentd/skeleton_factory.h"

namespace secagentd {

std::unique_ptr<PluginInterface> BpfPluginFactory::CreateProcessPlugin() {
  auto factory = std::make_unique<ProcessBpfSkeletonFactory>();
  return std::make_unique<ProcessPlugin>(std::move(factory));
}

std::unique_ptr<BpfSkeletonInterface> ProcessBpfSkeletonFactory::Create(
    BpfCallbacks cbs) {
  static uint32_t instance_count{0};
  if (instance_count > 0) {
    return nullptr;
  }

  auto rv = std::make_unique<ProcessBpfSkeleton>();

  rv->RegisterCallbacks(std::move(cbs));
  absl::Status status = rv->LoadAndAttach();
  if (status.ok()) {
    instance_count += 1;
    return rv;
  }
  LOG(ERROR) << status.message();
  return nullptr;
}
}  // namespace secagentd
