// IAEngine: 2D Game Engine by IA
// Copyright (C) 2025 IASoft (PVT) LTD (oss@iasoft.dev)
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program.  If not, see <https://www.gnu.org/licenses/>.

#include <IAEngine/Engine.hpp>
#include <IAEngine/EngineLibraryInterface.hpp>

C_DECL(GameRequestedConfig GetConfigRequest())
{
    return {1280, 720};
}

C_DECL(VOID OnInitialize())
{
    
}

C_DECL(VOID OnTerminate())
{
}

C_DECL(VOID OnDebugDraw())
{
}

C_DECL(VOID OnFixedUpdate())
{
}

C_DECL(VOID OnUpdate(IN FLOAT32 deltaTime))
{
}

C_DECL(VOID OnResize(IN INT32 newWidth, IN INT32 newHeight))
{
    
}

C_DECL(PCCHAR GetName())
{
    return "IAEngine Editor";
}

C_DECL(UINT64 GetVersion())
{
    return IA_MAKE_VERSION(1, 0, 0);
}

C_DECL(PCCHAR GetPackageName())
{
    return "com.iasoft.iaengine.editor";
}

C_DECL(PCCHAR GetDeveloperName())
{
    return "IASoft (PVT) LTD";
}

C_DECL(PCCHAR GetPublisherName())
{
    return "IASoft (PVT) LTD";
}

int main(int argc, char* argv[])
{
    GameFunctionTable functionTable{};
    functionTable.GetConfigRequest = GetConfigRequest;
    functionTable.GetDeveloperName = GetDeveloperName;
    functionTable.GetName = GetName;
    functionTable.GetPackageName = GetPackageName;
    functionTable.GetPublisherName = GetPublisherName;
    functionTable.GetVersion = GetVersion;
    functionTable.OnDebugDraw = OnDebugDraw;
    functionTable.OnFixedUpdate = OnFixedUpdate;
    functionTable.OnInitialize = OnInitialize;
    functionTable.OnResize = OnResize;
    functionTable.OnTerminate = OnTerminate;
    functionTable.OnUpdate = OnUpdate;
    IAEngine_Run(functionTable);
    return 0;
}