#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
#include <time.h>

#include "../include/game.h"
#include "../include/const.h"
#include "../lib/raylib.h"

#if defined(PLATFORM_WEB)
    #include <emscripten/emscripten.h>
#else
#include <execinfo.h>

void handle_segfault(int signal) {
  void *list[10];
  size_t size = backtrace(list, 10);
  fprintf(stderr, "ERROR: signal %d:\n", signal);
  backtrace_symbols_fd(list, size, STDERR_FILENO);
  exit(1);
}
#endif

game_t *game = NULL;

void do_update(void) {
  game_update(game);
  game_draw(game);
}

int main(void) {
  printf("PID: %d\n", getpid());
  time_t t;
  srand((unsigned) time(&t));
  InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "Freezo");
  InitAudioDevice();
  game = game_create();
  SetTargetFPS(60);
  SetExitKey(0);
  #if defined(PLATFORM_WEB)
    emscripten_set_main_loop(do_update, 0, 1);
  #else
    struct sigaction sigint_action;
    sigint_action.sa_handler = handle_segfault;
    sigint_action.sa_flags = 0;
    sigemptyset(&sigint_action.sa_mask);
    sigaction(SIGSEGV, &sigint_action, NULL);
    while (!game->quit && !WindowShouldClose()) {
      do_update();
    }
  #endif
  CloseAudioDevice();
  CloseWindow();
  game_free(game);
  return 0;
}
