// 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 = "cn-table.xml";
var fichierJson = "cn-table.json";
var fichierCSV = "cn-table.csv";

// en entrée, on donne le nom du fichier à traiter sans le répertoire
var repertoireInitial = "../Liste-mots-phrases/temp/";
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('cn', {
    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 monjson = fs.createWriteStream(fichierJson);
monjson.write('{"cn":[');

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

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

var lejson = new csv(fichierATraiter, {
	header: ['hanzi', 
		'traditional', 
		'pinyin', 
		'translation', 
		'classifier', 
		'exemples',  
		//'lesson', 
		'sequence',
		'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;

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

    ligneCSV = "";
    ele = null;

    try {
        // on met en forme les enregistrements initiaux
        enregistrement.hanzi = enregistrement.hanzi.trim();
        // enregistrement.hanzi = enregistrement.hanzi.replace(/ /g, '');
        enregistrement.pinyin = enregistrement.pinyin.trim();
        enregistrement.translation = enregistrement.translation.trim();
        enregistrement.classifier = enregistrement.classifier.trim();

        // 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 = "";
        // }
        enregistrement.sound = "[sound:##]";
        // console.log(enregistrement.translation);
        ligneCSV = 
              enregistrement.hanzi + tab 
            + enregistrement.traditional 
            + tab + enregistrement.pinyin 
            //+ tab + enregistrement.grammar
            + tab + enregistrement.translation
            + tab + enregistrement.classifier
            + tab  + enregistrement.exemples 
            + tab + enregistrement.sequence
            + tab + enregistrement.sound 
            + tab + enregistrement.origin 
            + endLine;
        // DEBUG console.log(ligneCSV);
        // Ecriture de la ligne CSV
        moncsv.write(ligneCSV);
        // Ecriture de la ligne json
        monjson.write(JSON.stringify(enregistrement) + ",");

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


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



// 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");
monjson.write('{},]}');
monjson.end();