/*******************************************************************************************
*
*   MainMenu v1.0.0 - Tool Description
*
*   MODULE USAGE:
*       #define GUI_MAINMENU_IMPLEMENTATION
*       #include "gui_MainMenu.h"
*
*       INIT: GuiMainMenuState state = InitGuiMainMenu();
*       DRAW: GuiMainMenu(&state);
*
*   LICENSE: Propietary License
*
*   Copyright (c) 2022 SleepeeSoftware. All Rights Reserved.
*
*   Unauthorized copying of this file, via any medium is strictly prohibited
*   This project is proprietary and confidential unless the owner allows
*   usage in any other form by expresely written permission.
*
**********************************************************************************************/

#include "raylib.h"

// WARNING: raygui implementation is expected to be defined before including this header
#undef RAYGUI_IMPLEMENTATION
#include "raygui.h"

#include <string.h>     // Required for: strcpy()

#ifndef GUI_MAINMENU_H
#define GUI_MAINMENU_H

typedef struct {
    // Define anchors
    
    // Define controls variables
    bool Toggle001Active;            // Toggle: Toggle001

    // Define rectangles
    Rectangle layoutRecs[4];

    // Custom state variables (depend on development software)
    // NOTE: This variables should be added manually if required

} GuiMainMenuState;

#ifdef __cplusplus
extern "C" {            // Prevents name mangling of functions
#endif

//----------------------------------------------------------------------------------
// Defines and Macros
//----------------------------------------------------------------------------------
//...

//----------------------------------------------------------------------------------
// Types and Structures Definition
//----------------------------------------------------------------------------------
// ...

//----------------------------------------------------------------------------------
// Module Functions Declaration
//----------------------------------------------------------------------------------
GuiMainMenuState InitGuiMainMenu(void);
void GuiMainMenu(GuiMainMenuState *state);
static void Button001();                // Button: Button001 logic
static void Button002();                // Button: Button002 logic
static void Button004();                // Button: Button004 logic

#ifdef __cplusplus
}
#endif

#endif // GUI_MAINMENU_H

/***********************************************************************************
*
*   GUI_MAINMENU IMPLEMENTATION
*
************************************************************************************/
#if defined(GUI_MAINMENU_IMPLEMENTATION)

#include "raygui.h"

//----------------------------------------------------------------------------------
// Global Variables Definition
//----------------------------------------------------------------------------------
//...

//----------------------------------------------------------------------------------
// Internal Module Functions Definition
//----------------------------------------------------------------------------------
//...

//----------------------------------------------------------------------------------
// Module Functions Definition
//----------------------------------------------------------------------------------
GuiMainMenuState InitGuiMainMenu(void)
{
    GuiMainMenuState state = { 0 };

    // Init anchors
    
    // Initilize controls variables
    state.Toggle001Active = true;            // Toggle: Toggle001

    // Init controls rectangles
    state.layoutRecs[0] = (Rectangle){ 120, 456, 144, 48 };// Toggle: Toggle001
    state.layoutRecs[1] = (Rectangle){ 432, 264, 144, 48 };// Button: Button001
    state.layoutRecs[2] = (Rectangle){ 120, 288, 144, 48 };// Button: Button002
    state.layoutRecs[3] = (Rectangle){ 768, 456, 144, 48 };// Button: Button004

    // Custom variables initialization

    return state;
}
// Button: Button001 logic
static void Button001()
{
    // TODO: Implement control logic
}
// Button: Button002 logic
static void Button002()
{
    // TODO: Implement control logic
}
// Button: Button004 logic
static void Button004()
{
    // TODO: Implement control logic
}


void GuiMainMenu(GuiMainMenuState *state)
{
    // Const text
    const char *Toggle001Text = "Debug Toggle";    // TOGGLE: Toggle001
    const char *Button001Text = "Play";    // BUTTON: Button001
    const char *Button002Text = "Settings";    // BUTTON: Button002
    const char *Button004Text = "Shutdown";    // BUTTON: Button004
    
    // Draw controls
    GuiToggle(state->layoutRecs[0], Toggle001Text, &state->Toggle001Active);
    if (GuiButton(state->layoutRecs[1], Button001Text)) Button001(); 
    if (GuiButton(state->layoutRecs[2], Button002Text)) Button002(); 
    if (GuiButton(state->layoutRecs[3], Button004Text)) Button004(); 
}

#endif // GUI_MAINMENU_IMPLEMENTATION
