#ifndef WAYLAND_WINDOW_H
#define WAYLAND_WINDOW_H

#include <pthread.h>
#include <wayland-client.h>
#include "figure.h"

struct window_draw_info {
    uint8_t *data;
    int32_t width;
    int32_t height;
    struct figure_animation_info figure;
    pthread_mutex_t figure_mutex;
};

/* Данные одного Wayland-окна (одна поверхность) */
struct wayland_window {
    int id;
    struct wl_surface *wl_surface;
    struct wl_buffer *buffer;
    struct wl_callback *frame_callback;
    struct xdg_surface *xdg_surface;
    struct xdg_toplevel *xdg_toplevel;
    struct wl_event_queue *queue; /* очередь событий для окна */
    struct window_draw_info draw_info;
    int need_close;
};


/* Инициализация окна; структура предоставляется вызывающим */
int window_init(struct wl_display *display, struct wl_event_queue *queue, struct wayland_window *win);

/* Нечётное значение — окно запросило закрытие */
int window_should_close(struct wayland_window *win);

/* Уничтожить окно и связанные ресурсы */
void window_destroy(struct wayland_window *win);

#endif
