#pragma once

#include <string>
#include "DataTypes.h"

class MeshLoader {
public:
    virtual void loadMesh(const std::string &) = 0;

    std::vector<Node> getNodes();

    std::vector<FiniteElement> getFiniteElements();

    std::vector<BoundaryElement> getBoundaryElements();

    //метод, позволяющий найти КЭ по ID трех его вершинных узлов
    FiniteElement getElement(unsigned int, unsigned int, unsigned int);

    //метод, позволяющий найти КЭ по ребру, заданному с помощью ID двух узлов
    FiniteElement getElement(unsigned int, unsigned int);

    //метод, возвращающий контейнер граничных узлов по ID границы
    std::vector<Node> getBoundaryNodes(unsigned int);

    //метод, возвращающий контейнер КЭ с заданным ID области
    std::vector<FiniteElement> getFiniteElements(unsigned int);

    //метод, возвращающий контейнер граничных КЭ с заданным ID границы
    std::vector<BoundaryElement> getBoundaryElements(unsigned int);

    //метод, производящий вставку новых узлов в середины ребер существующих КЭ
    void insert(Node *);

    //метод, создающий контейнер, n-ый элемент которого хранит контейнер всех «соседей» по ребрам для узла n
    std::vector<std::vector<Node>> makeVectorOfNeighbours();

    virtual ~git init() = default;
};

