#pragma once

#include "IAttachedElement.h"
#include "IElementData.h"
#include <memory>

namespace warfactory {

class IRegion : public IAttachedElement {
public:
    virtual ~IRegion() = default;

    virtual void setPosition(float x, float y) = 0;

    virtual void setMass(float mass) = 0;

    virtual void setRadius(float radius) = 0;

    virtual std::unique_ptr<IElementData> getRegionData() const = 0;
    virtual void setRegionData(std::unique_ptr<IElementData> data) = 0;

    virtual void updatePosition(float delta_x, float delta_y) = 0;

    virtual void updateMass(float delta_mass) = 0;

    virtual void updateRadius(float delta_radius) = 0;

    virtual float getAttachmentStrength(int attached_element_id) const = 0;
    virtual void setAttachmentStrength(int attached_element_id, float strength) = 0;

    virtual bool canFuseWith(const IRegion& other) const = 0;
    virtual void fuseWith(const IRegion& other) = 0;
};

} // namespace warfactory