/**
 * @file main.cpp
 * @brief Entry point
 * @author manzerbredes
 * @version Prototype
 * @date 8 Mars 2015
 *
 * Entry point of the application.
 *
 */



//----- std -----

#include <iostream>
#include <string>

//----- class -----
#include "CryptClass/AESCrypt.hpp"

//----- Prototype -----
void aff(std::string chaine);



    #include <xercesc/parsers/XercesDOMParser.hpp>
    #include <xercesc/dom/DOM.hpp>
    #include <xercesc/framework/MemBufInputSource.hpp>
    #include <xercesc/sax/HandlerBase.hpp>
    #include <xercesc/util/XMLString.hpp>
    #include <xercesc/util/PlatformUtils.hpp>
using namespace xercesc;

/**
 * @fn int main(int argc, char *argv[])
 * @author manzerbredes
 * @brief main function
 * @param argc contain *argv[] length
 * @param *argv[] contain the arguments list
 * @return Return code, an int.
 */
int main(int argc, char *argv[]){

     try {
        XMLPlatformUtils::Initialize();
      }
      catch (const XMLException& toCatch) {
        // Do your failure processing here
        return 1;
      }

    std::string xml="<root>\n\
                        <mo><![CDATA[ zalmkdzkl!:<<!!;<ii>!:!!;:!:;]]>\
                        </mo>\
                    </root>";

    XercesDOMParser *parser = new XercesDOMParser();
    MemBufInputSource myxml_buf((const XMLByte*)xml.c_str(), xml.size(), "dummy",false);
    parser->parse(myxml_buf);

    DOMDocument* xmlDoc = parser->getDocument();
    DOMElement* root=xmlDoc->getDocumentElement();

    DOMNodeList*      children = root->getChildNodes();
    const  XMLSize_t nodeCount = children->getLength();



    for(int i=0;i<nodeCount;i++){
        DOMNode* ne=children->item(i);
        char* valeur = XMLString::transcode(ne->getTextContent());

        std::string nom(valeur);
        std::cout << nom;

    }




  // Do your actual work with Xerces-C++ here.

    //XMLPlatformUtils::Terminate();






    /*HASHCrypt hash= HASHCrypt();

    byte code[16];

    hash.getMD5_128("Phrase de test !", code, sizeof(code));

    for(int i=0; i<16;i++){
        std::cout << code[i];
    }
    */


    /*AESCrypt cryptage= AESCrypt();
    std::string key="loic";
    std::string data(127,'A');

    std::cout << data << std::endl;

    std::string dataE=cryptage.encrypt(key, data);

    std::cout << std::endl <<dataE << std::endl;

    std::string key2="loic";
    std::string dataD=cryptage.decrypt(key2, dataE);
    std::cout << std::endl << dataD << std::endl;
*/

    return 0;

}




//---- Functions -----

void aff(std::string chaine){
        std::cout << chaine;
}
