module deimos.xdgbasedir.basedir_fs;

import deimos.xdgbasedir.basedir;
import std.c.stdio : FILE;
import core.sys.posix.sys.types : mode_t;

extern(C) @nogc @system nothrow {
    char * xdgDataFind(const(char)* relativePath, xdgHandle *handle);
    char * xdgConfigFind(const char* relativePath, xdgHandle *handle);
    FILE * xdgDataOpen(const(char)* relativePath, const(char)* mode, xdgHandle *handle);
    FILE * xdgConfigOpen(const(char)* relativePath, const(char)* mode, xdgHandle *handle);
    int xdgMakePath(const(char)* path, mode_t mode);
}


version(XDGBasedirFSMainTest)
{
    import std.stdio;
    import std.c.string : strlen;
    import std.c.stdlib : free;
    
    void printPaths(string message, char* paths)
    {
        writef("%s: ", message);
        for (; paths[0] != '\0'; paths += strlen(paths) + 1)
        {
            writef("%s;", paths[0..strlen(paths)]);
        }
        writeln();
    }
    
    int main(string[] args)
    {
        xdgHandle handle;
        if (!xdgInitHandle(&handle)) {
            stderr.writeln("Could not initilaze xdgHandle");
            return -1;
        }
        scope(exit) xdgWipeHandle(&handle);
        
        auto autostartPaths = xdgConfigFind("autostart", &handle);
        scope(exit) free(autostartPaths);
        printPaths("Autostart path", autostartPaths);
        
        auto applicationsPath = xdgDataFind("applications", &handle);
        scope(exit) free(applicationsPath);
        printPaths("Applications path", applicationsPath);
        return 0;
    }
}