#ifndef TRIGGER_H
#define TRIGGER_H

#include <memory>
#include <QGraphicsPixmapItem>
#include "events/qw_abstractevent.h"

/* QWTrigger
 * Represents an interactive in-game element. */

class QWStartDialogueEvent;

class QWTrigger : public QGraphicsPixmapItem, public QWTagHolder
{
private:
    QList<std::shared_ptr<QWAbstractEvent>> list_events;
    std::shared_ptr<QWAbstractEvent> examination_event;
    QString pix_path;

public:
    explicit QWTrigger(const QString &path);

    void clearEvents() noexcept;
    void setEvents(std::initializer_list<std::shared_ptr<QWAbstractEvent>> &&evs) noexcept;
    void setEvents(const QList<std::shared_ptr<QWAbstractEvent>> &evs) noexcept;
    void addEvents(std::initializer_list<std::shared_ptr<QWAbstractEvent>> &&evs) noexcept;
    void addEvents(const std::shared_ptr<QWAbstractEvent> &ev) noexcept;
    QList<std::shared_ptr<QWAbstractEvent>> events() const;

    void setCover(qreal x, qreal y, const QString &path) noexcept;
    void setCover(const QString &path) noexcept;
    inline QString path() const noexcept;

    void setExaminationDialogueEvent(const std::shared_ptr<QWAbstractEvent> &dialogue_event);
    void startExaminationDialogue() const;

    void activate() const;

    ////////////////////////

    void writeToJson(QJsonObject &trigger_data) override;
};



#endif // TRIGGER_H