#include "../../include/sharedIncludes.h"
#include "eventHandler.h"
#include "init.h"


int screenWidth = 0;
int screenHeight = 0;
int screenBPP = 0;


void initOpenGL(void)
{
  glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);
  glEnable(GL_LIGHTING);

  GLfloat light0_position[] = {100.0, 100.0, 100.0, 1.0};
	GLfloat light0_whiteLight[] = {1.0, 1.0, 1.0, 0.0};
	GLfloat light0_ambient[] = {0.4, 0.4, 0.4, 1.0};
	glLightfv(GL_LIGHT0, GL_POSITION, light0_position);
	glLightfv(GL_LIGHT0, GL_DIFFUSE, light0_whiteLight);
	glLightfv(GL_LIGHT0, GL_SPECULAR, light0_whiteLight);
	glLightfv(GL_LIGHT0, GL_AMBIENT, light0_ambient);
  glEnable(GL_LIGHT0);

  GLfloat light2_ambient[] = {0.0, 0.1, 0.2, 1.0};
	GLfloat light2_diffuse[] = {0.0, 0.1, 0.5, 1.0};
	GLfloat light2_specular[] = {0.2, 0.3, 0.9, 1.0};
	GLfloat light2_position[] = {-50.0, -50.0, -50.0, 1.0};
	glLightfv(GL_LIGHT2, GL_AMBIENT, light2_ambient);
	glLightfv(GL_LIGHT2, GL_DIFFUSE, light2_diffuse);
	glLightfv(GL_LIGHT2, GL_SPECULAR, light2_specular);
	glLightfv(GL_LIGHT2, GL_POSITION, light2_position);
  glEnable(GL_LIGHT2);

  glClearColor(0, 0, 0, 0.0);
	glShadeModel(GL_FLAT);
	glEnable(GL_DEPTH_TEST);
  glEnable(GL_CULL_FACE);
	
	reshape(screenWidth, screenHeight);
}


void reshape(int w, int h)
{
	glViewport(0, 0, (GLsizei) w, (GLsizei) h);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluPerspective(50.0, (GLfloat) w/(GLfloat) h, 0.1, 900.0);
	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
}


void initSDL(void)
{
  /* Information about the current video settings. */
  const SDL_VideoInfo* info = NULL;
  int flags = 0;
  
  if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
  {
    fprintf( stderr, "Video initialization failed: %s\n", SDL_GetError( ) );
    quitProg( 1 );
  }
  
  info = SDL_GetVideoInfo( );
  if( !info )
  {
    fprintf( stderr, "Video query failed: %s\n", SDL_GetError( ) );
    quitProg( 1 );
  }
  
  screenWidth   = 640;
  screenHeight  = 480;
  screenBPP     = info->vfmt->BitsPerPixel;
  
  SDL_GL_SetAttribute( SDL_GL_RED_SIZE, 5 );
  SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, 5 );
  SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, 5 );
  SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16 );
  SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
  
  flags = SDL_OPENGL; //| SDL_FULLSCREEN;
  
  if( SDL_SetVideoMode( screenWidth, screenHeight, screenBPP, flags ) == 0 )
  {
    fprintf( stderr, "Video mode set failed: %s\n",
      SDL_GetError( ) );
    quitProg( 1 );
  }
  
  //SDL_ShowCursor(SDL_DISABLE);
  SDL_WarpMouse((int)(screenWidth/2)+(screenWidth/3), (int)(screenHeight/2));
}

