#include <igl/get_seconds.h>
using namespace igl;
#include <cstdio>
#include <cmath>
using namespace std;

#if defined(__APPLE__)
#   include <GLUT/glut.h>
#else
#   include <GL/glut.h>
#endif

const int width = 1088;
const int height = 612;
int frame_counter = 0;
double start_time;
// number of frames before computing fps
const int frames_per_lap = 1000;

void Display(void)
{
  // Clear the screen with current background color
  glClearColor(
    fabs(sin(get_seconds())),
    fabs(sin(get_seconds()/3)),
    fabs(sin(get_seconds()/7)),
    0.0);
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  // Present frame buffer
  glutSwapBuffers();
  // Recall Display at next frame
  glutPostRedisplay();

  frame_counter++;
  if(frame_counter == frames_per_lap)
  {
    double elapsed_time = get_seconds()-start_time;
    printf("%g fps: %d frames in %g seconds\n",
      (double)frame_counter/elapsed_time,frame_counter,elapsed_time);
    // reset frame counter and timer
    start_time = get_seconds();
    frame_counter = 0;
  }
}

int main(int argc,char * argv[])
{
  // Initialize GLUT
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
  glutInitWindowSize(width, height);
  // Center window
  glutInitWindowPosition(
      glutGet(GLUT_SCREEN_WIDTH)/2-glutGet(GLUT_INIT_WINDOW_WIDTH)/2,
      glutGet(GLUT_SCREEN_HEIGHT)/2-glutGet(GLUT_INIT_WINDOW_HEIGHT)/2);
  glutCreateWindow("");
  glutCreateMenu(NULL);
  // Set GLUT callbacks
  glutDisplayFunc(Display);
  //glutReshapeFunc(Reshape);

  // initialize timer
  start_time = get_seconds();
  // Call the GLUT main loop
  glutMainLoop();
  return 0;
}