// config_yaml.hpp - Capa de persistència YAML de Config::EngineConfig
// © 2026 JailDesigner
//
// La configuració runtime viu en Config::EngineConfig (core/config/).
// Aquest fitxer afegeix una capa de persistència YAML que llegeix i
// escriu aquesta struct a disc. El Director crida ConfigYaml::* directament
// (init / setConfigFile / loadFromFile / saveToFile): la separació
// core/game queda relaxada al Director, que és EL programa, no part del motor.

#pragma once

#include <string>

#include "core/config/engine_config.hpp"

namespace ConfigYaml {

    // Única font de veritat de la configuració runtime. La capa YAML llegeix
    // i escriu aquí; els consumidors (Director i sistemes de core/) reben
    // referència a aquesta struct via injecció.
    inline Config::EngineConfig engine_config{
        .player2 = {
            .keyboard = {
                .key_left = SDL_SCANCODE_A,
                .key_right = SDL_SCANCODE_D,
                .key_thrust = SDL_SCANCODE_W,
                .key_shoot = SDL_SCANCODE_LSHIFT,
                .key_start = SDL_SCANCODE_2,
            },
            .gamepad_name = "",
            .gamepad_path = "",
        },
    };

    // Persistència YAML (no exposada a `core/`).
    inline std::string version{};           // Versión del config per validació
    inline std::string config_file_path{};  // Establert per setConfigFile()

    void init();  // Inicialitzar engine_config amb els valors per defecte
    void setConfigFile(const std::string& path);
    auto loadFromFile() -> bool;
    auto saveToFile() -> bool;

}  // namespace ConfigYaml
