/*******************************************************************************************
*
*   raylib - Android Basic Game template
*
*   <Game title>
*   <Game description>
*
*   This game has been created using raylib v1.2 (www.raylib.com)
*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
*
*   Copyright (c) 2014 Ramon Santamaria (Ray San - raysan@raysanweb.com)
*
********************************************************************************************/

#include "raylib.h"

//----------------------------------------------------------------------------------
// Types and Structures Definition
//----------------------------------------------------------------------------------
typedef enum GameScreen { LOGO, TITLE, GAMEPLAY, ENDING } GameScreen;

//----------------------------------------------------------------------------------
// Android Main entry point
//----------------------------------------------------------------------------------
void android_main(struct android_app *app) 
{
    // Initialization
    //--------------------------------------------------------------------------------------
    const int screenWidth = 800;
    const int screenHeight = 450;
    
    GameScreen currentScreen = LOGO;

    InitWindow(screenWidth, screenHeight, app);
    
    // TODO: Initialize all required variables and load all required data here!

    InitAudioDevice();                  // Initialize audio device
    
    Sound fx = LoadSound("coin.wav");   // Load WAV audio file (placed on assets folder)
    
    Texture2D texture = LoadTexture("raylib_logo.png");     // Load texture (placed on assets folder)

    int framesCounter = 0;          // Used to count frames
    
    Music ambient = LoadMusicStream("ambient.ogg");
    PlayMusicStream(ambient);
    
    SetTargetFPS(60);               // Not required on Android, already locked to 60 fps
    //--------------------------------------------------------------------------------------
    
    // Main game loop
    while (!WindowShouldClose())    // Detect window close button or ESC key
    {
        // Update
        //----------------------------------------------------------------------------------
        UpdateMusicStream(ambient);
        
        switch(currentScreen) 
        {
            case LOGO: 
            {
                // TODO: Update LOGO screen variables here!

                framesCounter++;    // Count frames

                // Wait for 4 seconds (240 frames) before jumping to TITLE screen
                if (framesCounter > 240)
                {
                    currentScreen = TITLE;
                }
            } break;
            case TITLE: 
            {
                // TODO: Update TITLE screen variables here!

                // Press enter to change to GAMEPLAY screen
                if (IsGestureDetected(GESTURE_TAP))
                {
                    PlaySound(fx);
                    currentScreen = GAMEPLAY;
                }
            } break;
            case GAMEPLAY:
            { 
                // TODO: Update GAMEPLAY screen variables here!

                // Press enter to change to ENDING screen
                if (IsGestureDetected(GESTURE_TAP))
                {  
                    PlaySound(fx);
                    currentScreen = ENDING;
                } 
            } break;
            case ENDING: 
            {
                // TODO: Update ENDING screen variables here!

                // Press enter to return to TITLE screen
                if (IsGestureDetected(GESTURE_TAP))
                {
                    PlaySound(fx);
                    currentScreen = TITLE;
                }  
            } break;
            default: break;
        }
        //----------------------------------------------------------------------------------
        
        // Draw
        //----------------------------------------------------------------------------------
        BeginDrawing();
        
            ClearBackground(RAYWHITE);
            
            switch(currentScreen) 
            {
                case LOGO: 
                {
                    // TODO: Draw LOGO screen here!
                    DrawText("LOGO SCREEN", 20, 20, 40, LIGHTGRAY);
                    DrawTexture(texture, screenWidth/2 - texture.width/2, screenHeight/2 - texture.height/2, WHITE);
                    DrawText("WAIT for 4 SECONDS...", 290, 400, 20, GRAY);
                    
                } break;
                case TITLE: 
                {
                    // TODO: Draw TITLE screen here!
                    DrawRectangle(0, 0, screenWidth, screenHeight, GREEN);
                    DrawText("TITLE SCREEN", 20, 20, 40, DARKGREEN);
                    DrawText("TAP SCREEN to JUMP to GAMEPLAY SCREEN", 160, 220, 20, DARKGREEN);
                    
                } break;
                case GAMEPLAY:
                { 
                    // TODO: Draw GAMEPLAY screen here!
                    DrawRectangle(0, 0, screenWidth, screenHeight, PURPLE);
                    DrawText("GAMEPLAY SCREEN", 20, 20, 40, MAROON);
                    DrawText("TAP SCREEN to JUMP to ENDING SCREEN", 170, 220, 20, MAROON);

                } break;
                case ENDING: 
                {
                    // TODO: Draw ENDING screen here!
                    DrawRectangle(0, 0, screenWidth, screenHeight, BLUE);
                    DrawText("ENDING SCREEN", 20, 20, 40, DARKBLUE);
                    DrawText("TAP SCREEN to RETURN to TITLE SCREEN", 160, 220, 20, DARKBLUE);
                    
                } break;
                default: break;
            }
        
        EndDrawing();
        //----------------------------------------------------------------------------------
    }

    // De-Initialization
    //--------------------------------------------------------------------------------------
    
    // TODO: Unload all loaded data (textures, fonts, audio) here!

    UnloadSound(fx);            // Unload sound data
    UnloadMusicStream(ambient); // Unload music stream data
    
    CloseAudioDevice();     // Close audio device (music streaming is automatically stopped)
    
    UnloadTexture(texture); // Unload texture data
    
    CloseWindow();          // Close window and OpenGL context
    //--------------------------------------------------------------------------------------
}