// Copyright (C) 2011 Valeriano Alfonso Rodriguez (Kableado)

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

#include "GameLib.h"
extern int gamelib_debug;

#include "GameEnts.h"
#include "GameMap.h"

int play;

int game_started=0;
int game_level=0;
int game_level_point=1;
int game_level_reset=0;

DrawImg img_logo;
DrawImg img_end;

DrawFnt font;

int ProcTitle(){
	if(	Input_GetKey(InputKey_Jump)==InputKey_Pressed||
		Input_GetKey(InputKey_Continue)==InputKey_Pressed)
	{
		play=1;
		return(0);
	}
	if(	(Input_GetKey(InputKey_Action1)==InputKey_Pressed||
		Input_GetKey(InputKey_Action2)==InputKey_Pressed) &&
		game_started)
	{
		play=1;
		game_started=0;
		return(0);
	}
	return(1);
}

void DrawTitle(){
	Draw_Clean(0,0,0);
	Draw_SetColor(1.0f,1.0f,1.0f,1.0f);

	Draw_DrawImg(img_logo,170,100);
	if(!game_started){
		Draw_DrawText(font,"Press [Space] to Start.",300,300);
	}else{
		Draw_DrawText(font,"Press [Space] to Continue.",300,300);
		Draw_DrawText(font,"Press [X] to Start.",300,316);
	}

	Draw_DrawText(font,"By Kableado (VAR)",200,440);

}


int ProcEnd(){
	if(	Input_GetKey(InputKey_Jump)==InputKey_Pressed||
		Input_GetKey(InputKey_Continue)==InputKey_Pressed)
	{
		return(0);
	}
	return(1);
}


void DrawEnd(){
	Draw_Clean(0,0,0);
	Draw_SetColor(1.0f,1.0f,1.0f,1.0f);

	Draw_DrawImg(img_end,170,100);

	Draw_DrawText(font,"Congratulations you saved the kittie!",250,320);
	Draw_DrawText(font,"Thanks for playing!",250,350);
	Draw_DrawText(font,"Press [Space] to Title.",300,400);
}


void ProcGame(){
}

void PostProcGame(){

	if(game_level_reset){
		if(Input_AnyKey()){
			if(GameMap_CreateLevel(game_level,game_level_point)){
				if(game_level_reset==2){
					int  pos[2]={0,0};
					GameLib_SetPos(pos);
				}
				game_level_reset=0;
			}else{
				play=2;
				GameLib_BreakLoop();
			}
		}
	}
}

void DrawGame(){
	char string[1024];

	Draw_SetColor(1.0f,1.0f,1.0f,1.0f);

	sprintf(string, "Level: %d.%d",game_level+1,game_level_point);
		Draw_SetColor(0,0,0,0.5f);
	Draw_DrawText(font,string,17,17);
		Draw_SetColor(1,1,1,1);
	Draw_DrawText(font,string,16,16);

	if(game_level_reset==2){
		Draw_SetColor(0,0,0,0.5f);
		Draw_DrawText(font,"Level Complete",301,301);
		Draw_SetColor(1,1,0,1);
		Draw_DrawText(font,"Level Complete.",300,300);
	}else
	if(game_level_reset==1){
		Draw_SetColor(0,0,0,0.5f);
		Draw_DrawText(font,"You are dead.",301,301);
		Draw_SetColor(1,0,0,1);
		Draw_DrawText(font,"You are dead.",300,300);
	}else
	if(game_level_reset==3){
		play=2;
		GameLib_BreakLoop();
	}
}


void LoadGame(char *fname){
	FILE *f;

	f=fopen(fname,"rb");
	if(!f)
		return;

	fread(&game_level,1,sizeof(int),f);
	fread(&game_level_point,1,sizeof(int),f);

	GameMap_CreateLevel(game_level,game_level_point);
	game_started=1;

	fclose(f);
}

void SaveGame(char *fname){
	FILE *f;

	f=fopen(fname,"wb");
	if(!f)
		return;

	fwrite(&game_level,1,sizeof(int),f);
	fwrite(&game_level_point,1,sizeof(int),f);


	fclose(f);
}


int main(int argc,char *argv[]){

	srand(time(NULL));

	if (argc>1) {
		if (!strcmp(argv[1],"debug")) {
			gamelib_debug=1;
			printf("Debug Mode Activated!\n");
		}
	}

	GameLib_Init(640,480,"Game",60);

	img_logo=Draw_LoadImage("data/logo.bmp");
	img_end=Draw_LoadImage("data/end.bmp");

	font=Draw_DefaultFont(255,255,255,255);

	GameEnts_Init();

	LoadGame("game.save");

	do{
		play=0;
		Draw_Loop(ProcTitle,DrawTitle);
		if(play==1){
			if(!game_started){
				int  pos[2]={0,0};
				GameLib_SetPos(pos);
				game_level=0;
				game_level_point=1;
				game_level_reset=0;

				GameMap_CreateLevel(game_level,game_level_point);
				game_started=1;
			}
			GameLib_Loop(ProcGame,PostProcGame,DrawGame);
		}
		if(play==2){
			Draw_Loop(ProcEnd,DrawEnd);
		}
	}while(play);


	SaveGame("game.save");

	return(0);
}
