/******************************************************************************
  This source file is part of the Avogadro project.
  This source code is released under the 3-Clause BSD License, (see "LICENSE").
******************************************************************************/

#ifndef AVOGADRO_QTGUI_ATOMUTILITIES_H
#define AVOGADRO_QTGUI_ATOMUTILITIES_H

#include "avogadrocoreexport.h"

#include <avogadro/core/molecule.h>

#include <vector>

namespace Avogadro::Core {
class Atom;
class Molecule;

class AVOGADROCORE_EXPORT AtomUtilities
{
public:
  /**
   * Perceive the geometry / hybridization bonded to @a atom.
   * Ideally, the client should cache the hybridization number
   * by calling setHybridization() later
   */
  static AtomHybridization perceiveHybridization(const Atom& atom);

  /**
   * Generate a new bond vector (unit length)
   */
  static Vector3 generateNewBondVector(
    const Atom& atom, const std::vector<Vector3>& currentVectors,
    AtomHybridization hybridization);

private:
  AtomUtilities();  // Not implemented
  ~AtomUtilities(); // Not implemented
};

} // namespace Avogadro::Core

#endif // AVOGADRO_QTGUI_ATOMUTILITIES_H
