#pragma once
#include <Eigen/Dense>
#include "Data/Rod2dMulti.hpp"
#include "Data/Simulation.h"
class ForceMulti {
   private:
    std::vector<Eigen::Vector2d> m_force;
    std::vector<double> m_torque;

   public:
    explicit ForceMulti(size_t num_particles);
    Eigen::Vector2d force(Eigen::Vector2d pos1, Eigen::Vector2d pos2,
                          const Simulation& sim);
    double torque(Eigen::Vector2d pos1, Eigen::Vector2d e1,
                  Eigen::Vector2d pos2, Eigen::Vector2d e2,
                  const Simulation& sim);
    void force_torque(const Rod2dMulti& rods, const Simulation &sim);
    [[nodiscard]] const std::vector<double>& get_torque() const;
    [[nodiscard]] const std::vector<Eigen::Vector2d>& get_force() const;
};
