/*
 * Copyright (C) 2016+ AzerothCore <www.azerothcore.org>, released under GNU AGPL v3 license, you may redistribute it
 * and/or modify it under version 3 of the License, or (at your option), any later version.
 */

#ifndef _PLAYERBOT_EVENT_H
#define _PLAYERBOT_EVENT_H

#include "WorldPacket.h"

class ObjectGuid;
class Player;

class Event
{
public:
    Event(Event const& other) : source(other.source), param(other.param), packet(other.packet), owner(other.owner) {}
    Event() {}
    Event(std::string const source) : source(source) {}
    Event(std::string const source, std::string const param, Player* owner = nullptr)
        : source(source), param(param), owner(owner)
    {
    }
    Event(std::string const source, WorldPacket& packet, Player* owner = nullptr)
        : source(source), packet(packet), owner(owner)
    {
    }
    Event(std::string const source, ObjectGuid object, Player* owner = nullptr);
    virtual ~Event() {}

    std::string const GetSource() { return source; }
    std::string const getParam() { return param; }
    WorldPacket& getPacket() { return packet; }
    ObjectGuid getObject();
    Player* getOwner() { return owner; }
    bool operator!() const { return source.empty(); }

protected:
    std::string source;
    std::string param;
    WorldPacket packet;
    Player* owner = nullptr;
};

#endif
