#pragma once

#include "erupt_pch.hpp"

#include "erupt/core/base.hpp"
#include "erupt/events/event.hpp"

namespace Erupt
{
  struct WindowProps
  {
    std::string Title;
    uint32_t Width;
    uint32_t Height;

    WindowProps(const std::string &title = "Erupt Engine", uint32_t width = 1024, uint32_t height = 720) : Title(title), Width(width), Height(height) {}
  };

  class ERUPT_API Window
  {
  public:
    using EventCallbackFn = std::function<void(Event &)>;

    virtual ~Window() {};

    virtual void OnUpdate() = 0;

    virtual uint32_t GetWidth() const = 0;
    virtual uint32_t GetHeight() const = 0;

    // Window attributes
    virtual void SetEventCallback(const EventCallbackFn &callback) = 0;
    virtual void SetVSync(bool enabled) = 0;
    virtual bool IsVSync() const = 0;

    static Window* Create(const WindowProps &props = WindowProps());
  };

}
