#ifndef WINDOW_H
#define WINDOW_H

#include "c_cpp_aliases/aliases.h"
#include "vector/vec.h"
#include <SDL2/SDL_video.h>
#include <stdbool.h>

typedef struct {
  u8 a;
  u8 b;
  u8 g;
  u8 r;
} rgba_t;

typedef struct {
  union {
    rgba_t rgba;
    u32 colour;
  };
} colour_t;

typedef struct {
  u32 width;
  u32 height;
  u32 half_width;
  u32 half_height;
  const char *title;
  SDL_Window *window;
  SDL_Surface *front_buffer;
  SDL_Surface *back_buffer;
} window_t;

bool init_window(window_t *wnd, u32 width, u32 height, const char *title);
void close_window(window_t *wnd);

void clear_window(window_t *wnd, colour_t colour);
void set_pixel(window_t *wnd, i32 x, i32 y, colour_t colour);
void swap_buffers(window_t *wnd);

vec3f_t window_to_viewport(window_t *wnd, i32 x, i32 y, vec3f_t viewport);

#endif // !WINDOW_H