/**
 * 
*/

#include <RTSErrResult.h>
#include <GILLock.h>
#include <boost/python.hpp>
#include <boost/python/copy_const_reference.hpp>
#include <boost/python/return_value_policy.hpp>





RTSErrResult::RTSErrResult()
{

}


RTSErrResult::RTSErrResult(std::string resCode) : mResCode(resCode)
{

}       
    
RTSErrResult::~RTSErrResult()
{

}


void RTSErrResult::setResCode(std::string resCode) {
    this->mResCode = resCode;
}

void RTSErrResult::format(const std::string fmt_str, ...)
{
    va_list ap;
    char *fp = NULL;
    va_start(ap, fmt_str);
    vasprintf(&fp, fmt_str.c_str(), ap);
    va_end(ap);
    std::unique_ptr<char[]> formatted(fp);
    
    this->msgs.push_back(formatted.get());
	//this->mProp[std::wstring(L"msg")] = formatted.get();
    //this->mProp[key] = formatted.get();
}

RTSResult* RTSErrResult::getResult() {
    RTSResult* res = new RTSResult();
    res->setResCode(this->mResCode);
    std::string msgstr = std::string("msg");  //std::wstring msgstr = std::wstring(L"msg");

    std::string msg = this->msgs.back();
    res->setMsg(msg);
    int i = 0;


    // boost::python::dict d = res->getProps();

    // for (std::string msgtext : this->msgs)
    // {   
    //     std::string newmsg = msgstr + std::to_string(i);
    //     d[newmsg]= msgtext;
    //     i = i + 1;
    // }
    return res;

}



// PyObject* RTSErrResult::getResult() {
//     boost::python::dict d;
//     d[std::string("rescode")] = this->mResCode;
//     std::string msgstr = std::string("msg");  //std::wstring msgstr = std::wstring(L"msg");

//     int i = 0;

//     for (std::string msgtext : this->msgs)
//     {   
//         std::string newmsg = msgstr + std::to_string(i);
//         d[newmsg]= msgtext;
//         i = i + 1;
//     }
//     return boost::python::incref(boost::python::object(d).ptr());

// }

using namespace boost::python;

// BOOST_PYTHON_MODULE(RTSResult)
// {
//      class_<RTSResult>("RTSResult")
//         .def("getResCode", &RTSResult::getResCode)
//         .def("getProps", &RTSResult::getProps , return_value_policy<copy_const_reference>())
//        ;
// }

// void RTSPyLogging::log(std::string msg, PyObject* f){
//         // GIL state handler
//     PyLockGIL gstate;
//     // Python callback
//     call_method<void>(f, "log", msg);
//     // GIL handler release
// }

// std::string RTSErrResult::format(const std::string fmt_str, ...)
// {
//     va_list ap;
//     char *fp = NULL;
//     va_start(ap, fmt_str);
//     vasprintf(&fp, fmt_str.c_str(), ap);
//     va_end(ap);
//     std::unique_ptr<char[]> formatted(fp);
//     return std::string(formatted.get());
// }



// BOOST_PYTHON_MODULE(RTSResult)
// {


//      class_<RTSResult>("RTSResult", init<std::string>())
//         .def("get_bar", &Foo::get_bar
//             , return_value_policy<copy_const_reference>())
//        ;
// }