#pragma once

#ifdef _DEBUG

#include <string>  // Para string

#include "external/fkyaml_node.hpp"  // Para fkyaml::node
#include "game/gameplay/room.hpp"    // Para Room::Data

/**
 * @brief Guardado de archivos YAML de habitaciones para el editor de mapas
 *
 * Lee el YAML original con fkyaml (para acceder a todos los campos: name_ca, name_en, etc.)
 * Genera el YAML como texto formateado compacto (idéntico al formato original de los ficheros).
 * Solo se usa en builds de debug.
 */
class RoomSaver {
   public:
    RoomSaver() = delete;

    // Carga el YAML original desde disco como nodo fkyaml (lee del filesystem, no del pack)
    static auto loadYAML(const std::string& file_path) -> fkyaml::node;

    // Genera y guarda el YAML completo a disco
    // original_yaml: nodo fkyaml con los datos originales (para campos que no se editan: name_ca, etc.)
    // room_data: datos editados (posiciones de enemigos, items, etc.)
    static auto saveYAML(const std::string& file_path, const fkyaml::node& original_yaml, const Room::Data& room_data) -> std::string;

   private:
    static auto buildYAML(const fkyaml::node& original_yaml, const Room::Data& room_data) -> std::string;
    static auto roomConnectionToYAML(const std::string& connection) -> std::string;
    static auto conveyorBeltToString(int direction) -> std::string;
};

#endif  // _DEBUG
