#ifndef PW_SYSTEM_WINDOW_HPP
#define PW_SYSTEM_WINDOW_HPP

#include <pw/core/globals.hpp>
#include <pw/core/size.hpp>
#include <pw/core/point.hpp>

#include <functional>

namespace pw {

class window {
public:

    typedef std::function<void(window&)> on_update_t;

    window();
    ~window();

    bool update();

	void set_title(const std::string& title);

	void set_size(const size& s);
    pw::size size() const;
    pw::size client_size() const;

	void set_position(const point& p);
	point position() const;

    typedef void drop_callback;

    bool fullscreen() const;
    void set_fullscreen(bool use_fullscreen);

    void set_on_update(on_update_t f) { _on_update = f; }

    bool visible() const;
    void set_visible(bool is_visible);
protected:

	struct impl;
	std::unique_ptr<impl> _impl;

    on_update_t _on_update;

};

}

#endif
