/* Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
   file Copyright.txt or https://cmake.org/licensing for details.  */
#pragma once

#include "cmConfigure.h" // IWYU pragma: keep

#include <map>
#include <string>
#include <vector>

struct ImportedCxxModuleInfo
{
  std::string const Name;
  std::vector<std::string> const AvailableBmis;
};

struct ImportedCxxModuleGeneratorInfo
{
  std::string const BmiName;
};

struct ImportedCxxModuleLookup
{
  ImportedCxxModuleLookup() = default;
  ~ImportedCxxModuleLookup() = default;

  bool Initialized() const;
  void Initialize(std::string const& importedModules);

  std::string BmiNameForSource(std::string const& path);

private:
  bool DoneInit = false;
  std::map<std::string, ImportedCxxModuleInfo> ImportedInfo;
  std::map<std::string, ImportedCxxModuleGeneratorInfo> GeneratorInfo;
};
