#ifndef APPLICATION_EVENT_HPP
#define APPLICATION_EVENT_HPP

#include "event.hpp"

namespace OpenEngine {
    class OE_API WindowResizeEvent
        : public Event
    {
        public:
            WindowResizeEvent(unsigned int width, unsigned int height)
                : width(width), height(height)
            {
            }

            inline unsigned int GetWidth() const { return width; }
            inline unsigned int GetHeight() const { return height; }

            std::string ToString() const override;

            EVENT_CLASS_TYPE(WindowResized)
            EVENT_CLASS_CATEGORY(EventCategoryApplication)

        private:
            unsigned int width, height;
    };

    class OE_API WindowCloseEvent
        : public Event
    {
        public:
            WindowCloseEvent() {}

            std::string ToString() const override;

            EVENT_CLASS_TYPE(WindowClose)
            EVENT_CLASS_CATEGORY(EventCategoryApplication)
    };

    class OE_API AppUpdateEvent 
        : public Event
    {
        public:
            AppUpdateEvent() {}

            std::string ToString() const override;

            EVENT_CLASS_TYPE(AppUpdate)
            EVENT_CLASS_CATEGORY(EventCategoryApplication)
    };
}

#endif // APPLICATION_EVENT_HPP
