#pragma once

#include <SFML/System.hpp>
#include <SFML/Graphics.hpp>

#include "../tools/Math.h"

#include <memory>
#include <array>
#include <unordered_set>

namespace ltbl {
    class QuadtreeOccupant {
        friend class Quadtree;
        friend class QuadtreeNode;
        friend class DynamicQuadtree;
        friend class StaticQuadtree;

    private:
        class QuadtreeNode* _pQuadtreeNode;
        class Quadtree* _pQuadtree;

    public:
        QuadtreeOccupant()
            : _pQuadtreeNode(nullptr), _pQuadtree(nullptr)
        {}

        void quadtreeUpdate();
        void quadtreeRemove();

        virtual sf::FloatRect getAABB() const = 0;
    };
}