/*******************************************************************************************
*
*   rLuaLauncher v1.1 - raylib Lua Launcher
*
*   DEPENDENCIES:
*
*   raylib 2.0 - This program uses latest raylib version (www.raylib.com)
*   Lua 5.3.3  - http://luabinaries.sourceforge.net/download.html
*
*   COMPILATION (GCC):
*
*   gcc -o rlualauncher.exe rlualauncher.c -s rlualauncher.rc.o -I. -Iexternal/lua/include \
*       -Lexternal/lua/lib -lraylib -lopengl32 -lgdi32 -llua53 -std=c99 -Wall -Wl,--subsystem,windows
*
*   USAGE:
*
*   Just launch your raylib .lua file from command line:    rll.exe core_basic_window.lua
*   or drag&drop your .lua file over rll.exe
*
*
*   LICENSE: zlib/libpng
*
*   Copyright (c) 2016-2018 Ramon Santamaria (@raysan5)
*
*   This software is provided "as-is", without any express or implied warranty. In no event
*   will the authors be held liable for any damages arising from the use of this software.
*
*   Permission is granted to anyone to use this software for any purpose, including commercial
*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
*
*     1. The origin of this software must not be misrepresented; you must not claim that you
*     wrote the original software. If you use this software in a product, an acknowledgment
*     in the product documentation would be appreciated but is not required.
*
*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
*     as being the original software.
*
*     3. This notice may not be removed or altered from any source distribution.
*
********************************************************************************************/

#include "raylib.h"             // raylib library

#define RLUA_IMPLEMENTATION
#include "raylib-lua.h"         // raylib Lua binding

//------------------------------------------------------------------------------------
// Program main entry point
//------------------------------------------------------------------------------------
int main(int argc, char *argv[])
{
    if (argc > 1)
    {
        // TODO: Support additional arguments for lua file execution
        
        if (IsFileExtension(argv[1], ".lua"))
        {
            rLuaInitDevice();            // Initialize lua device
            rLuaExecuteFile(argv[1]);    // Execute lua program (argument file)
            rLuaCloseDevice();           // Close Lua device and free resources
        }
    }
    else
    {
        bool launcherShouldClose = false;
        
        while (!launcherShouldClose)
        {
            // Initialization
            //--------------------------------------------------------------------------------------
            int screenWidth = 800;
            int screenHeight = 450;

            InitWindow(screenWidth, screenHeight, "rLL - raylib Lua Launcher");
            
            // NOTE: Drag and drop support only available for desktop platforms: Windows, Linux, OSX
            int count = 0;
            char **droppedFiles;
            char luaFileToLoad[256];

            bool runLuaFile = false;
            
            SetTargetFPS(60);
            //--------------------------------------------------------------------------------------
            
            while (!WindowShouldClose() && !runLuaFile)
            {
                // Update
                //----------------------------------------------------------------------------------

                // Load a dropped Lua file dynamically
                if (IsFileDropped())
                {
                    droppedFiles = GetDroppedFiles(&count);
                    
                    if (count == 1) // Only support one Lua file dropped
                    {
                        if (IsFileExtension(droppedFiles[0], ".lua"))
                        {
                            runLuaFile = true;
                            strcpy(luaFileToLoad, droppedFiles[0]);
                        }
                        else TraceLog(WARNING, "[%s] Fileformat not supported", droppedFiles[0]);
                    }
                    
                    ClearDroppedFiles();
                }
                //----------------------------------------------------------------------------------
            
                // Draw
                //----------------------------------------------------------------------------------
                BeginDrawing();
                
                    ClearBackground(RAYWHITE);
                    
                    DrawText("rLL - raylib Lua launcher", 10, 10, 20, LIGHTGRAY);
                    DrawText("rLL v1.1", 10, 430, 10, GRAY);
                    DrawText("< drag & drop raylib Lua file here >", 230, 180, 20, GRAY);
                
                EndDrawing();
                //----------------------------------------------------------------------------------
            }
            
            // De-Initialization
            //--------------------------------------------------------------------------------------
            ClearDroppedFiles();                // Clear internal buffers
            
            CloseWindow();                      // Close window and OpenGL context
            //--------------------------------------------------------------------------------------
            
            launcherShouldClose = true;         // Close launcher if no Lua file loaded
            
            if (runLuaFile)
            {
                TraceLog(INFO, "------------------------------------");
                TraceLog(INFO, "Loading Lua file: %s", luaFileToLoad);
                TraceLog(INFO, "------------------------------------");
                
                rLuaInitDevice();                // Initialize lua device
                ChangeDirectory(GetDirectoryPath(luaFileToLoad));
                rLuaExecuteFile(luaFileToLoad);
                rLuaCloseDevice();               // Close Lua device and free resources
                
                launcherShouldClose = false;    // Return to launcher to load another Lua file
                
                TraceLog(INFO, "------------------------------------");
                TraceLog(INFO, "Closing Lua file...");
                TraceLog(INFO, "------------------------------------");
            }
        }
    }

    return 0;
}
