// librairie de gestion des répertoires et fichiers
const fs = require("fs");
const path = require("path");


// librairie de gestion des arguments de la ligne de commande
var argv = require("optimist").argv;


// librairie de traitement du pinyin
const pinyinizer = require('pinyinizer');
// librairie de gestion du hanzi
const opencc = require('node-opencc');
// librairie de gestion des fichiers xml
const builder = require('xmlbuilder');

// librairie de gestion des fichiers csv
var csv = require("comma-separated-values");

// données de stockage
var fichierXml = "Wohok-table.xml";
var fichierJson = "Wohok-table.json";
var fichierCSV = "Wohok-table.csv";

// en entrée, on donne le nom du fichier à traiter sans le répertoire
var repertoireInitial = "./";
var argument = argv._[0];

fichierDonnées = path.join(repertoireInitial,argument);
// DEBUG
// console.log(fichierDonnées);


// utilitaires
var tab = "\t";
var endLine = "\n";


// Variables fichier des fichiers csv, json et xml
fichierXml = path.join(repertoireInitial, argument + ".xml");
fichierJson = path.join(repertoireInitial, argument + ".json");
fichierCSV = path.join(repertoireInitial, argument + "-1.csv");

// on crée le fichier xml
var feed = builder.create('Wohoktable', {
    version: '1.0',
    encoding: 'UTF-8',
    standalone: true
});

// on crée le fichier csv
var moncsv = fs.createWriteStream(fichierCSV);

// on crée le fichier json

var json = fs.createWriteStream(fichierJson);
json.write('{"Wohok":[');


var fichierATraiter = fs.readFileSync(fichierDonnées, "UTF-8");

// DEBUG
// console.log(fichierATraiter);

var monjson = new csv(fichierATraiter, {
    header: ['hanzi','traditional', 'pinyin', 'grammar', 'translation','classifier', 'lesson', 'sound', 'origin']
  }).parse();


// la ligne CSV qu'on va écrire dans le fichier CSV  
var ligneCSV = "";
// L'élément xml qui constitue un enregistrement du fichier xml
var ele = null;

monjson.forEach(function(enregistrement){
    // DEBUG
    // console.log(enregistrement.hanzi);

    ligneCSV = "";
    ele = null;

    try {
        enregistrement.traditional = opencc.simplifiedToTraditional(enregistrement.hanzi);
        // DEBUG
        // console.log(enregistrement.hanzi, "**", enregistrement.traditional);
        // console.log(enregistrement.translation);
        
        // enregistrement.translation = enregistrement.translation.replace(/;/g, " /");
        // enregistrement.translation = enregistrement.translation.replace(/, /g, " / ");
        if (enregistrement.classifier == "") {
            enregistrement.classifier = "";
        }
        // console.log(enregistrement.translation);

        // traitement des champs pinyin avec des chiffres
        // enregistrement.pinyin = enregistrement.pinyin.toLowerCase();
        // // on va tester ça ...
        // try {
        //     var sauve = enregistrement.pinyin;
        //     enregistrement.pinyin = pinyinizer.pinyinize(enregistrement.pinyin);
        //     enregistrement.pinyin = enregistrement.pinyin.replace(/5/g, "");
        // } catch (err) {
        //     console.log("Erreur: " + pinyin);
        //     enregistrement.pinyin = sauve;
        // }
        
        ligneCSV =  enregistrement.hanzi + 
                    tab + enregistrement.traditional + 
                    tab + enregistrement.pinyin + 
                    tab + enregistrement.grammar + 
                    tab + enregistrement.translation+ 
                    tab + enregistrement.classifier + 
                    tab + enregistrement.lesson + 
                    tab + enregistrement.sound + 
                    tab + enregistrement.origin + 
                    endLine;
        // DEBUG console.log(ligneCSV);
        // Ecriture de la ligne CSV
        moncsv.write(ligneCSV);
        // Ecriture de la ligne json
        json.write(JSON.stringify(enregistrement) + ",");

        var ele = feed.ele({enregistrement});
    } catch (err) {
        console.log(err);
    }
})


  // DEBUG
  // console.log(monjson);



// Fermeture des fichiers json, xml et csv
// on ferme le fichier CSV 
moncsv.end();

// on écrit le fichier xml
fs.writeFileSync(fichierXml, feed.end({
    pretty: true
}));

// on écrit le fichier Json
// fs.writeFileSync(fichierJson, JSON.stringify(maineeduObj), "UTF-8");
json.write('{},]}');
json.end();