#include "lua.utils.h"
#include <string>
#include <filesystem>
#include <algorithm>

namespace mini
{
    namespace lua
    {
        namespace debug
        {
            std::string pathToChunk(const std::string& path) {
                std::filesystem::path p(path);

                // 1. Normalizar la ruta
                p = p.lexically_normal();

                // 2. Buscar el directorio "data"
                auto it = std::find(p.begin(), p.end(), "data");
                if (it == p.end())
                    return ""; // no es un script Lua válido

                // 3. Construir la parte relativa después de "data"
                std::filesystem::path rel;
                for (++it; it != p.end(); ++it)
                    rel /= *it;

                // 4. Quitar ".lua"
                std::string s = rel.string();
                if (s.ends_with(".lua"))
                    s = s.substr(0, s.size() - 4);

                // 5. Convertir "/" → "."
                for (char& c : s)
                    if (c == '/')
                        c = '.';

                return s;
            }

            std::string chunkToPath(const std::string& chunk) {
                // 1. Convertir "ia.test" → "ia/test"
                std::string rel;
                rel.reserve(chunk.size() + 10);

                for (char c : chunk)
                    rel += (c == '.' ? '/' : c);

                // 2. Añadir prefijo y sufijo
                rel = "data/" + rel + ".lua";

                // 3. Convertir a ruta absoluta
                std::filesystem::path abs = std::filesystem::current_path() / rel;

                return abs.lexically_normal().string();
            }
        }
    }
}
