// 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/>.

#pragma once

#include <IAEngine/Nodes/INode.hpp>

namespace ia::iae
{
    class Scene
    {
      public:
        STATIC  RefPtr<Scene> Create();
        STATIC  RefPtr<Scene> Create(IN CONST String &sceneXML);

      public:
         VOID AddNode(IN RefPtr<INode> node);
         INode *GetNode(IN CONST String &name);
         VOID RemoveNode(IN CONST String &name);

      public:
        IVec2& Extent()
        {
            return m_extent;
        }

        Color &BackgroundColor()
        {
            return m_backgroundColor;
        }

      private:
        IVec2 m_extent{100, 100};
        Color m_backgroundColor{0, 0, 0, 255};
        Map<String, RefPtr<INode>> m_nodes;

      public:
        VOID Draw();
        VOID DebugDraw();

        VOID FixedUpdate();
        VOID Update();
    };
} // namespace ia::iae