#include "SDL/SDL.h"

//Write a function that moves an image based on which arrow keys are pressed.
//something like
//void move_image(direction, image);




int main ( int argc, char *argv[] )
{
  /* initialize SDL */
  if (SDL_Init(SDL_INIT_VIDEO) != 0){
		printf("Unable to init SDL!: %s\n", SDL_GetError());
		return 1;
	}

  /* set the title bar */
  SDL_WM_SetCaption("SDL Test", "SDL Test");
	
	/* init surfaces */
	SDL_Surface* screen;
	SDL_Surface* temp;
	SDL_Surface* bg;
	SDL_Surface* top_image;
	SDL_Rect src, dest;


  /* create window of size 640x480 in hi-color (16-bit) mode*/ 
	screen = SDL_SetVideoMode(640, 480, 16, 0);

	if (screen == NULL){
		printf("Unable to set video mode: %s\n", SDL_GetError());
		return 1;
	}
	atexit(SDL_Quit);

  /* load bitmap to temp surface */
  temp = SDL_LoadBMP("sdl_logo.bmp");

	if (temp == NULL){
		printf("Unable to find image!!: %s\n", SDL_GetError());
		return 1;
	}

  /* convert bitmap to display format */
  bg = SDL_DisplayFormat(temp);
	if (bg == NULL){
		printf("Unable to format image!: %s\n", SDL_GetError());
	}


  /* free the temp surface 
	 * What we are doing above, with temp is simply
	 * making everything easier to deal with
	 * then freeing the extra memory space.
	 * i.e: We could have just as easily done
	 * SDL_DisplayFormat(SDL_LoadBMP("sdl_logo.bmp"));*/
  SDL_FreeSurface(temp);

	/* load top_image image to practice blit on top of surface*/
	temp = SDL_LoadBMP("dinowheel.bmp");
	if (temp == NULL){
		printf("Unable to load top_image: %s/n", SDL_GetError());
		return 1;
	}

	top_image = SDL_DisplayFormat(temp);
	if (top_image == NULL){
		printf("Unable to format top_image: %s/n", SDL_GetError());
		return 1;
	}

	SDL_FreeSurface(temp);

	src.x = 0;
	src.y = 0;
	src.w = top_image->w; /* copy entire image */
	src.h = top_image->h;
  /* Could also do "dest = src" if they were to start at the same spot */
	dest.x = 25;
	dest.y = 25;
	dest.w = top_image->w;
	dest.h = top_image->h;

  SDL_Event event;
  int gameover = 0;

  /* message pump */
  while (!gameover)
  {
    /* look for an event */
    if (SDL_PollEvent(&event)) {
      /* an event was found */
      switch (event.type) {
        /* close button clicked */
        case SDL_QUIT:
          gameover = 1;
          break;

        /* handle the keyboard */
        case SDL_KEYDOWN:
          switch (event.key.keysym.sym) {
            case SDLK_ESCAPE:
            case SDLK_q:
              gameover = 1;
              break;
						case SDLK_w:
							printf("You just pressed 'w'\n");
							break;
          }
          break;
      }
    }

    /* draw the background */
    SDL_BlitSurface(bg, NULL, screen, NULL);

		/* Blit top_image to the screen */
		SDL_BlitSurface(top_image, &src, screen, &dest);

    /* update the screen */
    SDL_UpdateRect(screen, 0, 0, 0, 0);
  }

  /* free the background surface */
  SDL_FreeSurface(bg);

	/* free top_image */
	SDL_FreeSurface(top_image);

  /* cleanup SDL */
  SDL_Quit();

  return 0;
}