#ifdef ARC_GLFW_WINDOW
#include "arc/graphics/window.h"
#include "window.h"

#include "arc/std/errno.h"
#include <GLFW/glfw3.h>
#include <stdio.h>

void framebufferSizeCallback(GLFWwindow *window, int width, int height){
    glViewport(0, 0, width, height);
}

void ARC_Window_Create(ARC_Window **window, ARC_WindowInfo *info){
    glfwInit();
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
    glfwWindowHint(GLFW_FLOATING, GLFW_TRUE);

    *window = (ARC_Window *) glfwCreateWindow(info->w, info->h, info->title, NULL, NULL);
    if(*window == NULL){
        printf("Failed to create GLFW window\n");
        glfwTerminate();
        arc_errno = ARC_ERRNO_NULL;
    }

    glfwMakeContextCurrent((GLFWwindow *)*window);
    glViewport(0, 0, info->w, info->h);
    glfwSetFramebufferSizeCallback((GLFWwindow *)*window, framebufferSizeCallback);
}

void ARC_Window_Destroy(ARC_Window *window){
    glfwTerminate();
}

#endif //ARC_GLFW
