#pragma once

#include "qc/integrals.hpp"
#include "qc/matrix.hpp"

#include <cstddef>
#include <vector>

namespace qc {

struct RhfResult {
  double electronic_energy{0.0};
  double nuclear_repulsion{0.0};
  double total_energy{0.0};
  Vector orbital_energies;
  Matrix C;
  Matrix P;
  int iterations{0};
  bool converged{false};
};

RhfResult rhf_closed_shell(const MolecularIntegrals& ints, std::size_t n_electrons,
                           double conv_tol = 1e-10, int max_iter = 100,
                           int diis_subspace = 6,
                           const std::vector<Atom>* atoms = nullptr);

}  // namespace qc
