module dpp.translation.namespace;

import dpp.from;

string[] translateNamespace(in from!"clang".Cursor cursor,
                            ref from!"dpp.runtime.context".Context context)
    @safe
{
    import dpp.translation.translation: translate, ignoredCppCursorSpellings;
    import clang: Cursor;
    import std.conv: text;
    import std.algorithm: map, canFind, startsWith;
    import std.array: array;

    assert(cursor.kind == Cursor.Kind.Namespace);

    string[] lines;

    lines ~= [
            `extern(C++, "` ~ cursor.spelling ~ `")`,
            `{`,
    ];

    foreach(child; cursor.children) {

        if(child.kind == Cursor.Kind.VisibilityAttr) continue;

        lines ~= translate(child, context)
            .map!(a => (child.kind == Cursor.Kind.Namespace ? "    " : "        ") ~ a)
            .array;
    }

    lines ~= `}`;

    return lines;
}