#include <xs/xlog.h>
#include <panda/log/file.h>

using namespace xs;
using namespace panda;
using namespace panda::log;

namespace xs {
    template <> struct Typemap<FileLogger::Config> : TypemapBase<FileLogger::Config> {
        static FileLogger::Config in (const Hash& h) {
            FileLogger::Config cfg;
            Sv val;

            if ((val = h.fetch("file"))) {
                cfg.file = xs::in<string>(val);
                if ((val = h.fetch("buffered")))   cfg.buffered = val.is_true();
                if ((val = h.fetch("check_freq"))) cfg.check_freq = xs::in<uint32_t>(val);
            }

            return cfg;
        }
    };

    template <> struct Typemap<FileLogger*> : Typemap<ILogger*, FileLogger*> {
        static string package () { return "XLog::File"; }
    };
}

MODULE = XLog::File                PACKAGE = XLog::File
PROTOTYPES: DISABLE

BOOT {
    Stash(__PACKAGE__).inherit("XLog::ILogger");
}

FileLogger* FileLogger::new (FileLogger::Config cfg) {
    RETVAL = new FileLogger(cfg);
}

void FileLogger::flush()