#ifndef APPLICATION_EVENT_HPP
#define APPLICATION_EVENT_HPP

#include "open_engine/events/event.hpp"

namespace OpenEngine {
    class 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 WindowCloseEvent
        : public Event
    {
        public:
            WindowCloseEvent() = default;

            std::string ToString() const override;

            EVENT_CLASS_TYPE(WindowClose)
            EVENT_CLASS_CATEGORY(EventCategoryApplication)
    };

    class AppUpdateEvent 
        : public Event
    {
        public:
            AppUpdateEvent() = default;

            std::string ToString() const override;

            EVENT_CLASS_TYPE(AppUpdate)
            EVENT_CLASS_CATEGORY(EventCategoryApplication)
    };
}

#endif // APPLICATION_EVENT_HPP
