#pragma once

#include <SDL3/SDL.h>

#include <memory>  // Para unique_ptr
#include <string>  // Para string

#include "game/scene_manager.hpp"  // Para SceneManager::Scene

class Logo;
class Title;
class Game;

class Director {
   public:
    Director();                       // Constructor
    ~Director();                      // Destructor
    auto iterate() -> SDL_AppResult;  // Una iteración del bucle principal (callback model)

   private:
    // --- Variables ---
    std::string executable_path_;  // Path del ejecutable
    std::string system_folder_;    // Carpeta del sistema donde guardar datos

    // --- Gestión de escenas ---
    SceneManager::Scene active_scene_{SceneManager::Scene::QUIT};  // Escena activa (la que tiene objeto creado)
    std::unique_ptr<Logo> logo_;
    std::unique_ptr<Title> title_;
    std::unique_ptr<Game> game_;

    // --- Funciones ---
    void createSystemFolder(const std::string& folder);  // Crea la carpeta del sistema donde guardar datos
    void setFileList();                                  // Carga la configuración de assets desde assets.yaml
    void destroyCurrentScene();                          // Destruye la escena activa
    void createScene(SceneManager::Scene scene);         // Crea la escena indicada
};
