#include "mpact/sim/util/asm/resolver.h"

#include <cstdint>
#include <string>

#include "absl/container/flat_hash_map.h"
#include "absl/status/status.h"
#include "absl/status/statusor.h"
#include "absl/strings/str_cat.h"
#include "absl/strings/string_view.h"
#include "elfio/elf_types.hpp"
#include "elfio/elfio_section.hpp"

namespace mpact::sim::util::assembler {

absl::StatusOr<uint64_t> ZeroResolver::Resolve(absl::string_view text) {
  // Any symbol name should be added to the symbol table as an undefined
  // symbol if it is not already there. When the symbol is defined, the
  // symbol table will be updated. In the case of generating an executable
  // ELF file, any unresolved symbols will result in an error. When generating
  // an object file, any unresolved symbols will remain in the symbol table
  // and must be handled by the linker.
  add_symbol_fcn_(text);
  // Return 0 for any symbol name.
  return 0;
}

SymbolResolver::SymbolResolver(
    int elf_file_class, ELFIO::section* symtab,
    const absl::flat_hash_map<std::string, ELFIO::Elf_Word>& symbol_indices)
    : elf_file_class_(elf_file_class),
      symtab_(symtab),
      symbol_indices_(symbol_indices) {}

absl::StatusOr<uint64_t> SymbolResolver::Resolve(absl::string_view text) {
  auto iter = symbol_indices_.find(text);
  if (iter == symbol_indices_.end()) {
    return absl::InvalidArgumentError(
        absl::StrCat("SymbolResolver: Symbol '", text, "' not found"));
  }
  auto index = iter->second;
  if (elf_file_class_ == ELFCLASS64) {
    auto* sym = reinterpret_cast<const ELFIO::Elf64_Sym*>(symtab_->get_data());
    return sym[index].st_value;
  } else if (elf_file_class_ == ELFCLASS32) {
    auto* sym = reinterpret_cast<const ELFIO::Elf32_Sym*>(symtab_->get_data());
    return sym[index].st_value;
  }
  return absl::InternalError("Unsupported ELF file class");
}

}  // namespace mpact::sim::util::assembler
